iptables - erlaubt Verbindungen zu einem Port nur für IP-Adressen mit etabliertem Status auf einem anderen Port

iptables - erlaubt Verbindungen zu einem Port nur für IP-Adressen mit etabliertem Status auf einem anderen Port

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 ipsetdas Paket installieren und sicherstellen, dass Ihr Kernel ipsetes 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

verwandte Informationen