Aller au contenu
Sécurité medium

Configurer un pare-feu avec UFW

10 min de lecture

UFW (Uncomplicated Firewall) est un frontend en ligne de commande pour nftables/iptables. Il est installé par défaut sur Ubuntu (désactivé au démarrage), disponible via apt sur Debian, et conçu pour rendre la configuration d'un pare-feu hôte accessible sans apprendre la syntaxe de iptables. C'est la bonne porte d'entrée pour un serveur Debian/Ubuntu autonome. Dans ce guide, vous posez une politique par défaut stricte, ouvrez les flux utiles, validez l'état du pare-feu, et vous équipez d'un plan de rollback pour ne jamais vous couper de votre propre serveur.

  • Installer UFW sur Debian/Ubuntu et comprendre quand il n'est pas disponible ailleurs
  • Autoriser SSH avant toute activation pour éviter le lockout
  • Poser une politique par défaut (deny incoming, allow outgoing) et l'activer
  • Ajouter des règles allow, deny, limit par service ou par port
  • Vérifier l'état et le numéro de chaque règle avec ufw status verbose / numbered
  • Revenir en arrière proprement en cas de mauvaise règle

UFW est fait pour le pare-feu hôte d'un serveur ou d'un poste Linux. On l'utilise quand :

  • on est sur Ubuntu ou Debian et qu'on veut un pare-feu simple, auditable rapidement
  • on veut une syntaxe lisible (sudo ufw allow 22/tcp) plutôt que des chaînes iptables
  • on met en place une première couche de filtrage avant d'envisager nftables direct ou firewalld

Si vous êtes sur RHEL, Fedora, CentOS Stream ou Rocky, la valeur par défaut est Firewalld — UFW n'y est pas packagé par défaut et le mélanger avec Firewalld crée des conflits. Sur ces systèmes, restez sur Firewalld.

  • Un serveur Debian 12 ou Ubuntu 24.04 LTS
  • Un utilisateur avec droits sudo
  • Un accès SSH par clé déjà configuré — si vous utilisez SSH par mot de passe, lisez d'abord Clés SSH
  • Un moyen d'accès de secours (console physique, console cloud provider, série…) en cas de lockout
Fenêtre de terminal
sudo apt update
sudo apt install -y ufw

Vérifiez que la commande répond :

Fenêtre de terminal
sudo ufw status

Sortie attendue après installation, avant activation :

Status: inactive

C'est l'étape la plus importante du guide. Avant d'activer UFW, créez la règle qui garde votre session SSH vivante.

  1. Autoriser SSH explicitement

    Fenêtre de terminal
    sudo ufw allow 22/tcp

    Si votre SSH écoute sur un port non standard :

    Fenêtre de terminal
    sudo ufw allow 2222/tcp comment 'SSH admin'
  2. Rate-limiter SSH pour freiner les attaques par force brute

    Fenêtre de terminal
    sudo ufw limit 22/tcp

    limit accepte jusqu'à 6 connexions par source par 30 s avant de bloquer l'IP. Utile contre les bots ; pas un substitut à des clés SSH et à un durcissement SSH complet si vous exposez SSH sur Internet (voir Durcir SSH).

  3. Relire la règle

    Fenêtre de terminal
    sudo ufw show added

    Doit afficher ufw limit 22/tcp ou ufw allow 22/tcp selon votre choix.

Par défaut, UFW applique :

  • deny incoming — tout trafic entrant non explicitement autorisé est refusé
  • allow outgoing — tout trafic sortant est autorisé

C'est la bonne baseline. Activez :

Fenêtre de terminal
sudo ufw enable

Vous verrez un avertissement puis la règle d'activation. Vérifiez immédiatement :

Fenêtre de terminal
sudo ufw status verbose

Sortie attendue :

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
22/tcp (v6) LIMIT Anywhere (v6)

Votre connexion SSH courante doit toujours fonctionner. Si elle tombe, utilisez votre accès de secours et exécutez sudo ufw disable.

UFW connaît les noms de services via /etc/services. Les deux syntaxes ci-dessous sont équivalentes :

Fenêtre de terminal
# par nom de service
sudo ufw allow http
# par numéro de port
sudo ufw allow 80/tcp

Quelques cas courants :

