Estrutura do IPTables 2: a tabela nat

Quais os poderes da tabela nat existente no iptables? E as listas PREROUTING, POSTROUTING, para que servem?

[ Hits: 248.977 ]

Por: Elgio Schlemer em 20/07/2007 | Blog: https://profelgio.duckdns.org/~elgio


Lista nat PREROUTING



Nesta lista irão as regras que serão aplicadas no gancho PREROUTING, ou seja, para pacotes que acabaram de entrar por uma das interfaces de rede, não importando qual será o destino dos mesmos, se para um processo local ou para ser roteado (forward).

Deve-se ter em mente que a etapa de roteamento é quem decidirá qual o caminho que o pacote irá tomar, inclusive decidindo se o mesmo será repassado ou entregue a um processo local. Para realizar o roteamento são considerados parâmetros de destino, como o IP, para saber se é desta máquina ou se deve ser repassado, e porta, se for local para decidir para qual processo.

Este entendimento é muito importante, pois a conclusão é óbvia:
  • Se um pacote precisa ter algum parâmetro de DESTINO modificado, deve ser feito ANTES da etapa de roteamento.

Não tem sentido alterar parâmetros de destino após o mesmo ser roteado, pois o roteamento é em função do destino!

Assim sendo, é fácil entender porque na lista PREROUTING é permitido alterar apenas os campos de destino, seja número IP ou porta. A ação que realiza isto é chamada de DNAT (Destination NAT, sendo que NAT significa Network Address Translate).

Exemplo:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to :80

Os parâmetros do DNAT são "novoIpDestino:novaPortaDestino". No exemplo anterior, pela omissão do novo IP de destino, mantem-se o mesmo, porém reescrevendo no pacote a porta de destino para a 80. Na prática o que se fez é trocar a porta de destino para 80 em todos os pacotes TCP que tinham como porta destino a 8080.

Analisando a posição do gancho PREROUTING percebe-se que esta regra valerá para todo e qualquer pacote que chegar por uma de suas interfaces, não importando para onde ele seguiria, se local ou forward. Opcionalmente pode-se refinar a regra, sendo bem mais específico:

iptables -t nat -A PREROUTING -i eth0 -p tcp -s 10.1.5.4 -d 172.16.0.2 --dport 8080 -j DNAT --to 172.16.0.1:80

Neste exemplo se um pacote estiver entrando pela interface eth0 (e no gancho PREROUTING só é permitido -i, pois -o não se aplica), se for tcp vindo do ip 10.1.5.4, destinado ao ip 172.16.0.2 para a porta 8080, o ip de destino será trocado para 172.16.0.1 e a porta de destino para 80 (sendo politicamente correto, deveria se usar --to-destination no DNAT e --to-source no SNAT, porém usar apenas --to serve para ambos!).

Como o IP de destino pode ser trocado para qualquer um, inclusive para o IP local, um pacote que originalmente seria repassado (FORWARD) pode ter o ip destino trocado para o IP local e ser enviado para processos locais. Isto é possível somente porque estas regras são aplicadas ANTES da etapa de roteamento (figura 1).

Além da ação DNAT, a lista PREROUTING da tabela nat ainda aceita as ações (-j) LOG e DROP (REJECT não é aceito). Mesmo que, via de regra, pacotes deveriam ser dropados na filter, em algumas situações pode ser desejável poder bloquear antes da etapa de roteamento.

Existe ainda a ação REDIRECT, que nada mais é do que redirecionar o pacote para uma porta específica da máquina onde está o firewall, ou seja, um REDIRECT sempre vai trocar o IP de destino para o IP do firewall, sendo que o efeito seria quase o mesmo que um -j DNAT IPDOFIREWALL:porta, com a diferença que não é necessário conhecer o ip do firewall ao construir a regra.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução: ganchos do netfilter
   2. Lista nat PREROUTING
   3. Lista nat POSTROUTING
   4. Lista nat OUTPUT
   5. Exemplo: proxy transparente
   6. Conclusão
   7. Leituras recomendadas
Outros artigos deste autor

Iptables protege contra SYN FLOOD?

Introdução a criptografia

Parâmetros interessantes do scanf e do printf em C

Criptografia chave simétrica de bloco e de fluxo

Túneis cifrados com SSH

Leitura recomendada

Endian Firewall - Solução completa para um servidor de internet

Balanceamento de link + redundância

Gerenciando regras de Iptables com Firewall Builder (parte 2)

Incrementando seu Firewall com o Layer 7 Filter

Criando um firewall simples e compartilhando a conexão usando o IPtables

  
Comentários
[1] Comentário enviado por edirlf em 20/07/2007 - 02:58h

Cara, que massa seu artigo. Muito bom mesmo, Parabéns.
Já tá nos favoritos.

[2] Comentário enviado por adrianoturbo em 20/07/2007 - 08:41h

Show de bola a descrição de tabelas do Iptables bem explicada.

Parabéns amigo.

[3] Comentário enviado por balani em 20/07/2007 - 11:46h

muito bom, são informações muito importantes a serem relevadas antes de confeccionar um script. Parabens.

[4] Comentário enviado por marcelows em 24/07/2007 - 00:50h

Artigo muito bem escrito... Valeu Prof...

Uma dúvida existe uma forma de testar uma regra antes de realmente efetiva-la? Algo do tipo se estiver roteando um pacote a um outro servidor e este nao responder eu pulo para uma outra regra...

