Löschen Sie IP-Fragmente eines bestimmten Protokolls

1178
Lorenzo Pistone

Wenn diese conntrackOption aktiviert ist, sieht der iptables-Stack niemals ein fragmentiertes IP-Paket, nur das neu zusammengesetzte ( Quelle ), sodass der -fTest niemals übereinstimmt.

Wenn ich jedes Fragment blockieren will ich setzen könnte ipfrag_high_threshoder ipfrag_timeauf 0 ( Quelle ), aber das würde jede Art von Fragmente fallen. Kann ich irgendetwas tun, wenn ich Fragmente eines bestimmten IP-Protokolls löschen möchte?

2

2 Antworten auf die Frage

2
Matyas Koszik

Ich sehe zwei Möglichkeiten, um Ihr Ziel zu erreichen, abhängig von Ihren Bedürfnissen.

Sie können die erneute Assemblierung ausführen lassen und nach erfolgreicher Remontage das gesamte Paket verwerfen. Dies funktioniert nur, wenn sich das neu zusammengesetzte Paket über der Schnittstellen-MTU befindet (andernfalls können Sie nicht zwischen wieder zusammengesetzten und „normalen“ Paketen unterscheiden). Wenn die Pakete nicht erfolgreich neu zusammengestellt werden können, werden sie trotzdem verworfen, jedoch mit einem größeren CPU-Aufwand.

Die andere Möglichkeit ist, die Quelle zu ändern und nf_defrag_ipv4Pakete aus dem Protokoll bzw. den Protokollen, die Sie direkt behandeln möchten, zu ignorieren. Ein kurzer Blick weist darauf hin, dass dies funktionieren sollte, da IP_NODEFRAGfür RAW-Sockets bereits eine Option ( ) verfügbar ist, mit der Sie den Code für die erneute Assemblierung umgehen können.

Um ehrlich zu sein, würde ich auch gerne mehr Kontrolle über diesen Teil der Filterung haben, also versuche ich einen Patch zu bekommen, um die Situation zu verbessern.

Ich denke, Sie sollten sich die `tc`-Eingangsfilterung ansehen. Sie können Dinge tun, bevor Pakete die Netfilter-Hooks treffen. Lorenzo Pistone vor 9 Jahren 1
Dies ist ein interessanter Ansatz, aber ich kann meinen Regelsatz nicht auf tc portieren, um die obligatorische Defragmentierung zu vermeiden - schließlich ist die zustandsbehaftete Filterung ein Kernbestandteil meines Setups. Ich benutze auch andere netfilter-Funktionen, um die Pakete weiter zu klassifizieren, die in tc nicht verfügbar sind. BTW, hast du dein ursprüngliches Problem gelöst? Hast du dafür tc benutzt? Matyas Koszik vor 9 Jahren 1
Ich habe tatsächlich 'tc' benutzt. Es gibt auch minimale Leistungsverbesserungen beim frühen Filtern in `tc ', siehe http://meat.pisto.horse/2014/10/iptables-microbenchmark-tc-performance.html Lorenzo Pistone vor 9 Jahren 0
Wenn Sie Pakete, die auf einer einfachen Klassifizierung basieren, bei extrem hohen Geschwindigkeiten einfach ablegen wollen, sollten Sie sich `netmap 'anschauen - sie kann eine 10-Gbit-Schnittstelle mit Paketen minimaler Größe problemlos auf einem einzigen Kern eines modernen PCs verarbeiten. Matyas Koszik vor 9 Jahren 1
1
Steven K

Ich frage mich, ob Sie die netfilter "raw" -Tabelle verwenden können, die vor den meisten Verbindungsverfolgungshaken steht. Es gibt ein "NOTRACK" -Ziel, mit dem Sie bestimmte Pakete von conntrack ausnehmen können, oder vielleicht würde die -fBedingung selbst funktionieren --table raw.

Solange "conntrack" geladen ist, ist "-f" immer falsch, da das Paket immer rekonstruiert wird. Lorenzo Pistone vor 10 Jahren 0