Firewall seguro com o IPTables

É nosso dever enquanto administradores de uma rede corporativa, assegurar a confidencialidade das informações (que são vitais para a sustentação do negócio). Assim, o Firewall se torna uma ferramenta fundamental para o administrador estabelecer um maior nível de segurança no acesso às informações. Bem, vamos ao IPTables...

[ Hits: 107.189 ]

Por: Rafael Lebrão Martins em 17/06/2007


Arquivo rc.firewall completo



Vamos visualizar agora como ficou o nosso arquivo rc.firewall.

### Interfaces de rede
INT=eth0
EXT=ppp0

### Mensagem de inicialização do Firewall
echo "Ativando Regras do Firewall"

### Exclui todas as regras
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F

### Exclui cadeias customizadas
iptables -X

### Zera os contadores das cadeias
iptables -t nat -Z
iptables -t mangle -Z
iptables -t filter -Z

### Define a política padrão do firewall
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

### Regras PREROUTING
iptables -t nat -A PREROUTING -i $EXT -p tcp --dport 3389 -j DNAT --to 192.168.0.200
iptables -t nat -A PREROUTING -i $EXT -p tcp --dport 5900 -j DNAT --to 192.168.0.201
iptables -t nat -A PREROUTING -i $INT -p tcp --dport 80 -j REDIRECT --to-port 3128

### Regras INPUT
iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 1194 -j ACCEPT

### Regras FORWARD
iptables -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p icmp -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i $EXT -o $INT -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -i $EXT -o $INT -p tcp --dport 5900 -j ACCEPT

### Regras OUTPUT
iptables -A OUTPUT -m state --state NEW, ESTABLISHED, RELATED -j ACCEPT

### Regras POSTROUTING
iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE
Página anterior     Próxima página

Páginas do artigo
   1. Construindo o Firewall
   2. Arquivo rc.firewall completo
   3. Executando o firewall
Outros artigos deste autor

Matriz <-> Filial com o OpenVPN

Capital Intelectual

Um pouco de PERL

Leitura recomendada

Manual do IPtables - Comentários e sugestões de regras

Iptables detalhado

Balanceamento de carga entre 2 placas de rede

Configurando o iptables-p2p no Slackware

Autenticação no Iptables

  
Comentários
[1] Comentário enviado por joseslei em 17/06/2007 - 10:51h

Otimo tutorial, ajudou muito. Obrigado

[2] Comentário enviado por vodooo em 17/06/2007 - 13:40h

Bom artigo!

Mas acho que deveria ter incluído regras básicas como proteção contra:

anti-spoofing
anti_source_route

Mas parabéns pelo artigo!

[3] Comentário enviado por removido em 18/06/2007 - 02:45h

Posso ser sincero? Não achei muito bom não :(
Mas valeu pela iniciativa.

[4] Comentário enviado por zilli em 18/06/2007 - 08:34h

Parabéns pelo artigo !

Como esse é um assunto que sempre é de interesse, levanto apenas algumas situações que se bem discutidas será de grande aprendizado à todos nós.

1) A primeira ação que percemos no script é o PREROUTING. No exemplo do redirecionamento do SQUID para a porta 3128 fica a questão, ao redirecionarmos o tráfego para a porta 3128, isso não acarreta em uma entrada INPUT para essa porta ? E se isso for verdade irá funcionar, já que a política padrão do INPUT é DROP ?

2) Para quem trabalha com subredes (192.168.2.x, 192.168.3.x..etc), qual a melhor maneira de fazer com que todos tenham acesso a internet ?

3) Percebemos em scrips espalhados pela internet as vezes o uso indefido do FORWARD ou o mesmo é confundido com o OUTPUT. Afinal usamos o FORWARD para que ?

Abraços e novamente parabéns.
Daniel

[5] Comentário enviado por rafael martins em 18/06/2007 - 09:43h

Bom dia, Daniel. Você tem razão no questionamento 1. Eu me esqueci de acrescentar a regra INPUT liberando a porta 3128.
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT

No questionamento 2 a resposta é simples. Você terá que alterar as variáveis de rede. Veja como ficaria:
EM VEZ DE:
### Interfaces de rede
INT=eth0
EXT=ppp0

FICARIA:
### Interfaces de rede
INT=eth+
EXT=ppp0

O + significa eth0, eth1, eth2 e assim por diante. Sendo assim, todas as suas lan's serão liberadas.

Com relação ao questionamento 3, o FORWARD é consultado para o tráfego entre redes, tráfego redirecionado para outra máquina. Vou colocar alguns exemplos práticos:

Envio e recebimento de e-mails pela rede local; Neste caso é feito FORWARD nas portas 25 e 110, pois o outlook irá se conectar ao provedor de e-mails nestas portas. É um tráfego da rede local para a rede externa.
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 110 -j ACCEPT

Acessar um servidor FTP na internet; Fazer FORWARD na porta 21 liberando para o ip do servidor ou liberar todo o acesso à essa porta
iptables -A FORWARD -d [ip do servidor] -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 21 -j ACCEPT

Podemos fazer mais uma infinidade de coisas com esse Chain. Espero ter esclarecido as dúvidas.
Um abraço.

[6] Comentário enviado por zilli em 18/06/2007 - 09:58h

Tudo certo Rafael !

