Authentification à deux facteurs requise

Pour renforcer la sécurité de votre compte, veuillez activer l'authentification à deux facteurs (2FA). Cette fonctionnalité est obligatoire pour protéger vos données.

DevOups
Entreprise
Retour à la documentation

UFW

Pare-feu simplifié pour contrôler rapidement vos ports, services et flux réseau sous Linux.

🔥

Introduction à UFW

Comprendre le rôle d'UFW comme interface simplifiée pour iptables et ses cas d'usage principaux.

UFW (Uncomplicated Firewall) est une surcouche simplifiée d'iptables conçue pour faciliter la gestion d'un pare-feu sur Linux. Il fournit des commandes lisibles, applique automatiquement les règles dans le bon ordre et évite les erreurs de syntaxe courantes.

Principe : Vous définissez une politique par défaut (allow/deny), puis vous ajoutez des règles explicites pour autoriser ou bloquer des ports/services. UFW gère la traduction en règles netfilter et les applique immédiatement.

Cas d'usage typiques : sécuriser un serveur SSH, n'exposer que les services nécessaires (HTTP/HTTPS), limiter les accès par IP ou par plage et activer la journalisation pour surveiller les tentatives suspectes.

UFW simplifie trois étapes majeures. Gardez ce schéma en tête pour structurer vos règles :

Flux de fonctionnement d'UFW

UFW ne remplace pas iptables mais fournit une abstraction claire pour éviter les erreurs. Toute modification est immédiatement persistée dans /etc/ufw.

bash
# 1. Définir la politique par défaut
#    - incoming : deny (bloque tout ce qui n'est pas autorisé)
#    - outgoing : allow (autorise les connexions sortantes légitimes)
#
# 2. Ajouter des règles explicites
#    - allow/deny un port, un protocole ou une IP
#    - ordre important : les règles sont évaluées du haut vers le bas
#
# 3. Activer/surveiller
#    - ufw enable / ufw disable
#    - ufw status / journalctl -u ufw
⚙️

Installation et activation

Installer UFW, vérifier sa présence et activer le service en toute sécurité.

UFW est présent par défaut sur Ubuntu, mais peut être réinstallé ou remis à zéro si nécessaire. Avant d'activer le pare-feu, assurez-vous d'autoriser les accès indispensables (ex : SSH) pour éviter de perdre la main.

Installation / réinstallation

Installe les binaires UFW et les scripts systemd. La commande d'installation ne modifie pas vos règles actuelles.

bash
sudo apt-get update -y
sudo apt-get install -y ufw

Remettre UFW à zéro supprime toutes les règles personnalisées et restaure les politiques par défaut.

Réinitialiser la configuration

Utile lorsque la configuration devient incohérente. Pensez à sauvegarder vos règles avant.

bash
sudo ufw reset

Toujours autoriser SSH avant d'activer le firewall pour éviter de perdre l'accès distant.

Activation sécurisée

La première commande utilise le profil applicatif 'OpenSSH'. ufw enable applique immédiatement toutes les règles et active le service au boot.

bash
sudo ufw allow OpenSSH
sudo ufw enable

Vérifier le statut et la version

status verbose affiche les politiques par défaut, les règles numérotées et l'état du logging.

bash
sudo ufw status verbose
sudo ufw version
🛡️

Politiques par défaut

Définir le comportement global des connexions entrantes, sortantes et routées.

Avant d'ajouter des règles, fixez une politique par défaut. La stratégie recommandée est 'deny' pour les entrées et 'allow' pour les sorties. Ajustez selon vos contraintes de sécurité.

Politique recommandée

Bloque tout le trafic entrant non explicitement autorisé, laisse les connexions sortantes intactes.

bash
sudo ufw default deny incoming
sudo ufw default allow outgoing

Pour un bastion, on peut également bloquer les sorties sauf exceptions.

Serveur bastion strict

Autorise uniquement DNS/HTTP/HTTPS en sortie. Adaptez selon vos besoins (APT, monitoring, etc.).

bash
sudo ufw default deny outgoing
sudo ufw allow out 53
sudo ufw allow out 80
sudo ufw allow out 443

Si votre serveur fait office de routeur, contrôlez les paquets forwardés.

Pare-feu de routage

Empêche le transit de paquets entre interfaces tant que vous n'ajoutez pas de règles explicites.

bash
sudo ufw default deny routed
🚪

Gestion des règles essentielles

Autoriser ou bloquer des ports, des plages IP et gérer les protocoles.

UFW accepte plusieurs syntaxes : par numéro de port, nom de service (selon /etc/services), protocole (tcp/udp) et plage IP. Les règles sont numérotées automatiquement.

Exposer les services web

Autorise HTTP et HTTPS pour tous les clients. Ajoutez /udp si nécessaire (HTTP/3).

bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Syntaxe complète : port/protocole depuis une IP ou un réseau.

Autoriser un port custom

