NAT (Network Address Translator) é o processo que altera um ou mais campos do cabeçalho IP.
O exemplo mais simples e utilizado é o mascaramento, que faz com que todas as estações de trabalho da rede interna saiam para a internet através
de um único endereço IP válido.
Outro exemplo, é fazer com que uma requisição vinda da internet possa ser direcionada para uma máquina na rede interna, fazendo com que vários
serviços (e-mail, HTTP, FTP) rodando em máquinas diferentes possam ser acessados tendo-se um único endereço válido.
Vamos analisar melhor no desenho abaixo:
Como expliquei em artigos anteriores, para que máquinas com IP privado (ex.: 172.20.x.x) acessem a Internet, é necessário fazer com que todas as
estações saiam para a Internet com um IP válido.
No iptables, isso é feito com o seguinte comando:
# iptables -t nat -A POSTROUTING -j MASQUERADE
Isso faz com que todo tráfego que passar pelo firewall, irá sair com o IP da interface de saída. Se você quiser que somente os dados que saem para a
Internet sejam mascarados, basta adicionar a interface de saída (vamos suporte que seja a eth1).
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Enquanto a tabela de firewall possui três chains, a de NAT possui duas: PREROUTING e POSTROUTING. Como podemos ver na imagem acima,
PREROUTING é usada ANTES do pacote entrar no firewall e POSTROUTING é usado DEPOIS de sair do firewall.
O NAT também é muito usado onde o gateway da rede também é o proxy. É comum usar, nessas situações, o proxy transparente, que nada mais é do
que enviar os dados que estão saindo para a porta 80 e 443 e redirecioná-los para a porta do proxy.
Para fazer isso, é necessário tratar o pacote ANTES dele entrar no firewall, portanto, usamos a chain PREROUTING:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
Isso fará com que todo acesso de HTTP seja direcionado para a porta 3128, onde roda o proxy. Podemos também direcionar o tráfego para outro
servidor.
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 172.20.120.4:3128
Uma outra possibilidade interessante do NAT é permitir que um único IP seja usado para disponibilizar diferentes serviços em diferentes servidores.
Vamos supor que você tenha um servidor Web com IP 172.16.10.80 e um outro servidor de e-mail com IP 172.16.10.25. Podemos direcionar o tráfego
que chega pela internet para esses servidores.
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 172.16.10.80:80
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 25 -j DNAT --to-destination 172.16.10.25:25
Há situações onde o gateway possui vários IPs e eu preciso que determinado acesso seja feito por um IP diferente do padrão. Por exemplo, se meu
servidor possui dois endereços 200.200.100.50 (padrão) e 200.200.100.60 e eu preciso fazer com que POP3 sempre saia pelo 60.
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.
Salvando e restaurando as regras
Eu costumo colocar as regras de firewall em um script que é executado no boot. Mas, há situações em que você pode salvar o estado atual do firewall
para poder fazer várias alterações de teste.
Assim que os testes forem feitos, é possível restaurar o estado anterior. Isso é feito com o comando
iptables-save:
# iptables-save > regras.lst
Para restaurar as regras anteriores, basta executar:
# iptables-restore < regras.lst
Módulos
Eu ia falar dos módulos que aumentam as opções do iptables, mas há um artigo muito bom escrito pelo
Edson aqui mesmo no VOL:
Mais informações
Nos links abaixo, há mais informações sobre firewall e iptables.AX: