web-dev-qa-db-fra.com

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

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

FILTRE : AVANT, AVANT, POSTROUTER

NAT : PRÉROUDAGE, ENTRÉE, SORTIE, POSTROUTING

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

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 autre réseau
  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)
23
zer0uno

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 sur les tables et les chaînes . Qui comprend également un organigramme .

L'ordre change en fonction de la façon dont netfilter est utilisé (en tant que pont ou filtre de 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".
  • Voyez la chaîne FORWARD comme "le 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 NAT règles.
  • 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 la chaîne ci-dessus (qui est la règle générale) et le diagramme de flux (et cela varie également selon ce que vous essayez d'atteindre avec IPTables)
31
Drav Sloan