Página seguinte Página anterior Índice

5. Controlando Para O Quê Fazer NAT

Você precisa criar regras NAT que digam ao kernel quais conexões devem ser alteradas, e como alterar as mesmas. Para isto, usamo a super-versátil ferramenta iptables, e dizemos à mesma para alterar a tabela NAT especificando a opção `-t nat'.

A tabela de regras NAT contém duas listas chamadas `cadeias': cada regra é examinada em ordem até que ocorra uma correspondência. As duas cadeias são chamadas PREROUTING (para Destination NAT, quando os pacotes chegam), e POSTROUTING (para Source NAT, quando os pacotes saem).

O seguinte diagrama iria ilustrar bem se eu tivesse algum talento artístico:

      _____                                     _____
     /     \                                   /     \
   PREROUTING -->[Routing ]----------------->POSTROUTING----->
     \D-NAT/     [Decision]                    \S-NAT/
                     |                            ^
                     |                            |  
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     |                            |
                     --------> Local Process ------

Em cada um dos pontos acima, quando um pacote passa, nós descobrimos a qual conexão ele está associado. Se é uma nova conexão, procuramos pela acdeia correspondente na tabela NAT para ver o quê fazer com ele. A resposta que for dada será aplicada a todos os futuros pacotes naquela conexão.

5.1 Seleção Simples usando iptables

O iptables pede um certo número de opções padrão conforme listado abaixo. Todas as opções de dois-traços podem ser abreviadas, desde qeu o iptables consiga distinguir as opções possíveis. Se seu kernel tem o suporte a iptables como módulo, você precisará carregar o módulo ip_tables.o primeiro: `insmod ip_tables'.

A opção mais importante aqui é a opção que seleciona a tabela, `-t'. Para todas operações NAT, você vai querer usar `-t nat' para a tabela NAT. A segunda opção mais importante a ser usada é o `-A' para anexar uma nova regra no fim da cadeia (por exemplo, `-A POSTROUTING'), ou `-I' para inserir uma no inídio (por exemplo, `-I PREROUTING').

Você pode especificar a origem (`-s' ou `--source') e o destino (`-d' ou `--destination') dos pacotes que você quer fazer NAT. Estas opções podem ser seguidas por um único endereço IP (por exemplo, 192.168.1.1), um nome (por exemplo, www.gnumonks.org), ou um endereço de rede (por exemplo, 192,168.1.0/24 ou 192.168.1.0/255.255.255.0).

Você pode especificar a interface de entrada (`-i' ou `--in-interface') ou de saída (`-o' ou `--out-interface') para fazer a seleção, mas isto depende também de qual cadeia você está inserindo a regra: na cadeia PREROUTING, você somente pode selecionar a interface de entrada, e na cadeia POSTROUTING você só pode selecionar a interface de saída. Se você especificar a interface errada, o iptables vai retornar um erro.

5.2 Pontos Ótimos para Selecionar Quais Pacotes Alterar

Foi dito acima que você pode especificar um endereço de origem e destino. Se você quer omitir a opção do endereço de origem, então qualquer endereço de fonte irá servir. Se você omitir a opção de endereço de destino, então qualquer endereço de destino vai servir.

Você pode também indicar um protocolo específico ( `-p' ou `--protocol'), como TCP ou UDP, somente pacotes daquele protocolo serão selecionados pela regra. A razão principal para fazer isto é que ao especificar o protocolo tcp ou udp então existem outras opções que fiacm disponíveis: especificametne as opções `--source-port' e `--destination-port' (abreviadas como `--sport' e `--dport').

Estas opções permitem a você especificar qeu somente pacotes com uma certa porta de origem e destino serão selecionados pela regra. Ísto é bastante útil para redirecionar solicitações web (porta TCP 80 ou 8080) e deixando as outras portas de lado.

Estas opções devem seguir a opção `-p' (que tem o efeito de carregar a biblioteca compartilhada da extensão para aquele protocolo). Você pode usar números de portas, ou um nome do arquivo /etc/services.

Todas as diferentes qualidades que você pode selecionar em um pacote estão detalhadas em dolorosos detalhes na página manual (man iptables).


Página seguinte Página anterior Índice 1