Fenêtre de terminal
# Serveur web
sudo ufw allow http
sudo ufw allow https
# Serveur mail (SMTP + IMAP chiffrés)
sudo ufw allow 587/tcp comment 'SMTP submission'
sudo ufw allow 993/tcp comment 'IMAPS'
# Limiter un service à un réseau interne
sudo ufw allow from 192.168.10.0/24 to any port 3306 proto tcp comment 'MySQL LAN only'
# Bloquer une IP qui martèle un service public (ex: HTTP exposé)
# Inutile sur un port déjà bloqué par deny-by-default
sudo ufw deny from 203.0.113.42 to any port 80 proto tcp

Toujours vérifier après chaque lot de règles :

Fenêtre de terminal
sudo ufw status numbered

Le numéro permet de supprimer une règle précise :

Fenêtre de terminal
sudo ufw delete 3

Trois commandes de vérification à garder sous la main :

BesoinCommande
État + politique par défaut + règlessudo ufw status verbose
Règles avec numéro (pour suppression)sudo ufw status numbered
Règles en attente (avant ufw enable)sudo ufw show added

Pour inspecter le trafic bloqué, activez la journalisation :

Fenêtre de terminal
sudo ufw logging medium
sudo tail -f /var/log/ufw.log

Les entrées [UFW BLOCK] indiquent les paquets refusés ; utilisez-les pour diagnostiquer un service qui ne répond pas.

  • Toujours autoriser SSH avant ufw enable — règle d'or.
  • Préférer limit à allow sur SSH exposé sur Internet, complété par clé SSH uniquement.
  • Commenter chaque règle avec comment '…' — la relecture dans 6 mois sera beaucoup plus facile.
  • Scoper les règles au bon réseau (from 192.168.0.0/16 to any …) plutôt que d'ouvrir Anywhere par défaut.
  • Ne pas mixer UFW et iptables/nftables à la main — UFW écrit ses propres chaînes, une modification manuelle crée des conflits silencieux.
  • Tester la persistance : sudo systemctl reboot puis revérifier ufw status verbose. UFW est normalement activé au démarrage, mais une config cloud-init peut remettre l'état à inactive.

Avant de lancer ufw enable, ayez ces deux filets de secours :

  1. Une deuxième session SSH ouverte sur le serveur (l'activation ne coupe pas les connexions établies, mais une règle ratée pourrait le faire sur la prochaine).
  2. L'accès console configuré et testé (IPMI, KVM cloud, port série).

Rollback complet en cas de problème :

Fenêtre de terminal
# Désactiver UFW (retour à l'état pré-activation)
sudo ufw disable
# Réinitialiser toutes les règles
sudo ufw reset

reset efface toutes les règles et désactive UFW. C'est radical, utilisez-le si vous êtes perdu. Après un reset, il faut refaire la procédure d'autorisation SSH avant un nouveau enable.

SymptômeCause probableAction
SSH coupé après ufw enablePort SSH non autorisé ou règle trop restrictiveAccès console → sudo ufw disable, corriger, réessayer
Service accessible en local, pas depuis l'extérieurPort non autorisé ou règle avec from trop étroitesudo ufw status numbered ; ajuster ou ajouter allow <port>/tcp
ufw status vide après rebootUFW désactivé au démarrage (Ubuntu cloud init)sudo systemctl enable --now ufw + vérifier sudo ufw enable
Règles non visibles dans iptables -LNormal : UFW utilise ses propres chaînesUtiliser sudo iptables -L -n -v avec les chaînes UFW ou rester sur sudo ufw status
[UFW BLOCK] dans /var/log/ufw.log pour un service légitimeService arrive sur une interface non autoriséeAjouter allow in on <iface> ou élargir la règle
  • UFW est un frontend simplifié de nftables/iptables, packagé par défaut sur Ubuntu et installable sur Debian.
  • Autorisez SSH avant d'activer — c'est la seule erreur qui peut vous couper votre serveur.
  • Utilisez limit pour SSH exposé sur Internet, allow pour un réseau interne.
  • Politique par défaut recommandée : deny incoming, allow outgoing.
  • sudo ufw status verbose et sudo ufw status numbered sont les deux commandes à mémoriser.
  • Chaque règle peut recevoir un comment — utilisez-le systématiquement.
  • Sur RHEL/Fedora/Rocky, préférez Firewalld ; ne mélangez pas les deux.
  • ufw reset en dernier recours pour repartir d'une page blanche.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn