Comment comprendre pourquoi le paquet était considéré comme invalide par les iptables?

11

J'ai mis en place quelques iptablesrègles pour qu'il enregistre et supprime les paquets qui sont INVALIDES ( --state INVALID). En lisant les journaux, comment puis-je comprendre pourquoi le paquet a été considéré comme non valide? Par exemple, les éléments suivants:

Nov 29 22:59:13 htpc-router kernel: [6550193.790402] ::IPT::DROP:: IN=ppp0 OUT= MAC= SRC=31.13.72.7 DST=136.169.151.82 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=5104 DF PROTO=TCP SPT=80 DPT=61597 WINDOW=0 RES=0x00 ACK RST URGP=0
mbaitoff
la source

Réponses:

25

Les paquets peuvent être dans différents états lors de l'utilisation de l'inspection par paquets avec état.

  • Nouveau : le paquet ne fait partie d'aucun flux ou socket connu et les drapeaux TCP ont le bit SYN activé.
  • Établi : le paquet correspond à un flux ou une socket suivi par CONNTRACKet possède des drapeaux TCP. Une fois la prise de contact TCP initiale terminée, le bit SYN doit être désactivé pour qu'un paquet soit dans l'état établi.
  • En relation : Le paquet ne correspond à aucun flux ou socket connu, mais le paquet est attendu car il existe un socket existant qui le prédicte (des exemples en sont les données sur le port 20 lorsqu'il existe une session FTP existante sur le port 21 ou les données UDP pour une connexion SIP existante sur le port TCP 5060). Cela nécessite un ALG associé.
  • Invalide : si aucun des états précédents ne s'applique, le paquet est en état INVALID. Cela peut être dû à divers types de sondes réseau furtives, ou cela peut signifier que vous manquez d' CONNTRACKentrées (que vous devriez également voir indiqué dans vos journaux). Ou cela peut tout simplement être entièrement bénin.

Dans votre cas, le paquet que vous citez montre que les drapeaux TCP ACKet RST, et que le port source est 80. Cela signifie que le serveur Web de 31.13.72.7(qui se trouve être Facebook) vous a envoyé un paquet de réinitialisation. Il est tout à fait impossible de dire pourquoi sans voir les paquets qui l'ont précédé (le cas échéant). Mais il est très probable qu'il vous envoie une réinitialisation pour la même raison que votre ordinateur pense qu'il n'est pas valide.

bahamat
la source
Donc, il n'y a aucun moyen de demander à un noyau (ou à iptables) d'ajouter une sorte de "signature" à un paquet qui contiendrait la raison de son invalidité?
mbaitoff
2
Par définition, non. Invalide signifie qu'il ne correspond à aucun état connu. En d'autres termes, c'est le noyau qui dit "Je ne sais pas pourquoi j'ai reçu ce paquet".
bahamat
Pour déboguer des paquets INVALID spécifiques, les regarder dans Wireshark à partir d'un vidage peut fonctionner ... J'ai vu des paquets avec des champs SACK (en fait, les numéros de séquence normaux sont modifiés par le pare-feu et ceux de l'option SACK ne le sont pas, ce qui entraîne SACK valeurs invalides) qui a été cassé par un pare-feu abandonné comme invalide ...
Gert van den Berg