Como as tabelas e cadeias do iptables são percorridas

22

Eu sei que o linux tem 3 tabelas internas e cada uma delas tem suas próprias cadeias, como segue:

FILTRO : PREROUTING, FORWARD, POSTROUTING

NAT : PREROUTING, INPUT, OUTPUT, POSTROUTING

MANGLE : PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

Mas não consigo entender como eles são percorridos, em que ordem, se houver. Por exemplo, como eles são percorridos quando:

  1. Envio um pacote para um PC na minha mesma rede local
  2. quando envio um pacote para um PC em uma rede diferente
  3. quando um gateway recebe um pacote e precisa encaminhar
  4. quando recebo um pacote destinado a mim
  5. qualquer outro caso (se houver)
zer0uno
fonte

Respostas:

28

A Wikipedia possui um ótimo diagrama para mostrar a ordem de processamento.

Para mais detalhes, você também pode consultar a documentação do iptables, especificamente o capítulo sobre o deslocamento de tabelas e cadeias . O que também inclui um diagrama de fluxo .

A ordem muda dependendo de como o netfilter está sendo usado (como uma ponte ou filtro de rede e se ele tem interação com a camada do aplicativo).

Geralmente (embora haja mais demônios nos detalhes no capítulo vinculado acima), as cadeias são processadas como:

  • Veja a cadeia INPUT como "tráfego de entrada de fora para este host".
  • Veja a cadeia FORWARD como "tráfego que usa esse host como roteador" (a origem e o destino não são esse host).
  • veja a cadeia OUTPUT como "tráfego que este host deseja enviar".
  • PREROUTING / POSTROUTING tem usos diferentes para cada um dos tipos de tabela (por exemplo, para as tabelas nat, PREROUTING é para tráfego SNAT de entrada (roteado / encaminhado) e POSTROUTING é para tráfego DNAT de saída (roteado / encaminhado). especificidades.

As várias tabelas são:

  • Mangle é mudar pacotes (tipo de serviço, tempo de vida, etc) na travessia.
  • Nat é colocar em regras NAT.
  • O Raw deve ser usado para marcação e rastreamento de conexão.
  • O filtro é para filtrar pacotes.

Então, para seus cinco cenários:

  1. Se o host de envio o host com iptables, OUTPUT
  2. O mesmo que acima
  3. A cadeia FORWARD (desde que o gateway seja o host com iptables)
  4. Se "eu" for o host com iptables, INPUT
  5. Observe as regras da cadeia acima (que é a regra geral) e o diagrama de fluxo (e isso também varia de acordo com o que você está tentando alcançar com o IPTables)
Drav Sloan
fonte
Também recentemente deparei com esse link - stuffphilwrites.com/2014/09/iptables-processing-flowchart . Há um bom fluxograma por Phil Hagen.
slm
1
Outro bom recurso - digitalocean.com/community/tutorials/… .
Slm