Skip to content
Learni
View all tutorials
Linux Sécurité

Comment maîtriser UFW Firewall en 2026

Introduction

UFW (Uncomplicated Firewall) est l'interface front-end la plus utilisée pour iptables sur les distributions Ubuntu et Debian en 2026. Contrairement à iptables pur, qui nécessite une syntaxe complexe, UFW simplifie la gestion des règles avec des commandes intuitives tout en offrant une puissance experte pour les environnements de production.

Pourquoi maîtriser UFW aujourd'hui ? Les attaques par DDoS, scans de ports et exploits zero-day explosent : 70% des breaches serveur proviennent de ports exposés (source : Verizon DBIR 2025). Ce tutoriel expert vous guide de l'installation à des configurations avancées comme les chaînes personnalisées, le logging structuré et l'intégration IPv6. Imaginez votre serveur comme une forteresse : UFW en est les portes verrouillées avec des pièges pour les intrus.

À la fin, vous saurez déployer une politique zero-trust, auditer les logs en temps réel et restaurer des backups atomiques. Prêt pour 1500+ mots d'action pure ? (128 mots)

Prérequis

  • Serveur Ubuntu 24.04 LTS ou Debian 13+ (root ou sudo)
  • Accès SSH stable (port 22 ouvert temporairement)
  • Connaissances avancées en réseaux TCP/UDP/ICMP
  • Outils : netstat, tcpdump pour vérification
  • Backup de /etc/ufw/ avant toute manip

Installation et activation d'UFW

install-ufw.sh
#!/bin/bash

# Mise à jour des paquets
apt update && apt upgrade -y

# Installation d'UFW
apt install ufw -y

# Activer IPv6 (essentiel pour 2026)
sed -i 's/IPV6=no/IPV6=yes/' /etc/default/ufw

# Politique par défaut : refuser incoming, autoriser outgoing
ufw default deny incoming
ufw default allow outgoing

# Autoriser SSH pour éviter le lockout
ufw allow OpenSSH

# Activer UFW (répond 'y')
ufw --force enable

# Vérifier statut
ufw status verbose

Ce script installe UFW, active IPv6 via sed pour une compatibilité moderne, définit des politiques par défaut sécurisées (deny in / allow out) et ouvre SSH pour prévenir les blocages. L'option --force réactive sans prompt. Vérifiez toujours avec ufw status verbose : To=Action from chaîne confirme le bon démarrage. Piège : sans allow OpenSSH, vous perdez l'accès SSH.

Vérification des bases et premiers tests

Après exécution, ufw status verbose affiche les règles actives, logging et limites. Testez avec nmap -p 1-1000 votre-ip depuis une machine externe : seuls les ports autorisés (22/SSH) répondent. Analogie : UFW est comme un portier qui filtre les invités indésirables par défaut.

Règles basiques pour services web

regles-web.sh
#!/bin/bash

# Autoriser HTTP/HTTPS (ports 80/443)
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 'Nginx Full'  # Si Nginx installé

# Autoriser un range de ports pour un cluster (ex: 3000-3010)
ufw allow 3000:3010/tcp

# Refuser explicitement un port sensible (ex: RDP 3389)
ufw deny 3389/tcp

# Supprimer une règle par numéro (vérifiez avec ufw status numbered)
# ufw delete 3

# Recharger pour appliquer
ufw reload

# Statut numéroté pour gestion
ufw status numbered

Ces règles ouvrent les ports web standards et un range pour microservices, tout en bloquant explicitement les risques comme RDP. Nginx Full est un alias prédéfini combinant 80/443. Utilisez status numbered pour supprimer précisément (ex: ufw delete 3). reload applique sans downtime. Piège : oublier tcp expose UDP inutilement.

Gestion des règles par interface et IP

Règles conditionnelles : Limitez à eth0 ou une IP spécifique. Exemple : ufw allow from 192.168.1.100 to any port 22 ne permet SSH qu'à un bastion. Pour multi-interfaces (cloud), spécifiez in on eth0. Testez avec ufw status filtré.

Règles avancées : IP, interfaces et rate limiting

regles-avancees.sh
#!/bin/bash

# Autoriser depuis IP spécifique (bastion SSH)
ufw allow from 192.168.1.100 to any port 22 proto tcp

# Limiter connexions SSH (3/minute)
ufw limit OpenSSH