Autorise uniquement l'IP 203.0.113.10 à accéder à PostgreSQL (port 5432).

bash
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp

Bloquer explicitement un service

Interdit SMTP sortant/entrant si vous ne souhaitez pas d'envoi d'emails depuis ce serveur.

bash
sudo ufw deny 25/tcp

Limiter applique une politique avec rate limiting (connexion syn) utile pour SSH.

Limiter un service critique

Bloque les IP effectuant >6 connexions SSH en 30 secondes. Le flag comment ajoute une note visible dans le status.

bash
sudo ufw limit ssh comment 'Anti brute force SSH'
🧰

Gestion avancée des règles

Manipuler les règles numérotées, insérer à un index précis et créer des profils applicatifs.

UFW stocke ses règles avec un ID. Vous pouvez les insérer à une position précise, supprimer par numéro et utiliser des fichiers d'applications dans /etc/ufw/applications.d/.

Lister avec numéros

Affiche toutes les règles avec un index. Utile pour supprimer la règle n°2 : sudo ufw delete 2.

bash
sudo ufw status numbered

Insertion à un index donné

Ajoute l'autorisation du port 8443 en tête de liste pour qu'elle soit évaluée avant les autres règles.

bash
sudo ufw insert 1 allow 8443/tcp

Les profils permettent de regrouper plusieurs ports/protocoles sous un nom unique.

Créer un profil applicatif personnalisé

Une fois le fichier créé : sudo ufw app update Devoups API && sudo ufw allow "Devoups API".

bash
sudo nano /etc/ufw/applications.d/devoups.ini

[Devoups API]
title=Devoups API
description=API Fastify (HTTP/HTTPS)
ports=8080/tcp

Sauvegarder et restaurer les règles

Copiez ces fichiers pour conserver vos règles IPv4/IPv6. Restaurez-les avant un ufw reload.

bash
sudo cp /etc/ufw/user.rules ~/backup-user.rules
sudo cp /etc/ufw/user6.rules ~/backup-user6.rules
📦

Profils applicatifs intégrés

Utiliser les définitions fournies par les paquets (OpenSSH, Nginx, etc.).

De nombreux paquets installent des profils dans /etc/ufw/applications.d/. Utilisez-les pour éviter les erreurs de port ou de protocole.

Lister les profils disponibles

Affiche tous les profils détectés. Exemple : OpenSSH, Nginx Full, Apache Secure.

bash
sudo ufw app list

Afficher le détail d'un profil

Montre les ports couverts (80,443) et la description. Vérifiez avant d'autoriser.

bash
sudo ufw app info 'Nginx Full'

Autoriser via un profil

Crée les règles nécessaires d'un coup (HTTP & HTTPS). Utile après une installation Nginx/Apache.

bash
sudo ufw allow 'Nginx Full'
📊

Surveillance et journalisation

Contrôler l'activité du firewall et analyser les logs pour détecter les anomalies.

UFW peut enregistrer les connexions permises/refusées dans /var/log/ufw.log. Combinez-le avec journalctl pour suivre le service.

Activer/désactiver le logging

Niveaux disponibles : off, low, medium, high, full. Utilisez high en production pour limiter le bruit.

bash
sudo ufw logging on
sudo ufw logging high

Suivre les logs en temps réel

Affiche les paquets bloqués/acceptés. Combinez avec grep 'BLOCK' pour isoler les refus.

bash
sudo tail -f /var/log/ufw.log

Statut détaillé

Montre l'état du logging, IPv6 et chaque règle avec commentaire. Idéal pour un audit rapide.

bash
sudo ufw status verbose

Vérifier le service systemd

Permet de diagnostiquer un échec au démarrage ou des erreurs d'application des règles.

bash
sudo systemctl status ufw
sudo journalctl -u ufw -n 50
🩺

Dépannage et bonnes pratiques

Diagnostiquer les blocages, gérer IPv6 et appliquer des modifications sûres.

En cas de blocage réseau, le plus sûr est de désactiver temporairement UFW, corriger la règle puis réactiver. Travaillez si possible depuis une console locale ou un accès secondaire.

Désactiver temporairement

Désactive toutes les règles mais conserve la configuration. Réactivez avec sudo ufw enable.

bash
sudo ufw disable

Tester une règle sans la rendre persistante

Le flag --dry-run affiche la règle générée sans l'appliquer. Idéal pour valider la syntaxe.

bash
sudo ufw --dry-run allow 9000/tcp

Assurez-vous que la configuration IPv6 est alignée avec IPv4 si votre serveur l'utilise.

Gérer IPv6

Active la prise en charge IPv6. Sans cela, seules les règles IPv4 sont appliquées.

bash
sudo nano /etc/default/ufw
IPV6=yes
sudo ufw reload

Redémarrer UFW proprement

Recharge toutes les règles. Utilisez après modification manuelle des fichiers /etc/ufw/*.rules.

bash
sudo systemctl restart ufw