Página seguinte Página anterior Índice

5. Controlando o que será submetido a NAT

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.

5.1 Seleção simples utilizando iptables

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.

5.2 Pontos mais específicos sobre o tratamento dos pacotes

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).


Página seguinte Página anterior Índice