7.4. Regras FORWARD e NAT

A maioria das empresas designam um número limitado de endereços IP publicamente roteáveis de seus ISPs. Devido essa permissão limitada, os administradores devem encontrar maneiras criativas de compartilhar o acesso aos serviços de Internet sem dar endereços IP limitados para cada nódulo da LAN. Usar um endereço IP privado é a maneira comum de permitir que todos os nódulos de uma LAN acessem apropriadamente serviços de rede internos e externos. Roteadores de borda (como firewalls) podem receber transmissões de entrada da Internet e rotear os pacotes para o nódulo pretendido na LAN. Ao mesmo tempo, o firewall/portas de comunicação (gateways) também podem rotear pedidos de saída de um nódulo da LAN para o serviço remoto da Internet. Esse encaminhamento de tráfego de rede pode se tornar perigoso às vezes, especialmente com a disponibilidade de ferramentas de cracking modernas que podem espionar endereços IP internos e fazer com que a máquina remota do atacante atue como um nódulo em sua LAN. Para evitar isso, o iptables oferece normas de roteamento e encaminhamento que podem ser implementadas para evitar o uso indevido dos recursos de rede.

A norma FORWARD permite a um administrador controlar onde os pacotes podem ser roteados em uma LAN. Por exemplo: para permitir o encaminhamento para a LAN inteira (assumindo que o firewall/porta de comunicação tenha um endereço IP interno na eth 1), as seguintes regras podem ser definidas:

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

Essa regra da acesso para a rede interna aos sistemas por trás do firewall/porta de comunicação. A porta de comuncação roteia os pacotes de um nódulo da LAN para o seu nódulo pretendido, passando todos os pacotes através de seu dispositivo eth1.

NotaNota
 

Por default, a norma IPV4 nos kernels do Red Hat Enterprise Linux desabilita o suporte para encaminhamento do IP, o que evita que caixas rodando o Red Hat Enterprise Linux funcionem como roteadores de borda dedicados. Para habilitar o encaminhamento do IP, execute o seguinte comando:

sysctl -w net.ipv4.ip_forward=1

Se este comando for submetido em uma janela shell, a configuração não é lembrada após uma reinicialização da máquina. Você pode definir o encaminhamento permanentemente, editando o arquivo /etc/sysctl.conf. Encontre e edite a linha a seguir, substituindo 0 por 1:

net.ipv4.ip_forward = 0

Execute o seguinte comando para ativar a alteração do arquivo sysctl.conf:

sysctl -p /etc/sysctl.conf

Aceitar pacotes encaminhados através do dispositivo IP interno do firewall permite que os nódulos da LAN comuniquem-se entre si; mas não permite que comuniquem-se externamente com a Internet. Para permitir que nódulos da LAN com endereços IP privados comuniquem-se com redes públicas externas, configure o firewall com o mascaramento do IP, que mascara pedidos de nódulos da LAN com endereços IP do dispositivo externo do firewall (neste caso, eth0):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

A regra usa a tabela de pacotes coincidentes da NAT (-t nat) e especifica a corrente POSTROUTING embutida para a NAT (-A POSTROUTING) no dispositivo de rede externa do firewall (-o eth0). O POSTROUTING (pós-roteamento) permite que os pacotes sejam alterados conforme deixam o dispositivo externo do firewall. O alvo -j MASQUERADE é especificado para mascarar o endereço IP privado de um nódulo com o endereço IP externo do firewall/porta de comunicação.

Se você tem um servidor em sua rede interna que deseja disponibilizar externamente, pode usar o alvo -j DNAT da corrente PREROUTING na NAT para especificar um endereço IP e porta de destino para onde encaminhar os pacotes de entrada requisitando uma conexão. Por exemplo: se você deseja encaminhar os pedidos HTTP de entrada para seu servidor Servidor HTTP Apache dedicado para 172.31.0.23, submeta o seguinte comando:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
      --to 172.31.0.23:80

Esta regra especifica que a tabela NAT usa a corrente PREROUTING embutida para encaminhar pacotes HTTP de entrada exclusivamente para o endereço IP 172.31.0.23 listado.

NotaNota
 

Se você tem uma norma default DROP na sua corrente FORWARD, deve adicionar uma regra para permitir o encaminhamento de pedidos HTTP de entrada para possibilitar o roteamento do destino da NAT. Para fazer isso, submeta o seguinte comando:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT

Esta regra permite o encaminhamento de pedidos de entrada HTTP do firewall para seu destino pretendido no Servidor HTTP Apache por trás do firewall.

7.4.1. DMZs e iptables

As regras do iptables também podem definidas para rotear tráfego para determinadas máquinas, como um servidor dedicado HTTP ou FTP, numa zona desmilitarizada (DMZ) — uma sub-rede local especial dedicada a prover serviços num meio público como a Internet. Por exemplo: para definir uma regra para rotear os pedidos HTTP externos para um servidor HTTP dedicado no endereço IP 10.0.4.2 (fora do intervalo 192.168.1.0/24 da LAN), a tradução de endereço de rede (NAT) evoca uma tabela PREROUTING para encaminhar os pacotes ao destino apropriado:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	    --to-destination 10.0.4.2:80

Com este comando, todas as conexões HTTP para a porta 80 de fora da LAN são roteadas ao servidor HTTP em uma rede separada do resto da rede interna. Esta forma de segmentação de rede pode ser mais segura que permitir conexões HTTP para uma máquina na rede. Se o servidor HTTP estiver configurado para aceitar conexões seguras, então a porta 443 deve ser encaminhada também.