Come vengono attraversate le tabelle e le catene iptables


22

So che Linux ha 3 tabelle integrate e ognuna di esse ha le sue catene come segue:

FILTRO : PREROUTING, FORWARD, POSTROUTING

NAT : PREROUTING, INPUT, OUTPUT, POSTROUTING

MANGLE : PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

Ma non riesco a capire come vengono attraversati, in quale ordine, se esiste. Ad esempio, come vengono attraversati quando:

  1. Mando un pacchetto a un PC nella mia stessa rete locale
  2. quando invio un pacchetto a un PC in una rete diversa
  3. quando un gateway riceve un pacchetto e deve inoltrarlo
  4. quando ricevo un pacchetto a me destinato
  5. qualsiasi altro caso (se presente)

Risposte:


28

Wikipedia ha un grande diagramma per mostrare l'ordine di elaborazione.

Per maggiori dettagli puoi anche consultare la documentazione di iptables, in particolare il capitolo relativo al passaggio di tabelle e catene . Che include anche un diagramma di flusso .

L'ordine cambia in base al modo in cui viene utilizzato netfilter (come bridge o filtro di rete e se ha interazione con il livello applicazione).

Generalmente (sebbene ci siano più diavoli nei dettagli nel capitolo linkato sopra) le catene vengono elaborate come:

  • Vedi la catena INPUT come "traffico in entrata dall'esterno a questo host".
  • Vedere la catena FORWARD come "traffico che utilizza questo host come router" (l'origine e la destinazione non sono questo host).
  • vedere la catena OUTPUT come "traffico che questo host vuole inviare".
  • PREROUTING / POSTROUTING ha usi diversi per ciascuno dei tipi di tabella (ad esempio per le tabelle nat, PREROUTING è per il traffico SNAT in entrata (instradato / inoltrato) e POSTROUTING è per il traffico DNAT in uscita (instradato / inoltrato). specifiche.

I vari tavoli sono:

  • Mangle deve cambiare i pacchetti (Tipo di servizio, Tempo di vita ecc.) Su traversal.
  • Nat deve inserire le regole NAT.
  • Raw deve essere utilizzato per contrassegnare e tracciare le connessioni.
  • Il filtro serve per filtrare i pacchetti.

Quindi per i tuoi cinque scenari:

  1. Se l'invio ospita l'host con iptables, OUTPUT
  2. Come sopra
  3. La catena FORWARD (a condizione che il gateway sia l'host con iptables)
  4. Se "me" è l'host con iptables, INPUT
  5. Guarda le regole della catena sopra (che è la regola generale) e il diagramma di flusso (e questo varia anche su ciò che stai cercando di ottenere con IPTables)

Di recente ho anche trovato questo link - stuffphilwrites.com/2014/09/iptables-processing-flowchart . C'è un bel diagramma di flusso lì di Phil Hagen.
slm

1
Un'altra buona risorsa: digitalocean.com/community/tutorials/… .
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.