Você precisa criar regras NAT as quais dirão ao kernel quais conexões
serão alteradas, e como alterá-las. Para fazer isso, utiliza-se o versátil iptables
e dizemos a ele para alterar a tabela NAT ao especificar a opção `-t nat'.
As regras da tabela NAT contêm três listas chamadas `chains': cada regra é examinada em ordem, até que alguma delas corresponda-se com o pacote analizado. As três 'chains' são chamadas PREROUTING (para Destination NAT, quando os pacotes estão prestes a entrar), POSTROUTING (para Source NAT, assim que os pacotes saem), e OUTPUT (para Destination NAT de pacotes gerados localmente.
O diagrama abaixo ilustraria isso perfeitamente se eu tivesse talento artístico: :)
_____ _____
/ \ / \
PREROUTING -->[Decisão ]----------------->POSTROUTING----->
\D-NAT/ [de Roteamento] \S-NAT/
| ^
| __|__
| / \
| | OUTPUT|
| \D-NAT/
| ^
| |
----> Processamento Local ----
Em cada um dos pontos acima, quando um pacote passa, é verificado a conexão com a qual ele está associado. Se é uma nova conexão, é verificada a chain correspondente na tabela NAT para ver o que fazer com a mesma. A resposta dada será idêntica para todos os outros pacotes relacionados com tal conexão.
iptables
tem um número de opções padrão conforme a lista abaixo.
Todas as opções com dois hífens (--) podem ser abreviadas, desde que o
iptables
ainda possa diferenciá-las das demais opções disponíveis.
Se seu kernel tem suporte a iptables via módulos, você precisará carregar o
módulo ip_tables.o antes com o seguinte comando: `insmod ip_tables'.
A opção mais importante é a seleção da tabela com `-t'. Para todas as operações NAT, será necessária a opção `-t nat' para a tabela NAT. A segunda mais importante é a opção '-A', que adiciona uma nova regra no fim da chain (`-A POSTROUTING'), ou `-I' para adiconá-la no início (eg. `-I PREROUTING').
Você pode especificar a origem (`-s' or `--source') e o destino (`-d' or `--destination') dos pacotes que sofrerão NAT. Tais opções podem ser seguidas de um simples endereço IP ( 192.168.1.1), um nome (www.gnumonks.org), ou um endereço de rede (192.168.1.0/24 ou 192.168.1.0/255.255.255.0).
Também podem ser especificadas as interfaces de entrada (`-i' ou `--in-interface')
ou de saída (`-o' ou `--out-interface'). Qual das interfaces que poderá ser
especificada dependerá da chain que receberá a regra: em
PREROUTING você pode selecionar apenas a interface de entrada, e em POSTROUTING
(e OUTPUT) apenas a interface de saída é selecionada. Se você fizer a opção errada,
o iptables
restornará um erro.
Foi dito acima que podem ser especificados endreços de origem e destino. Se o endereço de origem foi omitido, a regra servirá para qualquer origem. Se o endereço de destino for omitido, a regra serviá para qualquer destino.
Um protocolo específico também pode ser indicado (`-p' or `--protocol'), como o TCP ou o UDP. Ao selecionar um protocolo, apenas pacotes do mesmo se encaixarão na regra. A principal razão para selecionar um protocolo, é que isso permite algumas opções extras. Especificamente as opções `--source-port' e `--destination-port' (abreviadas como `--sport' and `--dport').
Essas opções permitem especificar que apenas pacotes com certa porta de origem e destino se encaixarão na regra. Isso é útil para redirecionamento de requisições web (porta TCP 80 ou 8080).
Todas essas opções devem seguir a `-p' (a qual carrega uma biblioteca compartilhada para aquele protocolo). Podem ser usados os números das portas ou um nome do arquivo /etc/services.
Todas as outras formas de se selecionar um pacote estão descritas em detalhes
na página de manual do iptables
(man iptables
).