Comment les tables et chaînes iptables sont traversées

22

Je sais que Linux a 3 tables intégrées et chacune d'elles a ses propres chaînes comme suit:

FILTRE : PRÉREGLEMENT, AVANT, POSTROUTE

NAT : PRÉ-OUVERTURE, ENTRÉE, SORTIE, POSTROUTING

MANGLE : PRÉROUGEMENT, ENTRÉE, AVANT, SORTIE, POSTROUTE

Mais je ne peux pas comprendre comment ils sont traversés, dans quel ordre, s'il y en a. Par exemple, comment sont-ils traversés lorsque:

  1. J'envoie un paquet à un PC dans mon même réseau local
  2. quand j'envoie un paquet à un PC dans un réseau différent
  3. lorsqu'une passerelle reçoit un paquet et doit le transmettre
  4. quand je reçois un paquet qui m'est destiné
  5. tout autre cas (le cas échéant)
zer0uno
la source

Réponses:

28

Wikipedia a un grand diagramme pour montrer l'ordre de traitement.

Pour plus de détails, vous pouvez également consulter la documentation iptables, en particulier le chapitre traversant les tables et les chaînes . Qui comprend également un organigramme .

L'ordre change en fonction de la façon dont netfilter est utilisé (comme pont ou filtre réseau et s'il a une interaction avec la couche d'application).

Généralement (bien qu'il y ait plus de diable dans les détails du chapitre lié ci-dessus), les chaînes sont traitées comme:

  • Voir la chaîne INPUT comme "trafic entrant de l'extérieur vers cet hôte".
  • Voir la chaîne FORWARD comme "trafic qui utilise cet hôte comme routeur" (la source et la destination ne sont pas cet hôte).
  • voir la chaîne OUTPUT comme "le trafic que cet hôte veut envoyer".
  • PREROUTING / POSTROUTING a des utilisations différentes pour chacun des types de table (par exemple pour les tables nat, PREROUTING est pour le trafic SNAT entrant (routé / transféré) et POSTROUTING est pour le trafic DNAT sortant (routé / transféré). Consultez les documents pour en savoir plus détails.

Les différents tableaux sont:

  • Mangle consiste à changer les paquets (type de service, durée de vie, etc.) lors de la traversée.
  • Nat doit mettre des règles NAT.
  • Raw doit être utilisé pour le marquage et le suivi des connexions.
  • Le filtre sert à filtrer les paquets.

Donc, pour vos cinq scénarios:

  1. Si l'hôte d'envoi votre hôte avec iptables, OUTPUT
  2. Comme ci-dessus
  3. La chaîne FORWARD (à condition que la passerelle soit l'hôte avec iptables)
  4. Si "moi" est l'hôte avec iptables, INPUT
  5. Regardez les règles de chaîne ci-dessus (qui est la règle générale) et le diagramme de flux (et cela varie également en fonction de ce que vous essayez de réaliser avec IPTables)
Drav Sloan
la source
J'ai également récemment rencontré ce lien - stuffphilwrites.com/2014/09/iptables-processing-flowchart . Il y a un bel organigramme là-bas par Phil Hagen.
slm
1
Une autre bonne ressource - digitalocean.com/community/tutorials/… .
slm