Ich verstehe einige grundlegende Konzepte des Conntrack-Moduls nicht.
Zunächst einmal bin ich sicher, dass es auf meinem System (Ubuntu 18.04) aktiviert ist, modinfo
Informationen zu nf_conntrack anzeigt und /proc/modules
die Datei mitteilt, dass nf_conntrack „live“ ist.
Zweitens habe ich folgendes Test-Setup:
Maschine A (192.168.1.2) <-----> Router-Maschine (192.168.1.1 & 192.168.2.1) <----> Maschine B (192.168.2.2)
Auf dem Router-Rechner habe ich die folgende iptables-Regel:
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP
BlackListPort ist eine IPset-Tabelle.
Jetzt baue ich eine SSH-Verbindung von Maschine A (1.2) zu Maschine B (2.2) auf. Nachdem ich bestätigt habe, dass es funktioniert, füge ich Port 22 (SSH-Standard) zur BlackListPort-Tabelle hinzu.
Die SSH-Verbindung friert ein/hängt, bis ich Port 22 aus dieser IPset-Tabelle entferne.
Nun die Frage: Da conntrack in meinem System vorhanden ist, warum ist die SSH-Blockierung erfolgreich? Die SSH-Verbindung wurde hergestellt, bevor Port 22 zu ipset hinzugefügt wurde, daher sollte conntrack einfach alle Pakete überspringen, damit SSH funktioniert.
Antwort1
Die SSH-Verbindung wurde hergestellt, bevor Port 22 zu ipset hinzugefügt wurde, daher sollte conntrack einfach alle Pakete überspringen, damit SSH funktioniert.
Das ist nicht richtig.
Alle Pakete werden gemäß den Filterregeln verarbeitet, unabhängig davon, ob sie zu verfolgten Verbindungen gehören oder nicht.
Eine sehr gängige Optimierung von iptables-Regeln besteht darin, etwas wie das Folgende an den Anfang der entsprechenden Regelkette zu setzen ( FORWARD
in Ihrem Beispiel):
iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Auf älteren Distributionen wird möglicherweise stattdessen diese Version angezeigt:
iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
(Ich verstehe, dass conntrack
„match“ jetzt dem „match“ vorgezogen wird state
. Ich glaube, einige Kernel-Versionen nerven Sie sogar damit.)
Dadurch werden Pakete bestehender Verbindungen durchgelassen, wenn für sie eine Verbindungsverfolgungsinformation vorhanden ist. Der Punkt ist jedoch,Dukann kontrollierenwo genauSie legen diese Regel fest oder ob Sie sie überhaupt verwenden. Sie können Ihre Firewall-Regeln also so einstellen, dass sie sich so sehr (oder so wenig) um den Verbindungsstatus kümmern, wie Sie möchten.