Table des matières

  1. Introduction et Concepts
  2. Architecture du Pare-feu
  3. Prérequis
  4. Installation
  5. Configuration de Base
  6. Règles Avancées
  7. Gestion des Règles
  8. Exemples de Configurations
  9. Monitoring et Logs
  10. Dépannage
  11. Bonnes Pratiques

Introduction et Concepts

Qu'est-ce qu'UFW ?

UFW (Uncomplicated Firewall) est une interface simplifiée pour gérer les règles iptables sur Linux. Il permet de contrôler le trafic réseau entrant et sortant de votre serveur de manière intuitive.

Pourquoi utiliser un pare-feu ?

┌─────────────────────────────────────────────────────────────────────────────┐
│                    POURQUOI UN PARE-FEU EST ESSENTIEL                       │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
   ┌───────────┐          ┌───────────┐          ┌───────────┐
   │  Trafic   │          │  Trafic   │          │  Trafic   │
   │ Légitime  │          │  Suspect  │          │ Malveillant│
   │  (HTTP)   │          │  (Scan)   │          │ (Attaque) │
   └─────┬─────┘          └─────┬─────┘          └─────┬─────┘
         │                      │                      │
         └──────────────────────┼──────────────────────┘
                                │
                                ▼
                   ┌────────────────────────┐
                   │                        │
                   │    🛡️  UFW FIREWALL   │
                   │                        │
                   │  ┌──────────────────┐  │
                   │  │ Règle 1: SSH ✓   │  │
                   │  │ Règle 2: HTTP ✓  │  │
                   │  │ Règle 3: HTTPS ✓ │  │
                   │  │ Défaut: DENY ✗   │  │
                   │  └──────────────────┘  │
                   │                        │
                   └───────────┬────────────┘
                               │
              ┌────────────────┼────────────────┐
              │                │                │
              ▼                ▼                ▼
         ┌────────┐       ┌────────┐       ┌────────┐
         │  ✓     │       │  ✗     │       │  ✗     │
         │ Accepté│       │ Bloqué │       │ Bloqué │
         └────────┘       └────────┘       └────────┘

Architecture du Pare-feu

Position d'UFW dans la Stack Réseau

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ARCHITECTURE UFW / IPTABLES / NETFILTER                  │
└─────────────────────────────────────────────────────────────────────────────┘

     APPLICATIONS (Couche 7)
     ───────────────────────
           │
           │   ┌─────────────────────────────────────────────────────┐
           │   │                      ESPACE UTILISATEUR             │
           │   │                                                     │
           │   │    ┌─────────────────────────────────────────┐      │
           │   │    │              UFW (Frontend)             │      │
           │   │    │                                         │      │
           │   │    │  • Interface simplifiée                 │      │
           │   │    │  • Commandes intuitives                 │      │
           │   │    │  • Gestion des profils                  │      │
           │   │    └──────────────────┬──────────────────────┘      │
           │   │                       │                             │
           │   │                       ▼                             │
           │   │    ┌─────────────────────────────────────────┐      │
           │   │    │           IPTABLES (Backend)            │      │
           │   │    │                                         │      │
           │   │    │  • Tables: filter, nat, mangle          │      │
           │   │    │  • Chaînes: INPUT, OUTPUT, FORWARD      │      │
           │   │    │  • Règles détaillées                    │      │
           │   │    └──────────────────┬──────────────────────┘      │
           │   │                       │                             │
           │   └───────────────────────┼─────────────────────────────┘
           │                           │
           │   ════════════════════════╪════════════════════════════════
           │                           │
           │   ┌───────────────────────┼─────────────────────────────┐
           │   │                       ▼           ESPACE NOYAU      │
           │   │    ┌─────────────────────────────────────────┐      │
           │   │    │         NETFILTER (Framework)           │      │
           │   │    │                                         │      │
           │   │    │  • Hooks dans la stack réseau           │      │
           │   │    │  • Filtrage au niveau paquet            │      │
           │   │    │  • NAT, Connection tracking             │      │
           │   │    └──────────────────┬──────────────────────┘      │
           │   │                       │                             │
           │   └───────────────────────┼─────────────────────────────┘
           │                           │
           ▼                           ▼
     ┌─────────────────────────────────────────────────────────────┐
     │                    INTERFACE RÉSEAU                         │
     │                    (eth0, ens3, etc.)                       │
     └─────────────────────────────────────────────────────────────┘
                                   │
                                   ▼
                              INTERNET

