Frage iptables: Unterschied zwischen NEW, ESTABLISHED und RELATED-Paketen


Teil einer Firewall auf einem Server:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Wenn ich online suche, sehe ich immer, dass NEW in dieser Regel verwendet wird, aber es fällt mir schwer zu verstehen, warum ESTABLISHED und RELATED nicht verwendet werden.

So was :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Kann mir jemand erklären, wann genau ein NEUES Paket in ESTABLISHED und RELATED wechselt?


37
2018-03-19 21:37


Ursprung




Antworten:


Betrachten Sie ein NEW-Paket als Telefonanruf bevor der Empfänger abgeholt hat. Ein ESTABLISHED-Paket ist ihr "Hallo". Und ein RELATED-Paket wäre, wenn Sie anrufen würden, um ihnen von einer E-Mail zu erzählen, die Sie gerade senden wollten. (Die E-Mail wird VERBUNDEN.)

Falls meine Analogie nicht so toll ist, denke ich persönlich, dass die man-Seiten gut damit umgehen:

NEW - bedeutet, dass das Paket eine neue Verbindung oder anderweitig gestartet hat   verbunden mit einer Verbindung, die Pakete in beiden nicht gesehen hat   Richtungen und

ESTABLISHED - bedeutet, dass das Paket einer Verbindung zugeordnet ist   die Pakete in beiden Richtungen gesehen hat,

RELATED - bedeutet, dass das Paket eine neue Verbindung beginnt, aber ist   einer bestehenden Verbindung zugeordnet, z. B. eine FTP-Datenübertragung,   oder ein ICMP-Fehler.

iptables (8) - Linux man page


41
2018-03-19 21:41



Aus Neugier, wissen Sie, wie es RELATED-Pakete bestimmt? Gibt es einen Mechanismus, den Anwendungen verwenden können, um iptables zu signalisieren, dass eine Verbindung eine verwandte Verbindung ist, oder ist sie nur ein Teil des statusbehafteten Teils von iptables? - Matthew Scharley
Es wird von einer Reihe von Kernel-Modulen namens ip_conntrack_ * behandelt, die jeweils für ein bestimmtes Protokoll geschrieben sind, das nicht verwandte Verbindungen (wie FTP) verwendet. Um deine Frage zu beantworten, denke ich, dass du ein ähnliches Modul für deine Anwendung laden musst. - Kyle Smith
OK danke. Aber mit NEW in der Regel zurück zu gehen, ist es nicht möglich, ein Paket so aussehen zu lassen, als wäre es bereits ESTABLISHED und deshalb nicht durch die Regel blockiert? - Kris
@Kris: Es ist ziemlich schwer, ausgehende Pakete zu fälschen, also nach dem Wortlaut der Manpage in der Antwort sehe ich nicht wie. Es ist richtig, dass es möglich ist, ein Paket zu fälschen, das aussieht, als wäre es für eine offene Verbindung bestimmt. Aber selbst ohne Firewall würde der TCP-Stack das Paket einfach auf den Boden fallen lassen, wenn es nicht bereits von einer offenen Verbindung wusste Absender. Wenn es sich um eine Firewall auf einem Router handelt, ist es trotzdem möglich, diesen Status durch Überprüfung beizubehalten SYN/ACK/RST/ etc-Pakete, wenn sie den Router durchlaufen, und ich würde iptables erwarten, dies zu tun. - Matthew Scharley
@Kris: Etwas Ähnliches (albigit nicht technisch identisch) wird von VNC Software wie TeamViewer genutzt, um durch Firewalls / Router zu tunneln. Der Prozess wird aufgerufen Lochung. Kurz gesagt, Sie haben einen Host-PC (der sich hinter einer einschränkenden Firewall befindet), mit dem Sie sich von einem anderen Gerät aus verbinden möchten (über das Internet). Beide PCs öffnen eine individuelle Verbindung zu einem separaten Server (z. B. dem TeamViewer Server), der zwischen ihnen "vermittelt", so dass ihre Firewalls so aussehen, als wären die Pakete verwandt, und dadurch können diese PCs jeweils eine eigene Verbindung herstellen andere. - Levit


Asumming für Server und Client eine restriktive INPUT und öffnen OUTPUT, d.h.

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Und von iptables-Erweiterungen (8) über das Beispiel von FTP im aktiven Modus:

1. NEU

NEW Das Paket hat eine neue Verbindung oder anderweitig gestartet   damit verbundenen                 mit einer Verbindung, die Pakete in beiden Richtungen nicht gesehen hat.

Der Client am Port 50000 (jeder beliebige nicht privilegierte Port) verbindet sich mit dem FTP-Server am Port 21, der Server würde mindestens dieses benötigen, um diese eingehende Verbindung zu akzeptieren:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. Etabliert

ETABLIERT                 Das Paket ist einer Verbindung zugeordnet, die es gesehen hat                 Pakete in beiden Richtungen.

Jetzt auf der Client-Seite, öffnete er eine ausgehende Verbindung zum Server am Port 21 Verwenden eines lokalen Ports 50000 und er benötigt die folgenden iptables, damit die Antwort eintreffen kann server (21) zu client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. VERBUNDEN

VERBUNDEN                 Das Paket startet eine neue Verbindung, ist aber verknüpft                 eine bestehende Verbindung, wie eine FTP-Datenübertragung oder ein ICMP                 Error.

Jetzt, nachdem die FTP-Verbindung hergestellt wurde und eine Datenverbindung hergestellt werden soll, öffnet der Client einen Server-Socket (ja, mit einem aktiven FTP-Client wird ein Server für die Datenverbindung) am Port 60000 (zu meinem Verständnis Client wird diesen Port markieren 60000 wie RELATED zu der anderen Verbindung von 50000->21) und sendet diese Portnummer per FTP an den Server PORT Befehl. Dann öffnet der FTP-Server eine neue Verbindung von seinem Port 20 zum Hafen 60000 auf dem Client, und nun, der Client benötigt nun Folgendes, damit diese neue Verbindung erfolgreich ausgeführt werden kann:

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Damit dies funktioniert, müssen Sie es aktivieren ip_conntrack_ftp Kernel-Modul, damit das System Verbindungen / Pakete als markieren kann RELATED (das ist mein Verständnis, ich habe das nicht zu sehr gegraben):

modprobe ip_conntrack_ftp

10
2018-02-21 16:16



etabliert nur erfordert zuvor lokal entstandenen unidirektionalen Fluss, nicht tcp 3-Wege-Handshake, ist mein Verständnis richtig? - sdaffa23fdsf
Danke für die Antwort, für etablierte Sie sagte "iptables, um die Antwort von Server (21) zu Client (50000) ankommen" "Wenn es von Server zu Client ist, warum ist es INPUT und nicht OUTPUT? - Medya
@Medya, weil aus Sicht des Clients Pakete, die vom Server (21) zum Client (50000) gesendet werden, eingehende Pakete sind, für den Client also ein INPUT. - Jaime Hablutzel