
Szenario:Ich habe Regeln für einen Host geschrieben , bei dem eine DPI-Engine Netfilter-Warteschlangen überwacht: Firewall-Regeln reihen den bei diesem Host eingehenden Datenverkehr in unterschiedliche Netfilter-Warteschlangen ein, je nachdem, ob der Datenverkehr von einem bestimmten meiner Hosts iptables
kommt oder nicht .ipset
In der FORWARD
Kette werden alle Verbindungen in unterschiedliche Warteschlangen eingereiht NFQUEUES
: Die DPI-Engine beobachtet in den Warteschlangen des Benutzerbereichs die von iptables gesendeten Pakete. Wenn eine verbotene Verbindung erkannt wird, markiert sie das Paket mit einem speziellen Wert. Die DPI-Engine fügt verbotene Pakete erneut in den Stapel ein. In der POSTROUTING
Kette überprüfe ich, ob Verbindungen mit diesem speziellen Wert markiert sind und wenn ja, lösche ich DROP
sie.
Es funktioniert alles gut, aber ...
Problem: die DPI-Engine ist gut, aber nicht perfekt: manchmal,
- Datenverkehr, der als verboten gekennzeichnet sein sollte, wird nicht als solcher gekennzeichnet und daher nicht blockiert.
- Verbotener Datenverkehr wird blockiert, aber nicht sofort, und eine verbotene Verbindung kann in der Zwischenzeit eine andere Verbindung öffnen (
RELATED
, laut Conntrack-Maschine), die nicht als verboten markiert ist, aber ich möchte die entsprechende Verbindung ebenfalls blockieren.
Im zweiten Fall möchte ich Maßnahmen ergreifen: Stellen Sie sich als Beispiel für Fall 2 vor, dass die DPI-Engine YouTube blockieren möchte, dies aber nicht schnell genug schafft. Sie lässt die YouTube-Verbindung eine andere Verbindung öffnen, die von der DPI-Engine als SSL gekennzeichnet wird. Die DPI-Engine blockiert YouTube schließlich, aber die SSL-Verbindung ist frei und kann genutzt werden. Ich kann der DPI-Engine nicht sagen, dass sie SSL-Verbindungen blockieren soll, unabhängig davon, welche Verbindungen sie geöffnet haben.
Überlegungen: wie erklärt inSzenario, Pakete, die in POSTROUTING
der Kette eingehen, können mit 0 (das ist der Standardwert, also hat die DPI-Engine keine Aktion ausgeführt) oder mit diesem speziellen Wert (die DPI-Engine hat eine verbotene Verbindung gesehen und markiert) markiert werden: eine einfache
iptables -t mangle -A POSTROUTING -m mark --mark DROPVALUE -j DROP
ist fast immer genug, aber inProblemAbschnitt habe ich geschrieben, dass Verbindungen mit den verbotenen Verbindungen VERBUNDEN sind, aber von der DPI-Engine nicht als solche erkannt werden, weilselbst wenn sie von einer verbotenen Verbindung erstellt wurden, steht deren Protokoll nicht auf der schwarzen Liste und deshalb werden sie nicht als verboten angesehen. Das ist richtig, weil ich keine schwarze Liste erstellen kann SSL
und HTTPS
.
Ich muss Verbindungen RELATED
zu verbotenen Verbindungen blockieren: RELATED
und ESTABLISHED
(wenn ich das richtig verstanden habe) beziehe ich mich nicht auf bestimmte Verbindungen, sondern auf verbotene Verbindungen.
Frage: ist es möglich, Verbindungen zu trennen, RELATED
die getrennt werden sollen (oder bereits getrennt wurden) iptables
? Oder ist dazu ein Hack conntrack
erforderlich?
Vielen Dank im Voraus für alle Vorschläge.
Antwort1
Sie verstehen das falsch RELATED
. Dies wird nicht für jede Verbindung verwendet, die eine einzelne Adresse herstellen könnte. Es wird nur für tatsächlich verwandte Daten verwendet, wie etwa den FTP-Datenstrom, der mit einer FTP-Steuerverbindung verknüpft ist, oder ICMP-Fehlermeldungen, die mit einer offenen Verbindung verknüpft sind. Es gibt nur sehr wenige solcher Verbindungen, die tatsächlich übereinstimmen RELATED
.