Flux de Traitement des Paquets

┌─────────────────────────────────────────────────────────────────────────────┐
│                    FLUX DE TRAITEMENT UFW                                   │
└─────────────────────────────────────────────────────────────────────────────┘

                           PAQUET ENTRANT
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │   CHAÎNE INPUT         │
                    └───────────┬────────────┘
                                │
          ┌─────────────────────┼─────────────────────┐
          │                     │                     │
          ▼                     ▼                     ▼
   ┌─────────────┐       ┌─────────────┐       ┌─────────────┐
   │ Règle 1     │       │ Règle 2     │       │ Règle N     │
   │ SSH (22)    │       │ HTTP (80)   │       │ Custom      │
   │             │       │             │       │             │
   │ Match? ─────┼──No──▶│ Match? ─────┼──No──▶│ Match? ─────┼──No──┐
   └──────┬──────┘       └──────┬──────┘       └──────┬──────┘      │
          │Yes                  │Yes                  │Yes          │
          ▼                     ▼                     ▼             │
   ┌─────────────┐       ┌─────────────┐       ┌─────────────┐      │
   │   ACCEPT    │       │   ACCEPT    │       │   ACCEPT    │      │
   └─────────────┘       └─────────────┘       └─────────────┘      │
                                                                    │
                                                                    ▼
                                                          ┌─────────────────┐
                                                          │ RÈGLE PAR DÉFAUT│
                                                          │                 │
                                                          │  deny incoming  │
                                                          │                 │
                                                          └────────┬────────┘
                                                                   │
                                                                   ▼
                                                          ┌─────────────────┐
                                                          │      DROP       │
                                                          │   (Paquet jeté) │
                                                          └─────────────────┘


                           PAQUET SORTANT
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │   CHAÎNE OUTPUT        │
                    └───────────┬────────────┘
                                │
                                ▼
                    ┌────────────────────────┐
                    │   RÈGLE PAR DÉFAUT     │
                    │   allow outgoing       │
                    └───────────┬────────────┘
                                │
                                ▼
                    ┌────────────────────────┐
                    │       ACCEPT           │
                    │  (Paquet autorisé)     │
                    └────────────────────────┘

Prérequis

Configuration Requise

┌─────────────────────────────────────────────────────────────────┐
│                    PRÉREQUIS SYSTÈME                            │
├─────────────────────┬───────────────────────────────────────────┤
│  Élément            │  Requis                                   │
├─────────────────────┼───────────────────────────────────────────┤
│  Système            │  Ubuntu 18.04+ / Debian 9+                │
│  Accès              │  root ou sudo                             │
│  Connexion          │  SSH active                               │
│  Réseau             │  Connexion Internet                       │
└─────────────────────┴───────────────────────────────────────────┘

Vérifications Préalables

# Vérifier la distribution
cat /etc/os-release

# Vérifier les droits sudo
sudo whoami

# Vérifier la connexion SSH actuelle
who

# Vérifier l'IP du serveur
ip addr show

Installation

Installation sur Ubuntu/Debian

# Mettre à jour les dépôts
sudo apt update

# Installer UFW
sudo apt install ufw -y

# Vérifier l'installation
which ufw

Vérification du Statut Initial

# Vérifier le statut d'UFW
sudo ufw status

# Résultat attendu :
# Status: inactive
┌─────────────────────────────────────────────────────────────────────────────┐
│                    PROCESSUS D'INSTALLATION                                 │
└─────────────────────────────────────────────────────────────────────────────┘

    ┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
    │   apt       │     │   UFW       │     │  Fichiers   │     │   UFW       │
    │   update    │────▶│   install   │────▶│   Config    │────▶│   Ready     │
    └─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
                                                   │
                                                   ▼
                              ┌─────────────────────────────────────┐
                              │  /etc/ufw/                          │
                              │  ├── ufw.conf          (config)     │
                              │  ├── before.rules      (pré-règles) │
                              │  ├── after.rules       (post-règles)│
                              │  └── user.rules        (vos règles) │
                              └─────────────────────────────────────┘

