## Table des matières 1. [Introduction et Concepts](#introduction-et-concepts) 2. [Architecture du Pare-feu](#architecture-du-pare-feu) 3. [Prérequis](#prérequis) 4. [Installation](#installation) 5. [Configuration de Base](#configuration-de-base) 6. [Règles Avancées](#règles-avancées) 7. [Gestion des Règles](#gestion-des-règles) 8. [Exemples de Configurations](#exemples-de-configurations) 9. [Monitoring et Logs](#monitoring-et-logs) 10. [Dépannage](#dépannage) 11. [Bonnes Pratiques](#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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ] [to ] [port ] [proto ] ┌───────────────────────────────────────────────────────────────────────────┐ │ │ │ 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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) │ └────────────────────────┘ ``` ```bash # 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 │ │ │ │ │ │ ✗ │ └─────────────┘ └─────────────┘ └─────────────┘ ``` ```bash # 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) │ └────────────────────────┘ ``` ```bash # 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) │ └───────────┘ └───────────┘ └───────────┘ ``` ```bash # 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 ```bash # Activer la journalisation sudo ufw logging on # Niveaux disponibles : off, low, medium, high, full sudo ufw logging medium ``` ### Consulter les Logs ```bash # 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 ```bash # 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 ``` ```bash # Éditer la configuration Docker sudo nano /etc/docker/daemon.json ``` ```json { "iptables": false } ``` ```bash # Redémarrer Docker sudo systemctl restart docker ``` ### Commandes de Diagnostic ```bash # 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.