sexta-feira, 2 de novembro de 2012

Firewall IPTABLES - Tabela NAT e MASQUERADE - 3º Parte




Network Address Translator - NAT (tabela nat)

Existem vários recursos que utilizam NAT. Os mais conhecidos são:

--> Mascaramento (masquerading)
--> Redirecionamento de portas (port forwarding ou PAT)
--> Redirecionamento de servidores (forwarding)
--> Proxy transparente (transparent proxy)
--> Balanceamento de carga (load balance)


A TABELA NAT






O NAT é dividido em:

--> SNAT: aplica-se quando desejamos alterar o endereço de origem do pacote. Somente a chain POSTROUTING faz SNAT. O mascaramento é um exemplo de SNAT.

--> DNAT: aplica-se quando desejamos alterar o endereço de destino do pacote. As chains PREROUTING e OUTPUT fazem DNAT. O redirecionamento de porta, o redirecionamento de servidor, o load balance e o proxy transparente são exemplos de DNAT.


Regras de NAT

Para fazer o mascaramento, deveremos, antes, carregar o módulo de NAT:

#modprobe iptable_nat


Chains

Existem as seguintes chains (cadeias).

--> PREROUTING: utilizada para analisar pacotes que estão entrando no kernel para sofrerem NAT. O PREROUTING pode fazer ações de NAT com o endereço de destino do pacote. Isso é conhecido como DNAT (Destination NAT);

--> POSTROUTING: utilizada para analisar pacotes que estão saindo do kernel, após sofrerem NAT. O POSTROUTING pode fazer ações de NAT com o endereço de origem do pacote. Isso é conhecido como SNAT (Source NAT);

--> OUTPUT: utilizada para analisar pacotes que são gerados na própria máquina e que irão sofrer NAT. O OUTPUT pode fazer ações de NAT com o endereço de destino do pacote. Também é DNAT.

Opções
-A --> Append (adicionar, anexar).
-D --> Deletar.

Dados

-t --> Table (tabela). Estabelece a tabela a ser utilizada. A tabela default, por omissão, é filter.

Para o mascaramento ou NAT será nat. Exemplo:

#iptables -t nat -A ...

--to --> utilizado para definir IP e porta de destino, após um DNAT, ou de origem, após um SNAT. Deve ser utilizado após uma ação (-j ação). Assim:

-j DNAT --to 10.0.0.2
-j DNAT --to 10.0.0.2:80
-j SNAT --to 172.20.0.2

--dport --> assim como -d define um host de destino, --dport define uma porta de destino. Deve ser utilizado antes de uma ação (-j ação). Antes de --dport, deve ser especificado um protocolo (-p). Exemplo:
-d 172.20.0.1 -p tcp --dport 80 -j DNAT --to 10.0.0.2

--sport --> assim como -s define um host de origem, --sport define uma porta de origem. Deve ser utilizado antes de uma ação (-j ação).

--to-port --> define uma porta de destino, após um REDIRECT.

Obs: A maioria dos dados básicos apresentados para a tabela filter continuam valendo. 

Exemplo: -p servirá para definir um protocolo de rede; -d define um host de destino.


Realizando alguns testes, para começarmos entender melhor como funciona a tabela NAT.

Estudo de caso: 

Aqui em casa, criei a seguinte rede para estudo.
Uma máquina com Debian instalado, duas interfaces de rede (eth0, eth1).
Uma outra máquina também rodando o Debian, com serviço de WEB (apache2) instalado.
E uma terceira máquina com Windows XP.

O Servidor Firewall está com IP 192.168.0.10 na interface eth0, e a eth1 com IP da rede classe A, 10.0.0.0/24, que está conectada a rede interna, o Ip da placa eth1 é o 10.0.0.1/8.
O Servidor WEB que está na rede interna, está com o seguinte endereço IP: 10.0.0.10/8 e gateway, 10.0.0.1

A máquina com Windows XP, está com Ip da rede classe C, IP: 192.168.0.20/24, Gateway 192.168.0.10 (ip do servidor gateway)

O firewall está somente com a regra de roteamento ativa.

# echo 1 > /proc/sys/net/ipv4/ip_forward

Vamos agora dar um ping da máquina XP, no IP do servidor WEB, IP: 10.0.0.10, e vamos criar uma regra no Firewall para começar a monitor o ping dado no Servidor WEB.



No Servidor WEB você vai criar a seguinte regra:

iptables -t filter -A INPUT -p icmp -j LOG --log-prefix "LOG-PING-WEB: " -> com essa regra vamos pegar todos os pacotes de ping (icmp) com destino ao servidor WEB, a própria máquina.

Com o seguinte comando, podemos acompanhar o log, real:
tail -f /var/log/messages

Como podemos acompanhar no log do servidor WEB, o IP de origem do ping é a máquina 192.168.0.20 e o destino é a própria máquina.

Realizando o comando tracert 10.0.0.10 na máquina Windows, podemos ver, que para chegar até a máquina WEB, primeiro passa pelo servidor Gateway 192.168.0.10, depois vai para a máquina WEB.

LEMBRANDO: o servidor gateway, precisa estar com a rera de forward habilitado: echo 1 > /proc/sys/net/ipv4/ip_forward 
Para que as duas redes 192.168.1.0/24 e 192.168.2.0/24 conversem.

Agora vamos fazer uma regra para que o servidor gateway responda diretamente para o servidor WEB, quando for realizado Ping de uma máquina externa para a sua rede interna.

No servidor Gateway escreva a seguinte regra:

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

A regra está dizendo que todo trafego direcionado a tabela nat, na cadeia POSTROUTING, na placa de rede eth1 (Interface de rede Interna) será mascarado (MASQUERADE). 

Volte agora dar um Ping da máquina Xp, no Servidor WEB, e pode verificar no LOG do Servidor WEB, que a máquina de origem agora é o Servidor GATEWAY,  e não mais a máquina XP.

Por enquanto é isso, espero que possa ser de ajuda à alguém, que procura entender o Iptables.


Nenhum comentário:

Postar um comentário