sudo ufw disable
a następnie sudo ufw enable
wykopuje mnie z SSH
Raporty DMESG
[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
Mogę zalogować się ponownie bez konieczności zmiany reguł za pośrednictwem konsoli (nadal włączony UFW).
Zaczęło się to po aktualizacji Xenial (16.04) z jądra 4.4 do 4.15 (HWE). Aktualizacja do 18.04.1 nie rozwiązała problemu.
Wersje:
- iptables v1.6.1
- ufw 0,35
- 4.15.0-29-generic # 31-Ubuntu
- Ubuntu 18.04.1 LTS
Pełen status UFW to (niektóre reguły zostały pominięte, ale wszystkie ZEZWALAJĄ)
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)
Dlaczego tak się dzieje, a przynajmniej jak wrócić do oczekiwanego zachowania?
Spojrzałem na tę odpowiedź i nie jestem pewien, czy ma ona zastosowanie, ale oto /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: Nie spodziewałem się, że to „naprawi” problem, ale dla odniesienia zmieniłem port nasłuchiwania SSHD na (i odpowiednią regułę) i problem nadal występuje.
Odpowiedzi:
Tło i granice problemu:
Co się dzieje?
Te
sudo ufw allow in port 22
wyniki w następujących reguł iptables segmentu:Po
sudo ufw disable
następniesudo ufw enable
, i choć sama połączenie ssh pozostaje w porządku, wynikające iptables wyklucza zestaw wydaje się zapominać skojarzenia z danym połączeniu i dlatego klasyfikuje przychodzące pakiety są nieważne. W jakiś sposób tabela śledzenia połączeń została pomylona, a pakiet nie jest nawet uważany za NOWY, ale ma niepoprawne flagi, ani nie jest uważany za część istniejącego połączenia.Rozważ bardzo podstawowy odpowiednik iptables tego, co
ufw
się dzieje. Dwa skrypty, jeden do czyszczenia zestawu reguł i jeden do jego tworzenia:I:
Wynikające z tych pakietów liczy się po cyklu czyszczenia / ładowania z sesją ssh, która została uruchomiona po cyklu ładowania:
Zwróć uwagę na 35 niepoprawnych pakietów podczas pisania na okaleczonym terminalu sesji ssh i przed zakończeniem PuTTY.
Dlaczego to przestało działać, kiedyś działało?
Ponieważ jest to w 100% powtarzalne, podział jądra był stosunkowo łatwy, czasochłonny. Wyniki były następujące:
Link do całego zatwierdzenia.
Jak przywrócić oczekiwane zachowanie?
Po wyłączeniu ufw lub wyczyszczeniu zestawu reguł iptables utwórz nową sesję SSH. Przetrwa kolejne włączenie ufw, ale w pewnym momencie może ulec przypadkowemu wypadnięciu.
Ten problem zostanie w pewnym momencie rozpatrzony wcześniej, za pośrednictwem powiązanej listy e-mail.
EDYCJA: poprzedni wątek e-mail (zawiera obejście). Obejście zostało skopiowane tutaj:
EDYCJA 2: proponowana łatka , którą przetestowałem i przekazałem z powrotem.
EDYCJA 3: 2018.11.06: To utknęło w martwym punkcie, a ja nie miałem czasu, aby ich męczyć. Spróbuję wkrótce do tego wrócić.
EDYCJA 4: 2019.03.17: Nie mogę w wiarygodny sposób odtworzyć tego problemu z jądrem 5.0.
źródło