Firewall Simples para uma rede interna
Autor: Marcos Ferreira da Silva | Publicado: 2010-09-05T09:07:00-03:00

Abaixo segue um firewall incial para entendimento do funcionamento do firewall no linux. Para testar o funcionamento do firewall podemos instalar uma máquina virtual com windows XP e colocá-la na rede interna deste firewall, e não esquecer de instalar o pacote iptraf, que é um monitor de tráfego em tempo real muito útil para verificação dos pacotes que estão passando pelo firewall, uma ferramenta útil na resolução de problemas.

A seguir temos um firewall que irá deixar todo o tráfego da rede interna sair para a Internet sem qualquer bloqueio, isto é apenas uma situação inicial.

[root@fw ~] vim /root/bin/fw2.sh

#!/bin/bash

# Limpa as regras e chains da tabela FILTER
iptables -F
iptables -X

# Limpa as regras e chains da tabela NAT
iptables -t nat -F
iptables -t nat -X

# Coloca a politica das chains INPUT e FORWARD como descarte dos pacotes
iptables -P INPUT   DROP
iptables -P FORWARD DROP

# Aceita todos os pacotes que estejam entrando na interface de lopback
iptables -A INPUT -i lo -j ACCEPT

# Registra todos os pacotes que estejam entrando no firewall, limitado a 1 
# pacote por segundo colocando um prefixo no registro de acordo com a chain, 
# isto serve para melhor identificar relativo a qual chain é o registro
# Para que este registro seja gravado em um arquivo separado do 
# /var/log/messages altere no arquivo /etc/syslog.conf e inclua na última 
# linha 
# *.debug   /var/log/debug.log
iptables -A INPUT   -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:INPUT] "
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:FORWARD] "

# Irá mascarar todas as requisições como se fosse o IP da interface eth0 que estivesse pedindo
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Em uma segunda situação podemos bloquear os pacotes de broadcast do windows vindos da rede interna.

[root@fw ~] vim /root/bin/fw3.sh

#!/bin/bash

# Limpa as regras e chains das tabelas FILTER e NAT
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Coloca a politica das chains INPUT e FORWARD como descarte dos pacotes
iptables -P INPUT   DROP
iptables -P FORWARD DROP

# Aceita todos os pacotes que estejam entrando na interface de lopback
iptables -A INPUT -i lo -j ACCEPT

# Bloqueia todos os pacotes que sejam do protocolo UDP com destino a porta 137 que estejam 
# entrando em qualquer interface.
iptables -A INPUT -p udp --dport 137 -j DROP

# Registra todos os pacotes que estejam entrando ou passando pelo firewall, limitado a 1 pacote por segundo. 
iptables -A INPUT   -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:INPUT] "
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:FORWARD] "

# Irá mascarar todas as requisições como se fosse o IP da interface eth0 que estivesse pedindo
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Uma outra situação seria bloquear todas os pacotes vindos da rede interna das máquinas windows e liberar acesso a administração remota via ssh.

[root@fw ~] vim /root/bin/fw4.sh

#!/bin/bash

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

iptables -P INPUT   DROP
iptables -P FORWARD DROP

# Aceita a entrada de todos os pacotes que pertença a conexões estabelecidas ou relacionadas
# independente da interface de entrada
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

# Bloqueia todos os pacotes que sejam do protocolo UDP com destino ao range de portas que vão 
# de 137 a 139 que estejam entrando em qualquer interface.
iptables -A INPUT -p udp --dport 137:139 -j DROP

# Aceita a entrada de pacotes que sejam do protocolo TCP com destino a porta 22 e sejam início
# de conexão
iptables -A INPUT -p tcp --dport  22 -m state --state NEW -j ACCEPT

iptables -A INPUT   -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:INPUT] "
iptables -A FORWARD -m limit --limit 1/s -j LOG --log-level debug --log-prefix "[FW:FORWARD] "

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Até o momento nos preocupamos com os pacotes que chegaram ao firewall, ou seja, trabalhamos somente com a chain INPUT, posteriormente mudaremos o firewall para trabalhar com os pacotes que irão atravessar o firewall, chain FORWARD. Iremos controlar o acesso da rede interna à rede externa.