Verlust von SSH-Sitzungen beim Anwenden von iptables-Regeln

Verlust von SSH-Sitzungen beim Anwenden von iptables-Regeln

Ich habe ein Problem, das ich nicht allein mit SSH und iptables erklären kann. Kurz gesagt: Wenn ich mit SSH mit einem Remote-Host (auf dem Ubuntu 18.04 läuft) verbunden bin und ein Skript ausführe, um iptables-Regeln anzuwenden, verliere ich meine laufende SSH-Sitzung. Ich kann mich zwar erneut verbinden, aber meine laufende Sitzung ist verloren.

Das Skript leert die iptables-Regeln mit dem Befehl netfilter-persistent flushund wendet dann diesen Regelsatz im folgenden iptables-saveFormat an:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -s x.x.x.x/XX -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j LOG --log-prefix "INPUT DROP: "
-A FORWARD -j LOG --log-prefix "FORWARD DROP: "
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -d x.x.x.x/XX -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -d x.x.x.x/32 -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -d x.x.x.x/32 -p udp -m udp --dport 123 -j ACCEPT
-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 3128 -j ACCEPT
-A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT

Nachdem das Skript abgeschlossen ist, geht meine Sitzung verloren und ich kann blockierte SSH-Pakete in beide Richtungen sehen /var/log/kern.log. Dies würde Sinn ergeben, wenn die Informationen zur Verbindungsverfolgung verloren gingen, ich aber immer noch die Verbindung mit herstellen kann conntrack -L(der Server ist eine VM, sodass ich dies auch überprüfen kann, wenn meine SSH-Verbindung verloren geht).

Noch merkwürdiger ist, dass netfilter-persistent flush && ./myscriptmeine Verbindung erhalten bleibt, wenn ich dies tue. Wenn ich die beiden Befehle jedoch nacheinander ausführe, verliere ich die Verbindung. Auch wenn ich die beiden Befehle auf dem VM TTY ausführe, verliere ich meine Verbindung nicht.

Kann jemand dieses Verhalten erklären?

Antwort1

Ihre Standardrichtlinie ist auf „DROP“ eingestellt.

In der Zeit zwischen dem Leeren und dem Hinzufügen der Regeln wird also kein Paket akzeptiert und Sie verlieren Ihre Verbindung ...

Wenn Ihr Skript die Regeln nicht hinzufügen kann, sind Sie aufgeschmissen.

Sie sollten die Richtlinie auf Akzeptieren setzen und am Ende (jeder Kette) eine Regel hinzufügen, um alles zu löschen, was nicht übereinstimmt …

verwandte Informationen