Configurer le pare-feu UFW sur un VPS
Apprenez à configurer UFW sur Ubuntu ou Debian : bloquez tout par défaut, autorisez les ports nécessaires et activez-le sans vous verrouiller hors de SSH.
Ce qu’est UFW et pourquoi vous en avez besoin
UFW signifie Uncomplicated Firewall, et son nom est explicite. Il s’agit d’une interface simplifiée du pare-feu déjà intégré au noyau Linux. Au lieu d’écrire des règles brutes, vous saisissez des commandes courtes comme ufw allow 22/tcp. Sur un VPS fraîchement installé, tous les services en écoute sont accessibles depuis Internet par défaut. Un pare-feu inverse cette logique : vous refusez tout, puis vous autorisez uniquement les quelques ports que vous utilisez réellement. Ce simple changement réduit la majeure partie de votre surface d’exposition avec environ quatre commandes. UFW est l’outil utilisé sur Ubuntu et Debian. Si votre VPS fonctionne sous Rocky ou AlmaLinux, utilisez plutôt firewalld, qui organise les règles en zones.
Avant de le configurer, identifiez les services en écoute, car ce sont eux dont le pare-feu contrôle l’accès. Identifier les services en écoute avec ss -tlnp est la bonne première étape.
La règle qui vous évite de vous verrouiller dehors
Voici l’erreur qui fait hésiter beaucoup de personnes à utiliser un firewall. Vous activez UFW avec une policy default-deny, mais vous n’avez pas autorisé SSH. Dès que le firewall est actif, votre propre connexion est donc coupée et vous ne pouvez plus vous reconnecter. Pour éviter ce problème, autorisez toujours SSH avant d’activer UFW. C’est le seul point important, et les étapes ci-dessous appliquent cette séquence sûre.
Si cela vous arrive malgré tout, vous n’êtes pas bloqué : la console web de votre fournisseur, via VNC ou une connexion série, ne passe pas par SSH. Vous pouvez donc vous y connecter et exécuter ufw disable ou ajouter la règle manquante. Un verrouillage par le firewall présente aussi un symptôme caractéristique : un paquet rejeté laisse votre client SSH attendre jusqu’à l’expiration du délai, tandis qu’un daemon SSH arrêté refuse immédiatement la connexion. C’est la différence entre une connexion refusée et une connexion qui expire.
Étape 1 : définir les règles par défaut
Commencez par demander à UFW de refuser toutes les connexions entrantes et d’autoriser toutes les connexions sortantes :
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming est la partie importante. Tout port qui ne possède pas de règle d’autorisation explicite est fermé depuis l’extérieur, même si un service est à l’écoute dessus. allow outgoing permet à votre serveur d’accéder normalement à Internet, notamment pour les mises à jour. Ces deux commandes modifient uniquement la politique par défaut ; aucune règle n’est appliquée tant que vous n’avez pas activé UFW à l’étape 3.
Étape 2 : Autoriser uniquement les ports nécessaires
Avant d’activer le pare-feu, autorisez SSH pour conserver votre connexion :
sudo ufw allow 22/tcpUFW peut également limiter le débit des connexions SSH : sudo ufw limit 22/tcp autorise le port, mais bloque toute adresse qui établit six connexions ou plus en trente secondes. Cela limite l’efficacité des scripts de force brute sans logiciel supplémentaire.
Si vous exécutez un serveur web, autorisez également HTTP et HTTPS :
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpN’autorisez que les services que vous exposez au public. Une base de données comme Postgres sur le port 5432 ne devrait presque jamais faire l’objet d’une règle d’autorisation. Faites-la écouter sur 127.0.0.1 afin qu’elle soit accessible uniquement depuis la machine. Chaque port ouvert augmente la surface à protéger. Gardez donc une liste courte.
Vous pouvez également préparer ici la séquence complète de commandes ufw pour votre serveur, puis les exécuter dans l’ordre :
Étape 3 : Activer le pare-feu et vérifier qu’il est actif
sudo ufw enableUn avertissement indique que la commande peut interrompre les connexions SSH existantes. Comme vous avez autorisé 22/tcp à l’étape 2, votre session reste active. Vérifiez le résultat :
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN AnywhereVérifiez deux éléments. Status: active indique que le pare-feu est actif. Chaque règle apparaît deux fois : une fois sans option et une fois avec (v6). Cela indique qu’UFW gère aussi IPv6, en plus d’IPv4. Si les lignes (v6) sont absentes, la partie IPv6 n’est pas gérée. C’est un problème distinct, traité dans l’article sur le pare-feu IPv6.
Gérer les règles par la suite
Pour afficher les règles avec leur numéro afin d’en supprimer une :
sudo ufw status numbered
sudo ufw delete 3Pour autoriser un port uniquement depuis une adresse, ce qui permet notamment d’exposer un service d’administration à votre seule adresse IP :
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpCette approche ne fonctionne plus dès que votre propre adresse change ou que plusieurs machines doivent y accéder. La solution habituelle consiste alors à ne plus ouvrir le port publiquement et à accéder au service via un réseau privé. C’est précisément le rôle de la publication du sous-réseau privé du serveur sur votre tailnet.
Un firewall constitue une couche de sécurité. Il contrôle ce qui peut atteindre un port, mais il ne ralentit pas quelqu’un qui martèle un port laissé ouvert, comme SSH. Pour cela, ajoutez Fail2ban devant SSH afin de bannir les récidivistes. La défense en profondeur consiste à faire en sorte que chaque couche couvre ce que les autres ne peuvent pas couvrir.
Un firewall n’a de sens qu’une fois que vous savez ce que sont les ports et comment les services écoutent, et sa configuration fait partie des étapes des 10 premières minutes sur un nouveau VPS.
FAQ
L’activation d’UFW va-t-elle couper ma session SSH ?
Non, si vous autorisez d’abord SSH. Exécutez sudo ufw allow 22/tcp avant sudo ufw enable. Votre connexion reste active, car le pare-feu autorise alors le port 22. Le risque est d’activer un pare-feu avec une politique par défaut qui refuse tout, sans règle d’autorisation pour SSH. Vous perdez alors l’accès au serveur. Dans ce cas, connectez-vous via la console VNC ou série de votre fournisseur, puis exécutez ufw disable.
Quels ports dois-je ouvrir sur un VPS ?
Uniquement ceux des services accessibles publiquement. Ouvrez SSH (22/tcp) pour administrer le serveur, ainsi que HTTP et HTTPS (80/tcp, 443/tcp) si vous hébergez un site web. Laissez tous les autres ports refusés. Les services internes, comme les bases de données, doivent écouter sur 127.0.0.1 et ne doivent avoir aucune règle de pare-feu. Ils ne seront ainsi jamais accessibles depuis le réseau.
UFW gère-t-il IPv6 ?
Oui, sur les versions modernes d’Ubuntu : IPV6=yes est défini dans /etc/default/ufw. Chaque règle s’applique donc aux deux piles réseau, et ufw status affiche les règles IPv6 avec le suffixe (v6). Les cas où cette configuration peut malgré tout échouer sont décrits dans le piège du pare-feu IPv6.
Comment supprimer une règle UFW ?
Exécutez sudo ufw status numbered pour afficher les règles avec leur numéro d’index, puis sudo ufw delete N, où N correspond au numéro de la règle à supprimer. Vous pouvez également supprimer une règle avec sa spécification, par exemple sudo ufw delete allow 80/tcp.
Comment autoriser un port depuis une seule adresse IP ?
Utilisez une règle from au lieu d’une règle allow standard. Pour autoriser uniquement l’adresse de votre bureau à accéder à PostgreSQL, exécutez sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Avec une politique par défaut qui refuse tout, le port reste fermé pour tous tant qu’aucune règle ne l’autorise. Cette règle from est donc le seul moyen d’y accéder : tout Internet reste bloqué et seule l’adresse indiquée peut passer. N’ajoutez pas non plus de règle allow 5432/tcp standard, car elle ouvrirait le port à tout le monde. C’est la méthode la plus sûre pour exposer une base de données ou un panneau d’administration. Vérifiez la configuration avec sudo ufw status verbose, qui affiche l’adresse source à côté du port.