Ich möchte Verbindungen auf Port x für IP-Adressen zulassen, die auf Port y den Status „etabliert“ haben.
Ist dies nur durch die Verwendung von iptables machbar?
Antwort1
Vielleicht kannst du Portknocking verwenden? Port öffnen, wenn eine TCP-Verbindung hergestellt wird, könnte möglich sein: http://en.wikipedia.org/wiki/Port_knocking
Antwort2
Die Antwort ist „irgendwie“. Sie müssen ipset
das Paket installieren und sicherstellen, dass Ihr Kernel ipset
es unterstützt.
Sie müssen zuerst ein „IP-Set“ mit Timeout erstellen:
ipset create MySet hash:ip timeout 60
Fügen Sie dann eine Regel hinzu, die das Timeout für jedes erstellte Paket zurücksetzt
iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src
Fügen Sie abschließend eine Reihe von Regeln hinzu, die den Zugriff auf den zweiten Port nur dann erlauben, wenn die Quelle aufgezeichnet wurde, und löschen Sie andere
iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT
BEARBEITEN
Mir ist gerade aufgefallen, dass es auch möglich ist, die Match-Erweiterung zu verwenden recent
. Das geht so:
-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT
...
-A INPUT -p tcp --dport $portX -j Port2_Test
...
-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT