Linux

UFW — Configurer le pare-feu Linux

Installer et configurer UFW (Uncomplicated Firewall) pour protéger un serveur : règles, ports, sous-réseaux et logging.

← Retour aux tutoriels Linux
📚 C'est quoi un pare-feu (firewall) ? Un pare-feu est un logiciel qui filtre le trafic réseau entrant et sortant de votre serveur. Imaginez-le comme un vigile à l'entrée d'un bâtiment : il vérifie qui entre et qui sort, et bloque ceux qui ne sont pas autorisés. UFW (Uncomplicated Firewall) est une interface simplifiée pour le pare-feu Linux (iptables). Au lieu de taper des commandes iptables complexes, UFW permet de gérer les règles avec des commandes simples en anglais.
ⓘ Prérequis Un système Debian/Ubuntu. UFW est souvent pré-installé mais désactivé par défaut.

Installer et activer UFW

On commence par installer UFW (s'il n'est pas déjà présent) et l'activer. Mais attention : il y a un piège classique qu'on va éviter.

# Installe UFW (souvent déjà présent sur Ubuntu)
sudo apt install ufw -y

# Vérifie si le pare-feu est actif ou inactif
# Au début, il affiche "Status: inactive"
sudo ufw status

# TRÈS IMPORTANT : on autorise SSH AVANT d'activer le firewall
# Si on oublie, le pare-feu bloquera notre connexion SSH et on sera enfermé dehors !
sudo ufw allow ssh

# Maintenant on peut activer le pare-feu en toute sécurité
# Il demande une confirmation (y pour oui)
sudo ufw enable
⚠ Attention critique Si vous activez UFW sans autoriser SSH d'abord, vous serez verrouillé hors du serveur. Autorisez toujours le port SSH en premier !

Politique par défaut

La "politique par défaut" définit ce que fait le pare-feu quand il reçoit du trafic qui ne correspond à aucune règle. La bonne pratique en sécurité est de tout bloquer par défaut, puis d'autoriser uniquement ce dont on a besoin :

# Bloque TOUT le trafic entrant par défaut
# Concrètement : si quelqu'un essaie de se connecter à un port qu'on n'a pas autorisé, c'est refusé
sudo ufw default deny incoming

# Autorise TOUT le trafic sortant par défaut
# Le serveur peut aller sur Internet (mises à jour, DNS, etc.)
sudo ufw default allow outgoing

# Affiche un résumé détaillé de la configuration actuelle
sudo ufw status verbose
ⓘ Logique Avec cette politique, seuls les ports explicitement autorisés seront accessibles depuis l'extérieur. Le serveur peut toujours initier des connexions (mises à jour, DNS, etc.).

Autoriser des services et ports

Maintenant qu'on bloque tout par défaut, on va ouvrir uniquement les ports dont on a besoin. Il y a plusieurs façons de le faire :

Par nom de service

UFW connaît les noms des services courants et sait quel port leur correspond :

# Autorise SSH (port 22) — indispensable pour la connexion à distance
sudo ufw allow ssh

# Autorise HTTP (port 80) — pour un site web non sécurisé
sudo ufw allow http

# Autorise HTTPS (port 443) — pour un site web sécurisé (avec certificat SSL)
sudo ufw allow https

# Affiche tous les services que UFW connaît
sudo ufw app list

Par numéro de port

Pour les ports personnalisés ou moins courants, on utilise le numéro directement :

# Autorise le port 2222 en TCP (ex: SSH sur un port personnalisé)
# /tcp signifie qu'on autorise uniquement le protocole TCP (pas UDP)
sudo ufw allow 2222/tcp

# Autorise le port 53 en UDP (DNS utilise principalement UDP)
sudo ufw allow 53/udp

# Autorise une PLAGE de ports (du port 8000 au port 8100)
# Le tiret (:) sépare le début et la fin de la plage
sudo ufw allow 8000:8100/tcp

Par sous-réseau

On peut aussi limiter l'accès à certaines adresses IP ou réseaux. C'est plus sécurisé que d'ouvrir un port à tout le monde :

# Autorise TOUT le trafic venant du réseau 10.0.10.0/24
# /24 signifie les 256 adresses de 10.0.10.0 à 10.0.10.255
sudo ufw allow from 10.0.10.0/24

# Autorise UNIQUEMENT le port 3306 (MySQL) depuis le réseau local
# Plus sécurisé : la base de données n'est accessible que depuis les machines du LAN
sudo ufw allow from 10.0.10.0/24 to any port 3306

# Autorise UNE SEULE adresse IP à se connecter en SSH
sudo ufw allow from 10.0.10.5 to any port 22

Bloquer du trafic

# Bloque TOUT le trafic provenant de cette adresse IP
sudo ufw deny from 192.168.1.100

# Bloque tout un sous-réseau (toutes les IP 172.16.x.x)
sudo ufw deny from 172.16.0.0/16

# Bloque le port 25 (SMTP) en entrée
# "in" = trafic entrant uniquement
sudo ufw deny in 25/tcp

Règles numérotées

# Affiche les règles avec un numéro devant chacune
# Pratique pour savoir quelle règle supprimer ou où insérer une nouvelle
sudo ufw status numbered

# Insère une règle EN POSITION 1 (tout en haut = priorité maximale)
# Utile quand on veut qu'une règle soit évaluée avant toutes les autres
sudo ufw insert 1 allow from 10.0.10.5 to any port 22

# Supprime la règle numéro 3 (vérifiez d'abord avec "status numbered")
sudo ufw delete 3

# Supprime une règle en la décrivant (même syntaxe que quand on l'a créée)
sudo ufw delete allow 8080/tcp
ⓘ Ordre des règles UFW applique les règles dans l'ordre. La première règle qui correspond est appliquée. Placez les règles les plus spécifiques en haut.

Activer les logs

# Active les logs du pare-feu (désactivés par défaut)
# Les logs permettent de voir qui tente de se connecter et ce qui est bloqué
sudo ufw logging on

# Règle le niveau de détail des logs
# "medium" est un bon compromis : on voit les connexions bloquées + les nouvelles connexions
sudo ufw logging medium

Les logs sont écrits dans /var/log/ufw.log :

# Affiche les 20 dernières lignes du fichier de log UFW
sudo tail -20 /var/log/ufw.log

# Affiche en TEMPS RÉEL les connexions bloquées
# -f = "follow" : la commande ne s'arrête pas, elle affiche chaque nouvelle ligne
# grep "BLOCK" = ne montre que les lignes contenant "BLOCK"
sudo tail -f /var/log/ufw.log | grep "BLOCK"
NiveauDescription
lowLog uniquement les paquets bloqués
mediumLow + paquets invalides + nouvelles connexions
highMedium + tous les paquets avec rate limiting
fullTous les paquets sans rate limiting

Exemple de configuration complète

Configuration typique pour un serveur web :

# Réinitialiser les règles (optionnel, attention !)
# sudo ufw reset

# Politique par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH (port personnalisé)
sudo ufw allow 2222/tcp comment "SSH"

# Web
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"

# Base de données uniquement depuis le réseau local
sudo ufw allow from 10.0.10.0/24 to any port 3306 comment "MySQL LAN"
sudo ufw allow from 10.0.10.0/24 to any port 5432 comment "PostgreSQL LAN"

# Monitoring (Prometheus)
sudo ufw allow from 10.0.10.0/24 to any port 9090 comment "Prometheus"

# Activer les logs
sudo ufw logging medium

# Activer le firewall
sudo ufw enable

# Vérifier
sudo ufw status verbose
✔ Résultat Le pare-feu UFW est actif avec une politique stricte : tout bloqué par défaut, seuls SSH, HTTP, HTTPS et les services internes sont autorisés. Le logging permet de surveiller les tentatives d'accès.