Entendendo TCP/IP (Parte 6) - Firewall
Neste artigo, o sexto da série, vou explicar o funcionamento de um firewall e mostrar como o iptables funciona.
Introdução
Vejo aqui no VOL e em outros fóruns, pessoas tirando dúvidas sobre o IPtables e notei que a maioria das dúvidas, se deve ao fato da
pessoa não entender da tecnologia em questão, ou seja, não sabe como funciona um firewall, e nem o próprio TCP/IP.
Por isso, decidi escrever uma série de artigos sobre rede e agora chegou a vez do firewall. Se você não sabe o que são portas TCP e UDP, sugiro ler os meus artigos anteriores:
Acontece que, a maioria dos software de firewall de hoje, senão todos, possuem outras características além do firewall em si. Mas, para entendermos melhor os conceitos, vamos nos ater ao básico neste momento.
O firewall sempre lê as regras de cima para baixo, executando a ação descrita na primeira regra onde o pacote se encaixar. Por exemplo, a regra 2 abaixo, nunca será executada:
Neste caso, o correto é colocar a regra 2 antes da 1.
Essa segunda regra é necessária para liberar também a volta do pacote, que agora tem como porta de origem, a porta 80 (HTTP). Fica evidente que para cada regra de firewall, uma segunda regra deverá ser feita para permitir a volta do pacote.
Para evitar isso, os firewalls atuais trabalham com o conceito de Statefull. Isso permite que uma regra temporária seja automaticamente criada quando um dado passa pelo firewall permitindo a volta do pacote.
O IPtables pode trabalhar tanto com Stateless, como com Statefull. Veremos isso mais pra frente.
Por isso, decidi escrever uma série de artigos sobre rede e agora chegou a vez do firewall. Se você não sabe o que são portas TCP e UDP, sugiro ler os meus artigos anteriores:
- Entendendo TCP/IP
- Entendendo TCP/IP (parte 2) - Endereços IP
- Entendendo TCP/IP (Parte 3) - Resolução de nomes
- Entendendo TCP/IP (parte 4) - DHCP
- Entendendo TCP/IP (Parte 5) - Portas TCP/UDP
Funcionamento de um firewall
Basicamente, um firewall é um software que trabalha bloqueando ou liberando as conexões de rede, de acordo com regras pré-estabelecidas baseadas no endereço de origem, no endereço de destino e na porta de destino (serviço) da conexão.Acontece que, a maioria dos software de firewall de hoje, senão todos, possuem outras características além do firewall em si. Mas, para entendermos melhor os conceitos, vamos nos ater ao básico neste momento.
O firewall sempre lê as regras de cima para baixo, executando a ação descrita na primeira regra onde o pacote se encaixar. Por exemplo, a regra 2 abaixo, nunca será executada:
Neste caso, o correto é colocar a regra 2 antes da 1.
Stateless x Statefull
Quando uma conexão é permitida no firewall, é evidente que a volta também será. Por exemplo, para permitirmos que o firewall navegue na internet, devemos criar a seguinte regra (reparem agora na porta de origem):Essa segunda regra é necessária para liberar também a volta do pacote, que agora tem como porta de origem, a porta 80 (HTTP). Fica evidente que para cada regra de firewall, uma segunda regra deverá ser feita para permitir a volta do pacote.
Para evitar isso, os firewalls atuais trabalham com o conceito de Statefull. Isso permite que uma regra temporária seja automaticamente criada quando um dado passa pelo firewall permitindo a volta do pacote.
O IPtables pode trabalhar tanto com Stateless, como com Statefull. Veremos isso mais pra frente.
Neste caso, eu vou usar a chain POSTROUTING, pois estou trabalhando na SAÍDA:
# iptables -t nat -A POSTROUTING -i eth1 -p tcp --dport 110 -j SNAT --to-source 200.200.100.60
Lembrando que essa regra deve vir antes da regra de MASQUERADE, pois o iptables é top-down, ou seja, as regras mais acima são executadas primeiro."
-- Acredito que neste caso não se pode utilizar o MASQUERADE.
O MASQUERADE somente se usa no IPtables quando o IP da placa de rede de entrada da Internet/dados está dinâmico (ou automático).
Todas as regras para os vários IPs do gateway, nesse caso, devem ser com SNAT.
"# iptables -A FORWARD -i eth0 -o eth1 -s 172.20.16.60 -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
Acima, a regra permite (-j ACCEPT) que pacotes de DNS (-p udp --dport 53) vindos de 172.20.16.60 (-s 172.20.16.60) com destino ao DNS do Google (- d 8.8.8.8) entrando pela interface da LAN (-i eth0) e saindo pela interface de internet (-o eth1) atravessem o firewall (-A FORWARD)."
-- Note que especificar qualquer nome a ser resolvido com uma consulta remota, como a um DNS, é uma ideia muito ruim.
"Não se preocupe em entender esse comando agora, pois vou explicá-lo mais pra frente neste artigo. A princípio, tenha em mente que esse comando vai fazer com que todos as estações da rede saiam com o IP do firewall.
Para comprovar isso, acesse: http://meuip.datahouse.com.br/
Note que o IP mostrado é o do firewall, e não o teu."
-- O IP mostrado não é o do firewall, é o do modem/roteador.
Mas está bom o artigo.