Linux24 juillet 2026 2 vues

UFW : configurer le pare-feu de votre VPS Linux (Ubuntu/Debian)

UFW : configurer le pare-feu de votre VPS Linux (Ubuntu/Debian)

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 root ou un utilisateur sudo.
  • 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 22 par votre port réel, par exemple sudo ufw allow 2222/tcp. Vérifiez votre port dans /etc/ssh/sshd_config (directive Port) 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 :

  • allow autorise la connexion. C'est ce que vous utilisez pour vos services publics (SSH, web).
  • deny bloque 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é.
  • reject bloque 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é :

  1. Ajoutez un bloc de configuration dédié à la fin de /etc/ufw/after.rules (le dépôt fournit le contenu exact à copier).
  2. Rechargez UFW : sudo ufw reload.
  3. 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 :

  1. Clés SSH remplacez le mot de passe par une authentification par clés (guide à venir).
  2. UFW fermez tous les ports inutiles (vous êtes ici).
  3. Fail2ban bannissez automatiquement les attaquants qui insistent (guide à venir).
  4. 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.