sudo ufw disable
gefolgt von sudo ufw enable
tritt mich aus SSH
DMESG-Berichte
[UFW BLOCK] IN=eth0 OUT= MAC=30:........ SRC=192.168.1.me DST=192.168.1.server LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=15776 DF PROTO=TCP SPT=55640 DPT=22 WINDOW=253 RES=0x00 ACK URGP=0
Ich kann mich wieder anmelden, ohne die Regeln über die Konsole ändern zu müssen (UFW ist weiterhin aktiviert).
Dies begann nach dem Upgrade von Xenial (16.04) von Kernel 4.4 auf 4.15 (HWE). Ein Upgrade auf 18.04.1 hat das Problem nicht behoben.
Versionen:
- iptables v1.6.1
- ufw 0,35
- 4.15.0-29-generic # 31-Ubuntu
- Ubuntu 18.04.1 LTS
Der UFW-Status ist ausführlich (einige Regeln wurden weggelassen, aber alle sind ERLAUBT)
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
Warum passiert dies oder wie kann man zumindest zum erwarteten Verhalten zurückkehren?
Ich habe mir diese Antwort angesehen und bin mir nicht sicher, ob sie zutrifft, aber hier ist /etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local
# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
# all other non-local packets are dropped
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
PS: Ich habe nicht erwartet, dass dies das Problem "behebt", aber nur als Referenz habe ich den Port geändert, den SSHD abhört (und die entsprechende Regel), und das Problem bleibt bestehen.
Antworten:
Hintergrund und Grenzen des Problems:
Was ist los?
Die
sudo ufw allow in port 22
Ergebnisse im folgenden iptables-Regelsegment:Im
sudo ufw disable
Anschluss daransudo ufw enable
und obwohl die SSH-Verbindung selbst in Ordnung bleibt, scheint der resultierende iptables-Regelsatz die Zuordnung zu dieser bestimmten Verbindung vergessen zu haben und klassifiziert daher alle eingehenden Pakete als ungültig. Irgendwie ist die Verbindungsverfolgungstabelle verwirrt und das Paket wird nicht einmal als NEU betrachtet, sondern mit falschen Flags, noch wird es als Teil der bestehenden Verbindung betrachtet.Betrachten Sie ein sehr einfaches iptables-Äquivalent zu dem, was
ufw
gerade getan wird. Zwei Skripte, eines zum Löschen des Regelsatzes und eines zum Erstellen:Und:
Das Ergebnis dieser Pakete zählt nach einem Lösch- / Ladezyklus mit einer SSH-Sitzung, die nach einem Ladezyklus gestartet wurde:
Beachten Sie die 35 ungültigen Pakete, die ich auf dem verkrüppelten SSH-Sitzungsterminal und vor dem Beenden von PuTTY eingegeben habe.
Warum hat das aufgehört zu funktionieren, es hat früher funktioniert?
Da dies zu 100% wiederholbar ist, war eine Kernhalbierung relativ einfach und nur zeitaufwändig. Die Ergebnisse waren:
Link zum gesamten Commit.
Wie kann man zum erwarteten Verhalten zurückkehren?
Erstellen Sie nach dem Deaktivieren von ufw oder dem Löschen des iptables-Regelsatzes eine neue SSH-Sitzung. Es überlebt eine nachfolgende ufw-Aktivierung, kann jedoch irgendwann einem zufälligen Ausfall unterliegen.
Dieses Problem wird irgendwann über die zugehörige E-Mail-Liste vorgelagert.
BEARBEITEN: Upstream-E-Mail-Thread (enthält eine Problemumgehung). Problemumgehung hier kopiert:
EDIT 2: Upstream vorgeschlagener Patch , den ich getestet und zurückgemeldet habe.
EDIT 3: 2018.11.06: Dies ist stromaufwärts ins Stocken geraten, und ich hatte keine Zeit, sie zu belästigen. Ich werde versuchen, bald darauf zurückzukommen.
EDIT 4: 2019.03.17: Ich kann dieses Problem mit Kernel 5.0 nicht zuverlässig reproduzieren.
quelle