Agora você deve estar se perguntando: se meu IP é dinâmico, com conexões ADSL que trabalham com PPPoE, ou o próprio PPP, como eu vou fazer um SNAT, já que tenho que especificar o IP?
Neste caso, podemos utilizar o
masquerading para mascarar nossas conexões.
O masquerading é como um SNAT, compartilha a Internet, mas é usado para casos de IP dinâmico, como conexões PPP, PPPoE, entre outras. No caso do SNAT, atua com a chain POSTROUTING. Da mesma forma que no SNAT, é necessário habilitar o encaminhamento de pacotes através da alteração do arquivo "ip_forward", ou utilizando a configuração do arquivo
/etc/sysctl.conf.
Usando como alvo o MASQUERADE:
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
Estamos mascarando toda a rede 192.168.0.0 que sai pela interface de saída (notem o -o) ppp0. Com isso, todas as nossas máquinas internas vão conseguir usar a conexão PPP, no caso de precisarem utilizar a internet. Ainda sim, poderíamos permitir apenas alguns IPs ou protocolos específicos.
# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -p tcp --dport 53 -j MASQUERADE
O exemplo acima segue o mesmo conceito dos itens vistos anteriormente, ou seja, haverá um NAT. Mas neste exemplo, só permitiremos o NAT quando a porta TCP for específica, neste exemplo a porta 53 está relacionada a DNS.
Utilizando DNAT
O DNAT, similar ao SNAT, é responsável por trocar os endereços de destino dos pacotes (destination nat). É muito usado para acesso à aplicações internas ou até balanceamento de carga de servidores.
Normalmente as solicitações têm origem de um meio externo (IP público) para o firewall, então o firewall, antes de rotear para o destino final, altera as informações de destino. Todas as informações do SNAT são válidas para o DNAT, como portas, endereços de origem e destino, protocolos, interfaces etc.
Mas a chain utilizada pelo DNAT é do pré-roteamento, ou seja, PREROUTING. Lembre-se de que o roteamento ocorre em dois momentos destintos:
- Quando os pacotes estão entrando no firewall;
- E quando estão saindo do firewall.
Então, se estamos utilizando SNAT e MASQUERADE, usamos POSTROUTING. No caso do DNAT, utilizamos PREROUTING.
Usando DNAT para um único servidor
Todas as solicitações de conexões providas da Internet em nosso roteador serão encaminhadas para um IP específico, indiferente do tipo de protocolo ou serviço (porta).
# iptables -t nat -A PREROUTING -s 200.200.200.1 -i eth1 -j DNAT --to 192.168.10.1
Quando os pacotes chegarem de 200.200.200.1 pela interface de entrada eth1, todos eles serão enviados para 192.168.10.1.
Fazendo DNAT para um web server
Quando utilizamos o DNAT, podemos utilizar para uma porta específica, por exemplo, um servidor web:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.10.1
Fazendo DNAT para um terminal service
Para fazermos DNAT para um terminal service, é necessário especificarmos a porta 3389:
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT --to 192.168.10.2
Como podemos verificar, existem duas regras de DNAT:
- Encaminhando solicitações HTTP para o servidor 192.168.10.1;
- Encaminhando pacotes para um servidor terminal service.
Isso é interessante, pois os usuários solicitantes da conexão só terão acesso ao serviço específico, não podendo explorar falhas de outros serviços, tais como banco de dados, SSH, telnet, e-mail etc.
Utilizando REDIRECT
O alvo REDIRECT é usado para redirecionar pacotes em uma mesma máquina. Muito utilizado no redirecionamento de pacotes com destino à porta 80, quando temos um proxy (o Squid, por exemplo) que utiliza a porta 3128.
Então, redirecionamos todos os pacotes da porta 80 para a porta 3128, e fazemos com isso um proxy transparente, onde os usuários nem imaginam que estão utilizando um proxy, e que tudo que é feito é logado ou bloqueado no próprio proxy.
Os pacotes têm a sua porta destino reescrita para poderem ser encaminhados.
Os alvos do REDIRECT são válidos nas chains de PREROUTING e OUTPUT, e nas chains criadas. Essas chains foram as que o administrador criou.
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
Neste exemplo, estamos redirecionando os pacotes com destino à porta 80 do nosso firewall para a porta 3128, que comumente é do proxy Squid.
Mas não tratamos de onde provêm os pacotes, deixando uma brecha para que todos tenham acesso (até endereços de fora da nossa rede local). Podemos utilizar o esquema de interface, no caso usando a interface de entrada como sendo a da nossa rede local, ou especificando diretamente nossa
rede local.
# iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128
Utilizando o NETMAP
Este target é utilizado para mapear uma rede em outra. Por exemplo, temos uma rede 192.168.0.0/24 e queremos que cada IP seja enviado como um SNAT para um IP 192.168.1.0/24, ou ainda IPs públicos.
Quando usaríamos isso?
Podemos ter situações onde estas redes têm que se comunicar, por exemplo, em uma VPN. De um lado 192.168.0 e de outro, 192.168.1.
O uso é bem simples:
# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -j NETMAP --to 192.168.1.0/24
Note que a rede origem e destino tem 254 hosts. Isso ocorre para podermos mapear corretamente, sendo assim, o IP 192.168.0.4 será mapeado para 192.168.1.4.
Referências
Espero que esse HOWTO consiga tirar as dúvidas do pessoal que apanha um pouco do IPtables. ;)
Artigo também publicado em: