Esclarecimentos sobre Iptables

1. Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 08/08/2012 - 16:27h

Bom pessoal eu estou usando o seguinte script de firewall no meu servidor , mas não estou conseguindo liberar o compartilhamento da internet nas estações , só consigo quando eu crio um outro script especifico para o compartilhando,porém quando eu uso o outro script, ele desabilita as regras do meu firewall, gostaria que os amigos mais experientes pudessem dar uma olhada no meu script e me mostrar onde eu posso incluir o a regra do compartilhamento dentro do script do firewall, segue o script do Firewall:


#!/bin/bash
#
# Shell Script - Firewall
# =======================
# Analista: David Rodrigues
# Email: david.rodrigues@lasalle.edu.br
#
# chkconfig: 2345 80 20
# description: Firewall is a script easy of use for protection in the system.
#
### BEGIN INIT INFO
# Provides: Firewall
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Firewall is a script easy of use for protection in the system.
### END INIT INFO

# IP da Rede
NETWORK=192.168.23.0/24

# Interface da Rede Local - LAN
ILAN=eth1

# Interface da Rede Externa - Internet
INET=eth0

IPT=/sbin/iptables

if [ ! -x $IPT ]; then
if [ -e $IPT ]; then
echo "O programa 'iptables' está sem permissão de execução"
else
echo "O programa 'iptables' não está instalado atualmente. Você pode instalá-lo digitando:"
echo "yum install iptables"
fi
exit 0
fi

CLEAN_RULES () {
# Removendo regras
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

# Apagando chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Zerando contadores
$IPT -Z
$IPT -t nat -Z
$IPT -t mangle -Z
}

REDIRECT () {
# Redirecionamento
$IPT -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4158
}

SHARE_INTERNET () {
#Mascaramento
$IPT -t nat -A POSTROUTING -o $INET -s $NETWORK -j MASQUERADE

# Ativando o redirecionamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward
}

SECURITY () {
# Proteção para SYN Flood
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Rejeitar requisição de ICMP Echo destinado a Broadcasts e Multicasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Ignorar Mensagens Falsas de icmp_error_responses
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

for i in /proc/sys/net/ipv4/conf/*; do
# Não Redirecionar Mensagens ICMP
echo 0 > $i/accept_redirects

# Proteção a Ataques IP Spoofing
echo 0 > $i/accept_source_route

# O kernel decide se envia resposta pelo mesmo endereço ou não.
echo 1 > $i/arp_filter

# Permitir que Pacotes Forjados sejam logados pelo próprio kernel
echo 1 > $i/log_martians

# Verificar Endereço de Origem do Pacote (Proteção a Ataques IP Spoofing)
echo 1 > $i/rp_filter
done
}

LOG () {
$IPT -A INPUT -i $INET -p tcp --dport 135 -j DROP
$IPT -A INPUT -p tcp -m multiport ! --dports 0:1056 -j DROP
$IPT -A INPUT -p udp -j DROP
$IPT -A INPUT -p icmp -j DROP
$IPT -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-prefix "LOG-FW: "
}

SERVER_RULES () {
# Apache - Servidor Web
#$IPT -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# Apache TomCat - Servidor Web
#$IPT -A INPUT -p tcp --dport 8080 -j ACCEPT

# Bind9 - Servidor DNS
#$IPT -A INPUT -p udp --dport 53 -j ACCEPT

# DanGuardian - Servidor Proxy
#$IPT -A INPUT -i $ILAN -p tcp --dport 8080 -j ACCEPT

# DHCP - Servidor DHCP
$IPT -A INPUT -i $ILAN -p udp --sport 68 --dport 67 -j ACCEPT

# IPP - Protocolo de Impressão na Internet
$IPT -A INPUT -i $ILAN -p tcp --dport 631 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 138,631 -j ACCEPT

# NFS - Servidor NFS
#$IPT -A INPUT -p tcp -m multiport --dports 111,2049,51049 -j ACCEPT
#$IPT -A INPUT -p udp -m multiport --dports 111,49176,50445 -j ACCEPT

# ProFTPD - Servidor FTP
#$IPT -A INPUT -i $ILAN -p tcp --dport 21 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 49152:49162 -j ACCEPT

# Postfix - Servidor de E-mail
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 25,110 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 465,995 -j ACCEPT

# PostgreSQL - Servidor Postgresql
#$IPT -A INPUT -i $ILAN -p tcp --dport 5432 -j ACCEPT

# Samba - Serviços de Diretório da Microsoft
$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 445,139 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 137,138 -j ACCEPT

# Squid - Servidor Proxy
$IPT -A INPUT -i $ILAN -p tcp --dport 4158 -j ACCEPT

# SSH - Servidor SSH
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 20 -j DROP
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -m state --state NEW -m recent --set
$IPT -A INPUT -i $ILAN -p tcp --dport 22 -j ACCEPT

# TFTP/uDHCP - Servidor LTSP
#$IPT -A INPUT -i $ILAN -p udp --dport 69 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp --dport 2000 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p udp --dport 514 -j ACCEPT

# VNC - Servidor de Acesso Remoto
#$IPT -A INPUT -p tcp --dport 5900 -j ACCEPT

# Webmin - Gerenciador Web de Servidor
#$IPT -A INPUT -i $ILAN -p tcp --dport 10000 -j ACCEPT
}

SERVICE_RULES () {
# DNS - Serviço de Nomes de Dominios
$IPT -A FORWARD -o $INET -p udp -m multiport --dports 53,5353 -j ACCEPT

# FTP - Protocolo de Transferência de Arquivo
$IPT -A FORWARD -o $INET -p tcp --dport 21 -j ACCEPT

# HTTP - Protocolo de Transferência de Hypertext
$IPT -A FORWARD -o $INET -p tcp -m multiport --dports 80,8080 -j ACCEPT

# HTTPS - Protocolo de Transferência de Hypertext Seguro
$IPT -A FORWARD -o $INET -p tcp --dport 443 -j ACCEPT

# MSNMS - Serviço de Mensageiro de Rede da Microsoft
#$IPT -A FORWARD -o $INET -p tcp -m multiport --dports 1863,7001 -j ACCEPT
#$IPT -A FORWARD -o $INET -p udp --dport 7001 -j ACCEPT

# NTP - Protocolo para sincronização dos relógios
#$IPT -A FORWARD -o $INET -p udp --dport 123 -j ACCEPT

# Ping
#$IPT -A INPUT -i $ILAN -p icmp --icmp-type 8 -j ACCEPT
#$IPT -A FORWARD -o $INET -p icmp --icmp-type 8 -j ACCEPT

# POP3 - Protocolo de Correio
#$IPT -A FORWARD -o $INET -p tcp --dport 110 -j ACCEPT

# POP3S - Protocolo de Correio Seguro
#$IPT -A FORWARD -o $INET -p tcp --dport 995 -j ACCEPT

# PPTP - Protocolo de Encapsulamento Ponto a Ponto
#$IPT -A FORWARD -o $INET -p tcp --dport 1723 -j ACCEPT

# RDP - Protocolo de Área de Trabalho Remoto
#$IPT -A FORWARD -o $INET -p tcp --dport 3389 -j ACCEPT

# SSDP - Protocolo para Descoberta de Serviços Simples
#$IPT -A INPUT -i $ILAN -p udp --dport 1900 -j ACCEPT

# SSH - Shell Seguro
$IPT -A FORWARD -o $INET -p tcp --dport 22 -j ACCEPT

# SMTP - Protocolo Simples para Transferência de Correio
#$IPT -A FORWARD -o $INET -p tcp --dport 25 -j ACCEPT

# SSMTP - Protocolo Simples para Transferência de Correio Seguro
#$IPT -A FORWARD -o $INET -p tcp --dport 465 -j ACCEPT

# TELNET
#$IPT -A FORWARD -o $ILAN -p tcp --dport 23 -j ACCEPT

# VNC - Computação em Rede Virtual
#$IPT -A FORWARD -o $ILAN -p tcp --dport 5900 -j ACCEPT

# XMPP - Protocolo de Presença e Mensagens Extensiva
#$IPT -A FORWARD -o $INET -p tcp --dport 5222 -j ACCEPT
}

ENABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES

# Política
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

# Adicionando redirecionamentos
#REDIRECT

# Compartilhando a Internet
SHARE_INTERNET

# Atribuindo segurança
SECURITY

# Adicionando regras p/ Servidores
SERVER_RULES

# Adicionando regras p/ Serviços
SERVICE_RULES

# Manter Conexões Estabelecidas
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Liberando o Tráfego na Interface loopback
$IPT -A INPUT -i lo -j ACCEPT

# LOGs
LOG
}

DISABLE_FW () {
# Removendo regras, apagando chains e zerando contadores
CLEAN_RULES

# Política
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# Adicionando redirecionamentos
#REDIRECT

# Compartilhando a Internet
SHARE_INTERNET
}

MODULES () {
MOD=(
"iptable_filter"
"iptable_nat"
"iptable_mangle"
"ipt_LOG"
"ipt_REDIRECT"
"ipt_MASQUERADE"
)

for N in $(seq 0 $[${#MOD[@]}-1]); do
if [ -z "$(lsmod | grep ${MOD[$N]})" ]; then
/sbin/modprobe ${MOD[$N]}
fi
done
}

EXEC () {
if [ $(whoami) = "root" ]; then
MODULES
$1 && success || failure
RET=0
else
echo -n "You're not a user root"
failure
RET=1
fi
}

. /etc/init.d/functions

case "$1" in
start)
echo -n "Starting Firewall iptables: "
EXEC ENABLE_FW
;;
stop)
echo -n "Stopping Firewall iptables: "
EXEC DISABLE_FW
;;
restart|reload)
echo -n "Reloading Firewall configuration: "
EXEC ENABLE_FW
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
esac

echo
exit $RET


  


2. Re: Esclarecimentos sobre Iptables

Alex
alexhctp

(usa Linux Mint)

Enviado em 08/08/2012 - 18:00h

Oi Amigo, observando o seu script eu achei ele um pouco desorganizado.
Para ficar algo simples de fácil compreensão divida tudo em módulos. Vou simplificar pra você. O script é lido de cima para baixo, ou seja, se você colocar uma regra liberando e outra proibindo, vc acabada criando redundância e enlouquece o seu sistema. Procure seguir a sequencia a seguir:

-> BLOQUEIA TUDO
-> DEFINA SUAS PRÓPRIAS CHAINS (QDO POSSUIR)
-> CRIE/ADICIONE AS REGRAS PARA AS CHAINS PERSONALIZADAS
-> CRIE/ADICIONE AS REGRAS PARA CHAIN INPUT
-> CRIE/ADICIONE AS REGRAS PARA CHAIN FORWARD
-> CRIE/ADICIONE AS REGRAS PARA CHAIN OUTPUT
-> CRIE/ADICIONE AS REGRAS PARA TABELA NAT
-> CRIE/ADICIONE AS REGRAS PARA CHAIN PREROUTING (TAB NAT)
-> CRIE/ADICIONE AS REGRAS PARA CHAIN POSTROUTING (TAB NAT)- {O redirecionamento do squid vem aqui.}
-> CRIE/ADICIONE AS REGRAS PARA TABELA MANGLE

Se voce organizar nessa sequencia, seu scrip vai funfar de boa.

Se tiver duvida, entra em contato.

Abraco!


3. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 09/08/2012 - 17:20h

Um imagino que sim eu fui copiando conforme as minha necessidades , vou tentar organizar o meu script , mas me diga onde devo atribuir a regra para compartilhar a internet? Em qual secção das que você criou para eu organizar ?
Poderia dar um exemplo de algo que você usa ?


Obrigado e valeu por responder !

"conhecimento não compartilhado se torna nulo".


4. Re: Esclarecimentos sobre Iptables

Alex
alexhctp

(usa Linux Mint)

Enviado em 11/08/2012 - 15:10h

Oi amigo, caso o seu objetivo seja apenas liberar e compartilhar a conexão, usa os comandos listados abaixo. antes de cada um eu lhe explico o que eles fazem:

Habilita o modulo do iptables, caso o mesmo não esteja ativo.
modprobe iptable_nat

Ativa o ip_forward para encaminhar os pacotes utilizados pra fazer o NAT.
echo 1 > /proc/sys/net/ipv4/ip_forward

Regra de roteamento que diz para o iptables redirecionar para a internet as requisições com destinos diferentes da rede local, ou seja, habilita um gateway no seu server.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Na hora de colocar no script, lembra da dica que te dei, segue uma sequencia logica. To comentando um dos meus scripts pra te mostrar, ok?

Qualquer duvida estou a disposicao. ;)


5. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 14/08/2012 - 07:49h

Já fiz isso meu amigo , não tenho dúvidas quanto a isso , mas para que a regra inicie com o boot preciso introduzir isso em um script com ordem de execução junto com o boot, como eu tenho aquele script lá do firewall queria introduzir nele , para que todas as regras destinas ao Iptables fique naquele arquivo , ficando fácil na hora de fazer uma manutenção!

Minha dúvida é , em qual posição eu coloco aquelas regras no script do firewall???


6. Re: Esclarecimentos sobre Iptables

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 14/08/2012 - 09:27h

Cara, notei com base nas tuas regras no firewall abaixo
# IPP - Protocolo de Impressão na Internet
$IPT -A INPUT -i $ILAN -p tcp --dport 631 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 138,631 -j ACCEPT

# NFS - Servidor NFS
#$IPT -A INPUT -p tcp -m multiport --dports 111,2049,51049 -j ACCEPT
#$IPT -A INPUT -p udp -m multiport --dports 111,49176,50445 -j ACCEPT

# ProFTPD - Servidor FTP
#$IPT -A INPUT -i $ILAN -p tcp --dport 21 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 49152:49162 -j ACCEPT

# Postfix - Servidor de E-mail
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 25,110 -j ACCEPT
#$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 465,995 -j ACCEPT

# PostgreSQL - Servidor Postgresql
#$IPT -A INPUT -i $ILAN -p tcp --dport 5432 -j ACCEPT

# Samba - Serviços de Diretório da Microsoft
$IPT -A INPUT -i $ILAN -p tcp -m multiport --dports 445,139 -j ACCEPT
$IPT -A INPUT -i $ILAN -p udp -m multiport --dports 137,138 -j ACCEPT


Então mantém todos esses serviços no firewall ?
Não é recomendado, principalmente o servidor de arquivos Samba junto com firewall.
se precisar de algumas dicas sobre firewall e criação de script shell iptables
http://mundodacomputacaointegral.blogspot.com.br/2012/05/entendendo-o-funcionamento-de-um.html


7. Re: Esclarecimentos sobre Iptables

David Rodrigues
david_rodrigues

(usa CentOS)

Enviado em 14/08/2012 - 09:57h

Sabe amigo , eu preciso sim do Samba e Firewall , nesse servidor eu preciso manter os seguintes serviços:

# dhcpd
# Squid (Controle de Acesso)
# Samba ( Integrar as estações e permitir o compartilhamento de dados
# Firewall
# Apache (Programa da Empresa)
# Bind
# PostgreSQL ( Base de dados do Programa da empresa)


Para mim está sendo um desafio e tanto e tenho estudado bastante, mas ainda tenho alguns probleminhas com IPtables , por isso pedi ajuda em algumas dúvidas parceiro, se puder me ajudar desde já agradeço ....