Obs.: Desculpe-me se a pergunta for meio tola.... Fui aluno seu na minha graduacao em ciencias da computador.

Desde ja agradeco... E parabens pelo artigo...

[5] Comentário enviado por peace em 24/07/2007 - 16:44h

Li seus dois artigos sobre iptables e realmente devo lhe dar os parabéns.
Muito bem escrito e vai nos pontos que realmente importam para começar a entender sobre iptables e construir firewalls (que não é uma tarefa das mais fáceis).
Explicar o conceito é muito mais importante do que apenas listar os comandos, e você fez isto aqui muito bem.
Estou entendendo e me familiarizando muito mais com iptables e suas tabelas, que até pouco tempo faziam alguma confusão na minha cabeça.

Mais uma vez, parabéns pelo excelente artigo.

Um abraço,

Tiago

[6] Comentário enviado por Bique em 25/07/2007 - 06:37h

Parabens pelo artigo, afinal por vezes implementamos e não conhecemos algumas funcionalidades básicas.

Um abraço

[7] Comentário enviado por capitainkurn em 29/07/2007 - 13:08h

Ótimo artigo, muito didático... Eu mesmo que não sou novo toda hora erro meus scripts por trocar o PRE por POST e vice-versa. Tendo que sempre consultar o pai-dos-burros (Guia foca cap. 10 módulo avançado), não sou bom em memorizar coisas repetitivas.

[8] Comentário enviado por removido em 30/07/2007 - 18:22h

Parabéns pelo artigo ! :-)

[9] Comentário enviado por kabalido em 04/12/2007 - 19:00h

Sensacional cara. Parabéns!!! Com certeza um dos melhores artigos que já li aqui no VOL.
Esse artigo me tirou muitas dúvidas sobre iptables.
Parabéns mais uma vez.

[10] Comentário enviado por irado em 01/09/2008 - 16:24h

wowwww... só na primeira olhada que dei na figura de estrutura eu compreendi COMO se processa a filtragem de pacotes, que pega quem... caramba, parabéns pra vc é pouco, que tal uma cerva geladinha? eu pago, não se preocupe, afinal tô convidando é pq me fez um grande bem os seus dois artigos (nem vou falar naquêle de mascara de rede - tão simples que ATÉ EU consegui entender - risos).

parabéns grandão, garoto :) quando crescer vou querer saber tanto quanto vc.

[11] Comentário enviado por rogerio_gentil em 10/03/2009 - 11:16h

Parabéns Elgio. Este artigo está sensacional. Gostei muito do primeiro artigo (1ª parte) sobre a tabela filter. Porém, este sobre a tabela nat é o que eu estava buscando para compreênde-la. Gostaria de enfatizar à você e a todos os contribuidores de artigos a importância de descrever as refências. Nada vem da cabeça! Tudo tem um ponto de partida ... e o meu começou aqui!
Abraços.

[12] Comentário enviado por fernandofranco em 05/11/2009 - 16:25h

Amigo como faço pra proteger essa regra contra ataques. Estou recebendo um mote de virus quando faço esse direcionamento.

Por favor, preciso de ajuda.......

##########################
## TABELA NAT ##
##########################
### DIRECIONAMENTO SQL 1433 ##
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 1433 -j DNAT --to 192.168.0.101
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 1433 -j DNAT --to 192.168.0.101

[13] Comentário enviado por schenkmh em 15/10/2010 - 10:23h

Olá Elgio

Em primeiro lugar parabéns pelos artigos. Li alguns e estão me ajudando muito a ter uma compreensão melhor sobre firewall e iptables. Gostaria de me aprofundar mais sobre as tabelas filter, nat e mangle. Principalmente sobre a tabela mangle que me parece um assunto mais avançado no que diz respeito aos recursos do iptables.
Não encontrei nenhum material que explique a fundo esta tabela, teria alguma dica? Como posso entender melhor suas funções?

Agradeço a atenção, abraço

Marco



[14] Comentário enviado por wagneralves em 08/05/2012 - 12:58h

Parabéns pelo artigo!

[15] Comentário enviado por ntnbrito em 13/05/2013 - 10:36h

Muito bom! Parabéns cara.


ntnbrito
http://www.cursodelinux.org

[16] Comentário enviado por gargamel em 21/05/2013 - 10:35h

http:/ /www.gilix.com.br/rafael_cambui/tag/configuracao-de-um-firewall-com-iptables/

[17] Comentário enviado por elgio em 05/11/2013 - 21:46h

Estranhamente a tabela nat passou a atuar no gancho INPUT a partir do kernel 2.6.36.
Ainda não consegui entender qual a necessidade disto. Se alguém souber, fico grato.

[18] Comentário enviado por elgio em 05/11/2013 - 21:47h


[16] Comentário enviado por gargamel em 21/05/2013 - 10:35h:

http:/ /www.gilix.com.br/rafael_cambui/tag/configuracao-de-um-firewall-com-iptables/


O item "Proteção contra Syn Flood" deve ser sumariamente REMOVIDO deste artigo. É um "atentado" ( # iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT)

Referência: http://www.vivaolinux.com.br/artigo/Iptables-protege-contra-SYN-FLOOD

[19] Comentário enviado por donr em 06/05/2015 - 12:06h


Excelente artigo


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts