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.185 ]

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


Executando o firewall



Quarto passo:

Agora basta tornar o arquivo executável e iniciá-lo com os comandos abaixo:

# chmod 750 /etc/rc.d/rc.firewall | ./rc.firewall

Bom, está aí uma boa solução para aumentar a segurança de uma rede corporativa. Mas apenas um firewall não basta para manter um bom nível de segurança, pois as formas de ataque são diversas, contudo podemos fazer uso de várias ferramentas integradas, como firewall, proxy, política de usuários, etc. Mas fica para um próximo artigo.

Espero ter contribuído um pouco com o meu conhecimento sobre o assunto.

Página anterior    

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

Um pouco de PERL

Capital Intelectual

Matriz <-> Filial com o OpenVPN

Leitura recomendada

Servidor de internet a rádio no Debian

Instalando um firewall mínimo em Debian

Entendendo TCP/IP (Parte 6) - Firewall

Criando um Firewall transparente com Bridges no Debian Etch

Criando um firewall simples e compartilhando a conexão usando o 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