# Règle sur interface (ex: lo pour loopback, eth0 pour public)
ufw allow in on lo
ufw deny in on eth1  # Bloquer interface privée

# Chaîne personnalisée pour DMZ
ufw route allow in on eth0 out on eth1

# Appliquer et vérifier logging
ufw reload
echo "[*] Test rate limit: ssh depuis autre IP >3x/min devrait fail"
ufw status numbered

Ici, from IP restreint SSH à un sous-réseau sûr, limit implémente rate-limiting anti-brute-force (défaut 6/30s modifiable dans /etc/ufw/user.limit). in on cible les interfaces NIC. Les routes inter-chaînes isolent DMZ. Rechargez toujours. Piège : rate-limit ne s'applique pas sans limit explicite sur SSH.

Logging et monitoring en temps réel

Activez les logs avec ufw logging high (niveaux : low/off/high/full). Les événements atterrissent dans /var/log/ufw.log. Surveillez avec tail -f /var/log/ufw.log | grep BLOCK. Intégrez à ELK ou Fail2Ban pour alertes automatisées.

Activation du logging et IPv6

logging-ipv6.sh
#!/bin/bash

# Logging avancé (high = DROP+REJECT)
ufw logging high

# Règles IPv6 exemples
ufw allow 80/tcp  # Applique aussi IPv6
ufw v6 allow from 2001:db8::/32 to any port 443

# Bloquer IPv6 global sauf loopback
ip6tables -P INPUT DROP
ip6tables -A INPUT -i lo -j ACCEPT
ufw reload

# Vérifier logs et statut IPv6
ufw status logged
journalctl -u ufw -f  # Alternative systemd

tail -f /var/log/ufw.log

Logging 'high' capture tous les drops/rejects avec détails (IP, port, proto). Règles IPv6 sont auto-activées ; spécifiez v6 pour granularité. journalctl est moderne pour systemd. Lancez tail en fond pour monitorer live. Piège : sans IPv6=yes, les règles v6 sont ignorées, exposant à IPv6 scans.

Backup et reset pour prod

Sauvegarde : ufw show raw > backup.rules exporte tout. Restore : ufw reset && ufw --force enable puis reimport. En prod, automatisez via cron.

Backup, restore et reset complet

backup-reset.sh
#!/bin/bash

# Backup complet (rules + raw + defaults)
ufw show raw > /root/ufw-backup-$(date +%Y%m%d).rules
cp /etc/default/ufw /root/
cp /etc/ufw/* /root/ufw-backup/ -r

tar czf ufw-backup-$(date +%Y%m%d).tar.gz /root/ufw-backup/

# Reset total (désactive et purge)
ufw --force reset

# Restore exemple
dpkg-reconfigure ufw  # Interactive
# Ou manual: ufw deny incoming && ufw allow OpenSSH && ufw enable

# Vérif
ufw show added
ls -la /root/ufw-backup*

Ce script backup tout (raw rules pour iptables sous-jacent), crée un tar.gz versionné. reset purge sans mercy (réautorisez SSH !). Restore via dpkg-reconfigure ou manual. show added liste vos ajouts. Piège : reset sans backup = firewall vierge, incoming tout ouvert temporairement.

Bonnes pratiques

  • Politique par défaut deny/allow : Bloquez tout incoming sauf explicite.
  • Rate-limit SSH + Fail2Ban : ufw limit SSH + install fail2ban.
  • Logging + rotation : logrotate sur /var/log/ufw.log, alertes via Prometheus.
  • Test en staging : ufw simulate ADD RULE avant apply.
  • Audit mensuel : ufw show raw | grep -v ACCEPT pour règles orphelines.

Erreurs courantes à éviter

  • Lockout SSH : Toujours allow OpenSSH avant enable.
  • Oubli IPv6 : Vérifiez IPV6=yes ; testez avec nmap -6.
  • Reload manquant : Règles en mémoire non persistées sans ufw reload.
  • Logging off : Par défaut low ; montez à high pour forensics post-breach.

Pour aller plus loin

Plongez dans iptables natif avec iptables -L -nv -x. Intégrez UFW à Ansible pour IaC : rôle community.general.ufw.

Découvrez nos formations Linux Sécurité avancée ou Docker + UFW.

Ressources : Doc UFW officielle, nftables migration pour post-2026.