Conntrack und dynamische ipset/iptables-Regeln

Conntrack und dynamische ipset/iptables-Regeln

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, modinfoInformationen zu nf_conntrack anzeigt und /proc/modulesdie 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 ( FORWARDin 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.

verwandte Informationen