sudo ufw disable
suivi par sudo ufw enable
me jette hors de SSH
Rapports 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
Je peux me reconnecter sans avoir à modifier les règles via la console (UFW toujours activé).
Cela a commencé après la mise à niveau de Xenial (16.04) du noyau 4.4 vers 4.15 (HWE). La mise à niveau vers 18.04.1 n'a pas résolu le problème.
Versions:
- iptables v1.6.1
- ufw 0,35
- 4.15.0-29-générique # 31-Ubuntu
- Ubuntu 18.04.1 LTS
Le statut UFW est détaillé (certaines règles ont été omises, mais elles sont toutes AUTORISÉES)
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)
Pourquoi cela se produit-il, ou du moins, comment revenir au comportement attendu?
J'ai regardé cette réponse , et je ne suis pas sûr qu'elle s'applique, mais voici /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: Je ne m'attendais pas à ce que cela "corrige" le problème mais juste pour référence j'ai changé le port SSHD écoute (et la règle correspondante) et le problème persiste.
Réponses:
Contexte et limites du problème:
Que se passe-t-il?
Les
sudo ufw allow in port 22
résultats dans le segment de règles iptables suivant:Après
sudo ufw disable
suivi desudo ufw enable
, et même si la connexion ssh elle-même reste correcte, l'ensemble de règles iptables résultant semble avoir oublié l'association avec cette connexion particulière et classe donc tous les paquets entrants comme invalides. D'une manière ou d'une autre, la table de suivi des connexions est devenue confuse et le paquet n'est même pas considéré comme NOUVEAU, mais avec des indicateurs incorrects, ni considéré comme faisant partie de la connexion existante.Considérez un équivalent iptables très basique de ce qui
ufw
se passe. Deux scripts, un pour effacer le jeu de règles et un pour le créer:Et:
Le résultat de ces paquets compte après un cycle d'effacement / chargement avec une session ssh qui a été lancée après un cycle de chargement:
Remarquez les 35 paquets invalides que j'ai tapés sur le terminal de session ssh paralysé et avant la fin de PuTTY.
Pourquoi cela a-t-il cessé de fonctionner, il fonctionnait?
Parce que c'est 100% reproductible, une bissection du noyau était relativement facile, juste longue. Les résultats ont été:
Lien vers l'intégralité du commit.
Comment revenir au comportement attendu?
Après avoir désactivé ufw ou effacé l'ensemble de règles iptables, créez une nouvelle session SSH. Il survivra à une activation ufw ultérieure, mais pourrait être sujet à une interruption aléatoire à un moment donné.
Ce problème sera repris en amont à un moment donné, via la liste de diffusion correspondante.
EDIT: fil de discussion en amont (contient une solution de contournement). Solution copiée ici:
EDIT 2: patch proposé en amont , que j'ai testé et rapporté.
EDIT 3: 2018.11.06: Cela a calé en amont, et je n'ai pas eu le temps de les harceler. J'essaierai d'y revenir bientôt.
EDIT 4: 2019.03.17: Je ne peux pas reproduire ce problème de manière fiable avec le noyau 5.0.
la source