[7] Comentário enviado por marceloespindola em 07/07/2007 - 14:52h

Pessoal estou escrevendo um artigo aqui para o viva o linux sobre scrippt de firewall, ele está completo pois levei muito tempo para desenvolve-lo e tinha objetivo de reunir as principais soluções e dúvidas sobre firewall para este artigo, mas como quero construir um bom artigo ainda está em fase de construção para o vivaolinux, entretanto estou disponibilizando no endereço http://marcelolinux.blogspot.com/2007/07/meu-primeiro-artigo-do-vivaolinux.html

os arquivos e o artigo referente a script de firewall completo.

[8] Comentário enviado por arkanjoking em 14/01/2008 - 02:12h

Otimo Artigo manu.
Se possivel gostaria que vc desse uma olhada na minha duvida, ta tudo explicado aqui http://www.vivaolinux.com.br/comunidades/verTopico.php?codigo=191&codtopico=13233

To aguniado nisso, nao consigo fazer funcionar os jogos, valeu!

[9] Comentário enviado por valterrezendeeng em 19/02/2008 - 18:45h

Parabens pelo Artigo

Ele ajudou-me a Solucionar problemas com encaminhamento de Pacotes

Obrigado

Um grande Abraço

[10] Comentário enviado por linus black em 02/08/2009 - 22:14h

Eu li em algum lugar que essa regra aqui não e legal usar.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Mas que desta forma seria melhor
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE qual a diferença...?

[11] Comentário enviado por eeds em 22/01/2010 - 17:25h

chmod 750 /etc/rc.d/rc.firewall | ./rc.firewall
bash: ./rc.firewall: Permissão negada
alguem pode me dar uma dica ???

[12] Comentário enviado por kasper em 06/02/2010 - 23:58h

eeds, vc esta logado como root?

[13] Comentário enviado por mandrak66 em 21/08/2010 - 01:21h

Ola, pessoal ao ativar meu firewall com essas regras, vem uma mensagem assim:

iptables v1.4.1.1: Bad state
Try 'iptables -h' or 'iptables --help' for more information

iptables v1.4.1.1: Bad state
Try 'iptables -h' or 'iptables --help' for more information

iptables v1.4.1.1: Bad state
Try 'iptables -h' or 'iptables --help' for more information

iptables v1.4.1.1: Bad state
Try 'iptables -h' or 'iptables --help' for more information
sera que é um erro?

outra coisa, estou com squid configurado e não queria que ficase mascarado pois uso autenticação, tenho que mudar alguma regra?

grato a todos

[14] Comentário enviado por Rafael Oliveira em 31/08/2010 - 15:29h

mandrak66, corrigi os erros que você citou, e segue o script:

### Interfaces de rede
INT=eth1
EXT=eth0

### Mensagem de inicializaç do Firewall
echo "Ativando Regras do Firewall"

### Exclui todas as regras
iptables -t nat -F
iptables -t mangle -F
iptables -t filter -F

### Exclui cadeias customizadas
iptables -X

### Zera os contadores das cadeias
iptables -t nat -Z
iptables -t mangle -Z
iptables -t filter -Z

### Define a políca padrãdo firewall
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

### Regras PREROUTING
# iptables -t nat -A PREROUTING -i $EXT -p tcp --dport 3389 -j DNAT --to 192.168.0.200
iptables -t nat -A PREROUTING -i $INT -p tcp --dport 80 -j REDIRECT --to-port 3128

### Regras INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

### Regras FORWARD
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p icmp -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -p tcp --dport 80 -j ACCEPT

### Regras OUTPUT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

### Regras POSTROUTING
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE


Acabei retirando algumas partes dele, mais em geral os erros estavam em espaços dados entre NEW,ESTABLISHED e a utilma linha do script.
Ótimo artigo!
Valeu!

[15] Comentário enviado por jeff.jno em 30/06/2011 - 20:21h

Estou recebendo a seguinte mensagem quando rodo o script, será que é erro? Não intendi direito.
Eu testei se nao liberar a porta nao passa. Valew muito bom o script,

olha as mensagens que eu recebo.

iptables v1.4.4: "--state" requires a list of states with no spaces, e.g. ESTABLISHED,RELATED
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.4: "--state" requires a list of states with no spaces, e.g. ESTABLISHED,RELATED
Try `iptables -h' or 'iptables --help' for more information.
iptables v1.4.4: "--state" requires a list of states with no spaces, e.g. ESTABLISHED,RELATED

[16] Comentário enviado por jeff.jno em 30/06/2011 - 20:24h

Pessoal é so remover os espaços nas regras deixando como a mensagem em ingles esplica. ficando assim:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[17] Comentário enviado por jonnatha_faria em 04/08/2014 - 11:16h

Amigo, eu criei um script de firewall aki, e procurando sobre o erro presente no meu encontrei esse seu.. Meu problema é o seguinte... Minhas políticas padrão são todas DROP (INPUT, OUTPUT e FORWARD), porém noto que minha LAN de vez em qd dah uma garrada de menos de um segundo e volta, pouco né, mas isso eh suficiente pra dar pau nos downloads e vídeos carregando. Notei que isso só acontece quando uso o "iptables -P OUTPUT DROP". Sabe qual o motivo? Porque resolveu no seu usar o OUTPUT ACCEPT??? Vlw.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts