Comment autoriser SSH dans ufw sans vous enfermer dehors

Lancez d'abord sudo ufw allow OpenSSH, confirmez la règle avec sudo ufw show added, puis lancez sudo ufw enable. L'ordre compte : activer ufw sans règle SSH bloque par défaut toute nouvelle connexion. Si SSH utilise un autre port, autorisez celui-là, par exemple sudo ufw allow 2222/tcp.

Mis à jour le . Toutes les commandes exécutées avec ufw 0.36 sur Ubuntu 24.04 dans un conteneur jetable avec systemd, avec un second conteneur qui se connecte en SSH, y compris le blocage, la règle limit et la désactivation temporisée.

L'ordre sûr

sudo ufw allow OpenSSH
sudo ufw show added
sudo ufw enable
sudo ufw status

Tant qu'ufw est désactivé, ufw status n'affiche que Status: inactive et cache vos règles. C'est pourquoi on utilise show added pour les vérifier.

Sous SSH, ufw enable avertit que cela peut perturber les connexions et demande confirmation. Le manuel prévient que l'activation peut couper les connexions existantes. Dans notre test, la session ouverte a continué de fonctionner, mais ne comptez pas là-dessus.

Ce qui se passe si vous vous trompez

La politique par défaut est de refuser le trafic entrant. Nous avons activé ufw sans règle SSH, et la connexion suivante a échoué ainsi :

ssh: connect to host server port 22: Connection timed out

Votre session ouverte est votre retour : ajoutez la règle depuis là. Si elle a disparu, il vous faut la console de votre hébergeur. Un pare-feu cloud devant le serveur est une chose distincte, et ufw ne peut pas l'ouvrir.

Un filet de sécurité pour les serveurs distants

Avant d'activer ufw, programmez une commande qui le désactive à nouveau :

sudo systemd-run --on-active=5min --unit=ufw-undo ufw --force disable
sudo ufw enable

Testez une nouvelle connexion depuis un autre terminal. Si elle marche, annulez le minuteur :

sudo systemctl stop ufw-undo.timer

Si vous êtes coupé, attendez environ six minutes, car le minuteur peut avoir jusqu'à une minute de retard, et ufw se désactive tout seul.

Quelle règle utiliser

Vous voulezCommande
Port standardsudo ufw allow OpenSSH
Pareil, sans le profilsudo ufw allow 22/tcp
Un autre portsudo ufw allow 2222/tcp
Seulement depuis une adressesudo ufw allow from 203.0.113.10 to any port 22 proto tcp
Limiter les connexions répétéessudo ufw limit OpenSSH

Le profil OpenSSH désigne toujours le port 22. Pour le voir, lancez sudo ufw app info OpenSSH. Il vient avec le paquet openssh-server : sans ce paquet, le nom est inconnu.

Ce que fait limit

ufw limit refuse une adresse qui ouvre 6 connexions ou plus en 30 secondes. Dans notre test, cinq connexions de suite ont fonctionné et la sixième a échoué ainsi :

ssh: connect to host server port 22: Connection refused

Cela vous touche aussi. Une boucle de commandes scp ou une exécution d'Ansible qui ouvre beaucoup de connexions le déclenchera, et le message donne l'impression que sshd s'est arrêté. Réutiliser une seule connexion aide : voir le multiplexage SSH.

Cela ralentit les essais de mots de passe, mais ne sait pas si une connexion a réussi. Pour cela, utilisez fail2ban. La vraie protection contre les essais est de ne pas avoir de connexion par mot de passe.

Changer le port SSH

Ajoutez d'abord la nouvelle règle, et ne retirez l'ancienne qu'après vous être connecté sur le nouveau port :

sudo ufw allow 2222/tcp
# change the port in sshd and test it
sudo ufw delete allow OpenSSH

Toute la procédure, y compris le socket sur les Ubuntu récentes, est dans comment changer le port SSH.

Supprimer une règle

Par numéro, ou en répétant la règle après delete :

sudo ufw status numbered
sudo ufw delete 2
sudo ufw delete allow 22/tcp

Les règles sont listées deux fois, pour IPv4 et IPv6, et les numéros se décalent après chaque suppression : listez-les à nouveau avant d'en supprimer une autre. De plus, une règle créée avec allow OpenSSH et une créée avec allow 22/tcp sont des entrées distinctes, vous pouvez donc vous retrouver avec les deux.

Questions

Comment vérifier que ufw autorise SSH ?

Quand ufw est actif, lancez sudo ufw status et cherchez 22/tcp, OpenSSH ou votre port avec ALLOW. Quand ufw est inactif, status masque les règles : utilisez sudo ufw show added.

Quelle différence entre ufw allow ssh et ufw allow OpenSSH ?

ufw allow ssh utilise le port de /etc/services et s'affiche comme 22/tcp. ufw allow OpenSSH utilise le profil d'application installé par le paquet openssh-server, aussi pour 22/tcp. Les deux marchent. Aucun ne suit un port que vous avez changé dans sshd_config.

ufw protège-t-il les ports publiés par Docker ?

Non. La documentation de Docker dit que les ports de conteneurs publiés contournent les règles d'ufw.

Sources

Autres guides : Sécuriser un serveur

Tous les guides