Configuration de Base

⚠️ AVERTISSEMENT CRITIQUE

┌─────────────────────────────────────────────────────────────────────────────┐
│  ⚠️  ATTENTION - RISQUE DE PERTE D'ACCÈS                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  TOUJOURS autoriser le port SSH (22) AVANT d'activer UFW !                 │
│                                                                             │
│  Si vous activez UFW sans autoriser SSH, vous serez                        │
│  DÉFINITIVEMENT BLOQUÉ hors de votre serveur.                              │
│                                                                             │
│  Ordre obligatoire :                                                        │
│  1. sudo ufw allow 22/tcp                                                  │
│  2. sudo ufw enable                                                        │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

Étape 1 : Définir les Règles par Défaut

# Bloquer tout le trafic entrant par défaut
sudo ufw default deny incoming

# Autoriser tout le trafic sortant par défaut
sudo ufw default allow outgoing
┌─────────────────────────────────────────────────────────────────────────────┐
│                    RÈGLES PAR DÉFAUT                                        │
└─────────────────────────────────────────────────────────────────────────────┘

                    TRAFIC ENTRANT                    TRAFIC SORTANT
                    ──────────────                    ──────────────

                         │                                 │
                         ▼                                 ▼
                  ┌─────────────┐                   ┌─────────────┐
                  │   DENY      │                   │   ALLOW     │
                  │  (Bloquer)  │                   │ (Autoriser) │
                  └─────────────┘                   └─────────────┘
                         │                                 │
                         ▼                                 ▼
    ┌────────────────────────────────┐    ┌────────────────────────────────┐
    │ Seules les connexions          │    │ Toutes les connexions          │
    │ EXPLICITEMENT autorisées       │    │ sortantes sont permises        │
    │ peuvent passer                 │    │                                │
    └────────────────────────────────┘    └────────────────────────────────┘

Étape 2 : Autoriser les Services Essentiels

# SSH (OBLIGATOIRE - À faire en premier !)
sudo ufw allow 22/tcp

# HTTP (serveur web)
sudo ufw allow 80/tcp

# HTTPS (serveur web sécurisé)
sudo ufw allow 443/tcp

Étape 3 : Activer UFW

# Activer le pare-feu
sudo ufw enable

# Message affiché :
# Command may disrupt existing ssh connections. Proceed with operation (y|n)?
# Répondre : y

Étape 4 : Vérifier la Configuration

# Afficher le statut et les règles
sudo ufw status verbose
┌─────────────────────────────────────────────────────────────────────────────┐
│                    EXEMPLE DE SORTIE UFW STATUS                             │
└─────────────────────────────────────────────────────────────────────────────┘

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Règles Avancées

Syntaxe des Commandes

┌─────────────────────────────────────────────────────────────────────────────┐
│                    SYNTAXE DES RÈGLES UFW                                   │
└─────────────────────────────────────────────────────────────────────────────┘

  sudo ufw [allow|deny|reject] [from <source>] [to <dest>] [port <port>] [proto <protocol>]

  ┌───────────────────────────────────────────────────────────────────────────┐
  │                                                                           │
  │  Exemples de syntaxe :                                                    │
  │                                                                           │
  │  ufw allow 22                    → Autorise le port 22 (TCP+UDP)          │
  │  ufw allow 22/tcp                → Autorise le port 22 TCP uniquement     │
  │  ufw allow from 192.168.1.0/24   → Autorise un sous-réseau                │
  │  ufw deny 3306                   → Bloque le port 3306                    │
  │  ufw allow from 10.0.0.5 to any port 22  → IP spécifique vers port       │
  │                                                                           │
  └───────────────────────────────────────────────────────────────────────────┘

Autoriser un Port Spécifique

# Port TCP
sudo ufw allow 8080/tcp

# Port UDP
sudo ufw allow 53/udp

# Port TCP et UDP
sudo ufw allow 3478

