Un serveur bien configuré n'expose que les services strictement nécessaires. Tout le reste doit être fermé et c'est précisément le rôle d'un pare-feu. Sous Linux, le filtrage réseau repose sur netfilter, piloté historiquement par iptables, une syntaxe puissante mais réputée aride. UFW (Uncomplicated Firewall) est la surcouche officielle d'Ubuntu qui rend ce filtrage accessible : quelques commandes lisibles suffisent à verrouiller votre machine.
Ce guide vous accompagne pas à pas pour installer et configurer UFW sur un VPS Linux sous Ubuntu ou Debian : politiques par défaut, autorisation de SSH sans risquer de vous verrouiller dehors, ouverture des ports web, règles avancées, journalisation, et le piège bien connu du contournement de UFW par Docker.
Qu'est-ce qu'UFW et pourquoi l'utiliser ?
UFW n'est pas un pare-feu à part entière : c'est une interface simplifiée au-dessus de iptables/nftables. Là où iptables demande des lignes complexes, UFW se contente d'instructions du type ufw allow 443. Il gère les deux sens du trafic entrant (incoming) et sortant (outgoing) et permet de filtrer par port, par protocole, par service nommé ou par adresse source.
Le principe d'un bon pare-feu tient en une phrase : tout bloquer par défaut, puis n'ouvrir que le nécessaire. Concrètement, on refuse toutes les connexions entrantes, on autorise toutes les connexions sortantes, puis on ajoute une exception pour chaque service que l'on souhaite rendre accessible (SSH, HTTP, HTTPS…).
Prérequis
- Un VPS sous Ubuntu 22.04/24.04 ou Debian 11/12 avec un accès
rootou un utilisateursudo. - Un accès SSH fonctionnel et surtout, la connaissance du port SSH utilisé (22 par défaut).
- Un avertissement à lire avant tout : mal configurer un pare-feu sur un serveur distant est le meilleur moyen de se verrouiller soi-même dehors. Suivez l'ordre des étapes ci-dessous à la lettre : on autorise SSH avant d'activer UFW, jamais l'inverse.
Installer UFW sur Ubuntu et Debian
Sur Ubuntu, UFW est généralement préinstallé. Sur Debian, il faut l'ajouter. Dans les deux cas :
sudo apt update
sudo apt install -y ufw
Vérifiez l'état du service. Au départ, UFW est inactif :
sudo ufw status
La réponse Status: inactive est normale : nous allons d'abord poser les règles, puis l'activer.
Définir les politiques par défaut
On commence par la règle de base : refuser tout ce qui entre, autoriser tout ce qui sort. C'est le socle d'un serveur sécurisé.
sudo ufw default deny incoming
sudo ufw default allow outgoing
À ce stade, si vous activiez UFW immédiatement, vous perdriez votre connexion SSH. C'est pourquoi l'étape suivante est impérative avant l'activation.
Autoriser SSH (à faire AVANT d'activer UFW)
Autorisez le service SSH pour ne pas vous couper l'accès :
sudo ufw allow OpenSSH
OpenSSH est un profil applicatif prédéfini qui ouvre le port 22. Vous pouvez aussi désigner le port directement :
sudo ufw allow 22/tcp
Vous avez changé le port SSH ? C'est une bonne pratique de sécurité. Dans ce cas, remplacez
22par votre port réel, par exemplesudo ufw allow 2222/tcp. Vérifiez votre port dans/etc/ssh/sshd_config(directivePort) avant d'activer le pare-feu. Pour aller plus loin sur le durcissement de l'accès, voyez le parcours sécurisation en fin d'article.
Activer UFW
Une fois SSH autorisé, activez le pare-feu :
sudo ufw enable
UFW affiche un avertissement indiquant que la commande peut perturber les connexions SSH existantes. Puisque vous avez autorisé SSH juste avant, confirmez avec y. Votre connexion actuelle reste ouverte.
Vérifier le statut et lister les règles
Pour un état détaillé, incluant les politiques par défaut et la journalisation :
sudo ufw status verbose
Pour afficher les règles avec leur numéro indispensable pour en supprimer une ensuite :
sudo ufw status numbered
Vous obtenez une sortie de ce type :
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Ouvrir des ports pour vos services
C'est l'usage quotidien d'UFW : ouvrir un port pour chaque service que vous exposez. UFW accepte plusieurs syntaxes.
Par nom de service web (ouvre 80 et 443 d'un coup) :
sudo ufw allow 'Nginx Full'
Ce profil existe dès que Nginx est installé ; l'équivalent pour Apache est 'Apache Full'. Si vous montez un serveur web, complétez avec notre guide installer Nginx et PHP-FPM sur un VPS.
Par numéro de port :
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 25565/tcp # exemple : serveur de jeu
Par plage de ports :
sudo ufw allow 6000:6007/tcp
Depuis une adresse source précise (n'ouvrir un port qu'à une IP de confiance) :
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
Cet exemple n'autorise MySQL (port 3306) que depuis l'IP 203.0.113.10 idéal pour une base de données qui ne doit jamais être exposée à tout Internet. Vous pouvez aussi viser un sous-réseau entier en notation CIDR (203.0.113.0/24).
Les profils applicatifs
UFW connaît des « profils » qui regroupent les ports d'une application, ce qui évite de retenir les numéros. Listez ceux disponibles sur votre système :
sudo ufw app list
Vous y trouverez par exemple OpenSSH, Nginx Full, Nginx HTTP, Nginx HTTPS, Apache Full… Pour connaître le détail des ports couverts par un profil :
sudo ufw app info 'Nginx Full'
Ces profils apparaissent automatiquement dès qu'un logiciel compatible est installé. Ils rendent vos règles plus lisibles : sudo ufw allow 'Nginx Full' est plus parlant que sudo ufw allow 80,443/tcp.
Supprimer une règle
Deux méthodes. La plus sûre passe par le numéro affiché par status numbered :
sudo ufw status numbered
sudo ufw delete 2
Vous pouvez aussi supprimer une règle en la réécrivant, précédée de delete :
sudo ufw delete allow 80/tcp
Règles avancées : limiter les connexions SSH
UFW propose une protection intégrée contre les attaques par force brute : la règle limit. Elle bloque temporairement une IP qui tente trop de connexions sur un court laps de temps (par défaut, plus de 6 tentatives en 30 secondes).
sudo ufw limit OpenSSH
C'est un complément utile, mais volontairement basique. Pour une détection fine et des bannissements durables sur l'ensemble de vos services, associez UFW à Fail2ban (guide à venir dans ce même parcours). Les deux outils sont parfaitement complémentaires : UFW décide quels ports sont ouverts, Fail2ban décide quelles IP méritent d'être bloquées.
Autoriser, refuser ou rejeter : bien choisir l'action
UFW propose trois actions principales pour le trafic entrant, à ne pas confondre :
allowautorise la connexion. C'est ce que vous utilisez pour vos services publics (SSH, web).denybloque silencieusement la connexion. Le paquet est ignoré, sans réponse. L'attaquant ne sait pas si le port est fermé ou filtré : c'est le comportement recommandé pour un serveur exposé.rejectbloque la connexion mais renvoie un message de refus à l'émetteur. Utile en interne pour un diagnostic rapide, moins discret face à un scan.
Dans la quasi-totalité des cas sur un serveur public, on garde la politique par défaut deny incoming et on ajoute des allow ciblés. Le reject reste réservé à des situations précises où l'on veut signaler explicitement qu'un port est fermé.
Le piège majeur : UFW et Docker
Voici le point qui surprend le plus d'administrateurs, et une véritable faille de sécurité silencieuse. Docker contourne UFW. Lorsque vous publiez un port de conteneur (par exemple docker run -p 8080:80), Docker écrit ses propres règles directement dans iptables, en amont de celles gérées par UFW. Résultat : le port est accessible depuis tout Internet même si ufw status prétend le bloquer. Votre pare-feu affiche une protection qui n'existe pas.
La solution de référence est le projet open source ufw-docker, qui réconcilie les deux. En résumé :
- Ajoutez un bloc de configuration dédié à la fin de
/etc/ufw/after.rules(le dépôt fournit le contenu exact à copier). - Rechargez UFW :
sudo ufw reload. - Gérez désormais l'accès aux conteneurs avec la syntaxe dédiée, par exemple :
sudo ufw route allow proto tcp from any to any port 8080
Tant que cette configuration n'est pas en place, considérez que tout port publié par Docker est ouvert au monde entier. Si vous utilisez Docker sur votre serveur, traitez ce point comme prioritaire.
Journalisation
Pour tracer les connexions refusées et diagnostiquer un problème, activez la journalisation :
sudo ufw logging on
Les événements sont écrits dans /var/log/ufw.log. Vous pouvez ajuster le niveau (low, medium, high, full) selon le volume souhaité. Pour un serveur en production, low suffit généralement et évite de saturer les logs.
Désactiver ou réinitialiser UFW
Pour désactiver temporairement le pare-feu :
sudo ufw disable
Pour tout remettre à zéro et repartir d'une configuration vierge (les règles sont supprimées) :
sudo ufw reset
Après un reset, n'oubliez pas de réautoriser SSH avant de réactiver UFW, sous peine de vous verrouiller dehors.
Foire aux questions
UFW remplace-t-il iptables ? Non, il le pilote. UFW génère les règles iptables/nftables à votre place. Les deux ne s'opposent pas : UFW est simplement une couche plus lisible.
Je me suis verrouillé dehors, que faire ? Utilisez la console de secours (KVM/VNC) fournie avec votre VPS pour vous connecter hors SSH, puis corrigez la règle ou lancez sudo ufw disable. C'est justement pour éviter cette situation qu'il faut autoriser SSH avant d'activer UFW.
Faut-il ouvrir les ports en tcp ou udp ? La plupart des services (SSH, HTTP, HTTPS) utilisent TCP. Certains services (VPN WireGuard, jeux, DNS) utilisent UDP. Précisez le protocole quand vous le connaissez : sudo ufw allow 51820/udp.
UFW protège-t-il contre les attaques DDoS ? Partiellement. Il filtre et peut limiter les connexions, mais une attaque volumétrique se traite en amont, au niveau réseau. UFW reste néanmoins une brique indispensable de l'hygiène de base.
Le parcours sécurisation de votre serveur
Un pare-feu correctement réglé est la deuxième étape d'un serveur bien défendu. Pour aller au bout de la démarche sur votre VPS Linux, suivez le parcours complet :
- Clés SSH remplacez le mot de passe par une authentification par clés (guide à venir).
- UFW fermez tous les ports inutiles (vous êtes ici).
- Fail2ban bannissez automatiquement les attaquants qui insistent (guide à venir).
- Certbot chiffrez vos services avec un certificat SSL Let's Encrypt (guide à venir).
Retrouvez l'ensemble de nos tutoriels dans la documentation Linux. Avec UFW en place, votre serveur n'expose plus que ce que vous avez explicitement autorisé la base de toute configuration sérieuse.