# Plage de ports
sudo ufw allow 6000:6007/tcp

Autoriser une IP Spécifique

# Autoriser toutes les connexions depuis une IP
sudo ufw allow from 192.168.1.100

# Autoriser une IP vers un port spécifique
sudo ufw allow from 192.168.1.100 to any port 22

# Autoriser un sous-réseau
sudo ufw allow from 10.0.0.0/8

# Autoriser un sous-réseau vers un port spécifique
sudo ufw allow from 192.168.1.0/24 to any port 3306
┌─────────────────────────────────────────────────────────────────────────────┐
│                    SCHÉMA RÈGLES PAR IP                                     │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
         ┌───────────────────────┼───────────────────────┐
         │                       │                       │
         ▼                       ▼                       ▼
  ┌─────────────┐         ┌─────────────┐         ┌─────────────┐
  │ 192.168.1.100│        │ 10.0.0.50   │         │ Autres IPs  │
  │ (Autorisée) │         │ (Autorisée) │         │ (Non listées│
  └──────┬──────┘         └──────┬──────┘         └──────┬──────┘
         │                       │                       │
         ▼                       ▼                       ▼
  ┌─────────────┐         ┌─────────────┐         ┌─────────────┐
  │ Port 22 ✓   │         │ Port 3306 ✓ │         │ Tous ports  │
  │ Port 80 ✓   │         │             │         │     ✗       │
  │ Port 443 ✓  │         │             │         │             │
  └─────────────┘         └─────────────┘         └─────────────┘

Bloquer une IP ou un Port

# Bloquer une IP spécifique
sudo ufw deny from 192.168.1.200

# Bloquer une IP vers un port
sudo ufw deny from 192.168.1.200 to any port 22

# Bloquer un port
sudo ufw deny 3306/tcp

# Rejeter (avec notification à l'émetteur)
sudo ufw reject 23/tcp
┌─────────────────────────────────────────────────────────────────────────────┐
│                    DENY vs REJECT                                           │
└─────────────────────────────────────────────────────────────────────────────┘

     DENY (DROP)                              REJECT
     ───────────                              ──────

  ┌─────────────┐                        ┌─────────────┐
  │   Paquet    │                        │   Paquet    │
  │   entrant   │                        │   entrant   │
  └──────┬──────┘                        └──────┬──────┘
         │                                      │
         ▼                                      ▼
  ┌─────────────┐                        ┌─────────────┐
  │    UFW      │                        │    UFW      │
  │   (DENY)    │                        │  (REJECT)   │
  └──────┬──────┘                        └──────┬──────┘
         │                                      │
         ▼                                      ▼
  ┌─────────────┐                        ┌─────────────┐
  │   Paquet    │                        │   Message   │
  │   ignoré    │                        │   ICMP      │
  │  silencieux │                        │  "refused"  │
  └─────────────┘                        └──────┬──────┘
                                                │
         Émetteur ne sait                       ▼
         pas ce qui s'est              Émetteur reçoit
         passé (timeout)               une notification

Gestion des Règles

Lister les Règles

# Statut simple
sudo ufw status

# Statut avec numéros de règles
sudo ufw status numbered

# Statut détaillé
sudo ufw status verbose

Supprimer une Règle

# Méthode 1 : Par numéro (recommandé)
sudo ufw status numbered
# Puis :
sudo ufw delete 3

# Méthode 2 : Par règle exacte
sudo ufw delete allow 8080/tcp
┌─────────────────────────────────────────────────────────────────────────────┐
│                    SUPPRESSION DE RÈGLE PAR NUMÉRO                          │
└─────────────────────────────────────────────────────────────────────────────┘

$ sudo ufw status numbered

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere        ◀── À supprimer
[ 4] 443/tcp                    ALLOW IN    Anywhere

$ sudo ufw delete 3

Deleting:
 allow 8080/tcp
Proceed with operation (y|n)? y
Rule deleted

Réinitialiser UFW

# Réinitialiser toutes les règles (ATTENTION !)
sudo ufw --force reset

# Cela :
# - Désactive UFW
# - Supprime toutes les règles
# - Remet les paramètres par défaut

Recharger les Règles

# Recharger la configuration
sudo ufw reload

Exemples de Configurations

Configuration Serveur Web

┌─────────────────────────────────────────────────────────────────────────────┐
│                    CONFIGURATION SERVEUR WEB                                │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │         UFW            │
                    │                        │
                    │  ┌──────────────────┐  │
                    │  │ Port 22  (SSH)  ✓│  │
                    │  │ Port 80  (HTTP) ✓│  │
                    │  │ Port 443 (HTTPS)✓│  │
                    │  │ Autres ports    ✗│  │
                    │  └──────────────────┘  │
                    │                        │
                    └───────────┬────────────┘
                                │
                                ▼
                    ┌────────────────────────┐
                    │    SERVEUR WEB         │
                    │    (Nginx/Apache)      │
                    └────────────────────────┘
# Configuration serveur web
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Configuration Base de Données

┌─────────────────────────────────────────────────────────────────────────────┐
│                    CONFIGURATION BASE DE DONNÉES                            │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
        ┌────────────────────────┼────────────────────────┐
        │                        │                        │
        ▼                        ▼                        ▼
 ┌─────────────┐          ┌─────────────┐          ┌─────────────┐
 │ Admin       │          │ Serveur Web │          │ Autres IPs  │
 │192.168.1.100│          │ 10.0.0.0/8  │          │             │
 └──────┬──────┘          └──────┬──────┘          └──────┬──────┘
        │                        │                        │
        ▼                        ▼                        ▼
 ┌─────────────┐          ┌─────────────┐          ┌─────────────┐
 │ SSH (22)  ✓ │          │MySQL (3306)✓│          │ Tous ports  │
 │             │          │             │          │     ✗       │
 └─────────────┘          └─────────────┘          └─────────────┘
# Configuration serveur de base de données
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow from 10.0.0.0/8 to any port 3306
sudo ufw enable

Configuration Serveur de Jeu (Minecraft)

┌─────────────────────────────────────────────────────────────────────────────┐
│                    CONFIGURATION SERVEUR MINECRAFT                          │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │         UFW            │
                    │                        │
                    │  ┌──────────────────┐  │
                    │  │ Port 22    (SSH) ✓│  │
                    │  │ Port 25565 (MC)  ✓│  │
                    │  │ Autres ports     ✗│  │
                    │  └──────────────────┘  │
                    │                        │
                    └───────────┬────────────┘
                                │
                                ▼
                    ┌────────────────────────┐
                    │   SERVEUR MINECRAFT    │
                    │      (Java/Bedrock)    │
                    └────────────────────────┘
# Configuration serveur Minecraft
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 25565/tcp   # Minecraft Java
# sudo ufw allow 19132/udp # Minecraft Bedrock (si nécessaire)
sudo ufw enable

Configuration Multi-Services

┌─────────────────────────────────────────────────────────────────────────────┐
│                    CONFIGURATION MULTI-SERVICES                             │
└─────────────────────────────────────────────────────────────────────────────┘

                              INTERNET
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │               UFW                    │
              │                                      │
              │  Ports ouverts :                     │
              │  ┌────────────────────────────────┐  │
              │  │ 22/tcp   - SSH                 │  │
              │  │ 80/tcp   - HTTP                │  │
              │  │ 443/tcp  - HTTPS               │  │
              │  │ 25/tcp   - SMTP                │  │
              │  │ 587/tcp  - Submission          │  │
              │  │ 993/tcp  - IMAPS               │  │
              │  │ 3306/tcp - MySQL (IP limitée)  │  │
              │  └────────────────────────────────┘  │
              │                                      │
              └──────────────────┬───────────────────┘
                                 │
        ┌────────────────────────┼────────────────────────┐
        ▼                        ▼                        ▼
  ┌───────────┐            ┌───────────┐            ┌───────────┐
  │   Nginx   │            │  Postfix  │            │   MySQL   │
  │ (80, 443) │            │ (25, 587) │            │  (3306)   │
  └───────────┘            └───────────┘            └───────────┘
# Configuration multi-services
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH
sudo ufw allow 22/tcp

# Web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Mail
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 993/tcp

# Base de données (accès restreint)
sudo ufw allow from 10.0.0.0/8 to any port 3306

sudo ufw enable

Monitoring et Logs

Activer les Logs

# Activer la journalisation
sudo ufw logging on

# Niveaux disponibles : off, low, medium, high, full
sudo ufw logging medium

Consulter les Logs

# Voir les logs en temps réel
sudo tail -f /var/log/ufw.log

# Voir les 50 dernières entrées
sudo tail -n 50 /var/log/ufw.log

# Rechercher des événements spécifiques
sudo grep "BLOCK" /var/log/ufw.log | tail -20
┌─────────────────────────────────────────────────────────────────────────────┐
│                    EXEMPLE DE LOG UFW                                       │
└─────────────────────────────────────────────────────────────────────────────┘

Jan 15 10:23:45 serveur kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... 
    SRC=192.168.1.200 DST=10.0.0.5 LEN=60 TOS=0x00 PREC=0x00 TTL=64 
    ID=12345 DF PROTO=TCP SPT=54321 DPT=3306 WINDOW=65535 RES=0x00 SYN URGP=0

    ┌─────────────────────────────────────────────────────────────────────┐
    │ Décodage :                                                          │
    │                                                                     │
    │ [UFW BLOCK]     → Action effectuée (paquet bloqué)                 │
    │ IN=eth0         → Interface d'entrée                                │
    │ SRC=192.168.1.200 → IP source                                      │
    │ DST=10.0.0.5    → IP destination                                   │
    │ PROTO=TCP       → Protocole                                        │
    │ DPT=3306        → Port destination (MySQL)                         │
    │ SYN             → Type de paquet (tentative de connexion)          │
    └─────────────────────────────────────────────────────────────────────┘

Dépannage

Je suis Bloqué Hors du Serveur

┌─────────────────────────────────────────────────────────────────────────────┐
│                    PROCÉDURE DE RÉCUPÉRATION                                │
└─────────────────────────────────────────────────────────────────────────────┘

                    ┌─────────────────────┐
                    │ Accès SSH bloqué ?  │
                    └──────────┬──────────┘
                               │
              ┌────────────────┴────────────────┐
              │                                 │
              ▼                                 ▼
     ┌─────────────────┐               ┌─────────────────┐
     │ Console VNC/KVM │               │ Contacter       │
     │ disponible ?    │               │ l'hébergeur     │
     └────────┬────────┘               └─────────────────┘
              │
              ▼
     ┌─────────────────┐
     │ Se connecter    │
     │ via VNC/KVM     │
     └────────┬────────┘
              │
              ▼
     ┌─────────────────┐
     │ sudo ufw disable│
     └────────┬────────┘
              │
              ▼
     ┌─────────────────┐
     │ Reconfigurer    │
     │ les règles      │
     └─────────────────┘

Les Règles ne Fonctionnent Pas

# Vérifier que UFW est actif
sudo ufw status

# Vérifier l'ordre des règles
sudo ufw status numbered

# Recharger les règles
sudo ufw reload

# Vérifier les règles iptables sous-jacentes
sudo iptables -L -n -v

UFW et Docker

┌─────────────────────────────────────────────────────────────────────────────┐
│                    PROBLÈME UFW + DOCKER                                    │
└─────────────────────────────────────────────────────────────────────────────┘

  Docker modifie directement iptables, contournant UFW !

                    ┌──────────────────┐
                    │     Docker       │
                    │  (port mapping)  │
                    └────────┬─────────┘
                             │
                             │  Modifie directement
                             ▼
                    ┌──────────────────┐
                    │    iptables      │◀──── UFW n'est pas consulté !
                    │   (DOCKER chain) │
                    └──────────────────┘

  SOLUTION : Désactiver la gestion iptables de Docker
# Éditer la configuration Docker
sudo nano /etc/docker/daemon.json
{
  "iptables": false
}
# Redémarrer Docker
sudo systemctl restart docker

Commandes de Diagnostic

# Vérifier les connexions actives
sudo ss -tulpn

# Vérifier les règles iptables
sudo iptables -L -n

# Tester un port spécifique
nc -zv localhost 80

# Vérifier les processus écoutant
sudo netstat -tlnp

Bonnes Pratiques

Checklist de Sécurité

┌─────────────────────────────────────────────────────────────────────────────┐
│                    CHECKLIST BONNES PRATIQUES UFW                           │
└─────────────────────────────────────────────────────────────────────────────┘

  ✅ TOUJOURS autoriser SSH avant d'activer UFW

  ✅ Principe du moindre privilège : n'ouvrir que les ports nécessaires

  ✅ Utiliser des règles par IP quand possible (plus sécurisé)

  ✅ Activer les logs pour surveiller le trafic bloqué

  ✅ Tester les règles avant de fermer la session SSH

  ✅ Documenter toutes les règles ajoutées

  ✅ Réviser régulièrement les règles (supprimer les obsolètes)

  ✅ Combiner avec fail2ban pour bloquer les attaques brute-force

  ✅ Utiliser reject pour les ports communs (feedback à l'attaquant)
     et deny pour les autres (mode furtif)

  ✅ Sauvegarder la configuration avant modification majeure

Ordre Recommandé des Règles

┌─────────────────────────────────────────────────────────────────────────────┐
│                    ORDRE DES RÈGLES (PRIORITÉ)                              │
└─────────────────────────────────────────────────────────────────────────────┘

    PRIORITÉ HAUTE
         │
         ▼
    ┌─────────────────────────────────────────┐
    │ 1. Règles DENY spécifiques (IP bloquées)│
    └─────────────────────────────────────────┘
         │
         ▼
    ┌─────────────────────────────────────────┐
    │ 2. Règles ALLOW spécifiques (IP whitelist)│
    └─────────────────────────────────────────┘
         │
         ▼
    ┌─────────────────────────────────────────┐
    │ 3. Règles de services (ports ouverts)   │
    └─────────────────────────────────────────┘
         │
         ▼
    ┌─────────────────────────────────────────┐
    │ 4. Règle par défaut (deny incoming)     │
    └─────────────────────────────────────────┘

    PRIORITÉ BASSE

Récapitulatif des Commandes

┌─────────────────────────────────────────────────────────────────────────────┐
│                    AIDE-MÉMOIRE COMMANDES UFW                               │
└─────────────────────────────────────────────────────────────────────────────┘

┌───────────────────────────────┬─────────────────────────────────────────────┐
│ Commande                      │ Description                                 │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw status               │ Afficher le statut                          │
│ sudo ufw status numbered      │ Afficher avec numéros                       │
│ sudo ufw status verbose       │ Afficher détaillé                           │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw enable               │ Activer le pare-feu                         │
│ sudo ufw disable              │ Désactiver le pare-feu                      │
│ sudo ufw reload               │ Recharger les règles                        │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw default deny incoming│ Bloquer entrant par défaut                  │
│ sudo ufw default allow outgoing│ Autoriser sortant par défaut               │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw allow 22/tcp         │ Autoriser un port                           │
│ sudo ufw deny 3306/tcp        │ Bloquer un port                             │
│ sudo ufw allow from IP        │ Autoriser une IP                            │
│ sudo ufw deny from IP         │ Bloquer une IP                              │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw delete 3             │ Supprimer règle n°3                         │
│ sudo ufw delete allow 80/tcp  │ Supprimer par règle                         │
├───────────────────────────────┼─────────────────────────────────────────────┤
│ sudo ufw --force reset        │ Réinitialiser tout                          │
│ sudo ufw logging on           │ Activer les logs                            │
└───────────────────────────────┴─────────────────────────────────────────────┘

FAQ

Q : Puis-je utiliser UFW avec un autre pare-feu ? R : Non, utilisez un seul pare-feu à la fois pour éviter les conflits.

Q : UFW fonctionne-t-il avec Docker ? R : Oui, mais nécessite une configuration spécifique (voir section Dépannage).

Q : Comment autoriser plusieurs ports ? R : Utilisez une plage (6000:6007/tcp) ou plusieurs commandes allow.

Q : UFW fonctionne-t-il sur CentOS/RHEL ? R : Oui, mais l'installation diffère. Préférez firewalld sur ces distributions.