Prendre rendez-vous
  1. Accueil
  2. /
  3. Blog
  4. /
  5. UFW et iptables 2026 : guide complet firewall Linux débutant à expert

Linux
Sécurité
Réseau

UFW et iptables 2026 : guide complet firewall Linux débutant à expert

23 janvier 2026

14 min de lecture

Sommaire
Comprendre les Firewalls Linux
UFW : Firewall Simplifié
Configuration Serveur Web avec UFW
iptables : Contrôle Avancé
Cas d'Usage Avancés
UFW vs iptables : Comparaison
Debugging et Troubleshooting
Sécurité et Bonnes Pratiques
Scripts Utiles
Conclusion

Le firewall est la première ligne de défense d'un serveur Linux. Ce guide couvre UFW (simple) et iptables (avancé) pour verrouiller vos serveurs.

Comprendre les Firewalls Linux

Qu'est-ce qu'un Firewall ?

Un firewall (pare-feu) filtre le trafic réseau entrant et sortant selon des règles définies.

Analogie : le firewall fonctionne comme un videur de boîte de nuit :

  • Liste blanche : qui peut entrer (IPs autorisées)
  • Liste noire : qui est banni (IPs bloquées)
  • Règles : port SSH ouvert seulement pour admins
Architecture Firewall Linux
┌────────────────────────────────────────┐
│         Applications                    │
│     (nginx, ssh, mysql, etc.)          │
└────────────────────────────────────────┘
              ↕
┌────────────────────────────────────────┐
│          Userspace Tools                │
│  ┌─────────┐         ┌──────────┐      │
│  │   UFW   │         │ firewalld│      │
│  │ (simple)│         │ (RedHat) │      │
│  └─────────┘         └──────────┘      │
│       ↕                    ↕            │
│  ┌─────────────────────────────┐       │
│  │       iptables              │       │
│  │     (legacy CLI)            │       │
│  └─────────────────────────────┘       │
└────────────────────────────────────────┘
              ↕
┌────────────────────────────────────────┐
│         Kernel Space                    │
│  ┌─────────────────────────────┐       │
│  │    Netfilter (nftables)     │       │
│  │  Framework de filtrage      │       │
│  └─────────────────────────────┘       │
└────────────────────────────────────────┘
              ↕
        [Réseau Physique]
Trois Niveaux d'Outils

1. UFW (Uncomplicated Firewall)

  • Interface simplifiée
  • Idéal débutants
  • Suffisant pour 90 % des cas

2. iptables

  • Contrôle granulaire
  • Syntaxe complexe
  • Pour administrateurs avancés

3. nftables

  • Remplaçant moderne d'iptables
  • Syntaxe améliorée
  • Kernel 3.13+ (2014)

UFW : Firewall Simplifié

Installation
# Debian/Ubuntu (souvent préinstallé)
sudo apt update
sudo apt install ufw

# Vérifier statut
sudo ufw status

# Activer au démarrage
sudo systemctl enable ufw
Commandes de Base
# Voir statut
sudo ufw status

# Activer firewall
sudo ufw enable

# Désactiver firewall
sudo ufw disable

# Recharger règles
sudo ufw reload

# Reset (supprimer toutes règles)
sudo ufw reset
Politique par Défaut

Concept : Que faire du trafic non explicitement autorisé/bloqué ?

# Bloquer tout entrant, autoriser tout sortant (RECOMMANDÉ)
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Bloquer tout (serveur très sécurisé)
sudo ufw default deny incoming
sudo ufw default deny outgoing

# Voir politique actuelle
sudo ufw status verbose
Autoriser Services Courants
# SSH (port 22)
sudo ufw allow ssh
# ou
sudo ufw allow 22

# HTTP (port 80)
sudo ufw allow http
# ou
sudo ufw allow 80

# HTTPS (port 443)
sudo ufw allow https
# ou
sudo ufw allow 443

# Combiner plusieurs
sudo ufw allow 80,443/tcp

# MySQL (port 3306)
sudo ufw allow 3306

# PostgreSQL (port 5432)
sudo ufw allow 5432
Règles Avancées UFW

Spécifier protocole :

# TCP uniquement
sudo ufw allow 22/tcp

# UDP uniquement
sudo ufw allow 53/udp

# Les deux
sudo ufw allow 80/tcp
sudo ufw allow 80/udp

Plages de ports :

# Ports 1000 à 2000
sudo ufw allow 1000:2000/tcp

# Utile pour FTP passif
sudo ufw allow 30000:31000/tcp

Depuis une IP spécifique :

# Autoriser SSH depuis IP admin
sudo ufw allow from 203.0.113.50 to any port 22

# Autoriser tout depuis IP de confiance
sudo ufw allow from 203.0.113.100

# Autoriser depuis subnet
sudo ufw allow from 192.168.1.0/24 to any port 22

Vers une interface spécifique :

# Autoriser SSH seulement sur eth0
sudo ufw allow in on eth0 to any port 22

# Bloquer trafic externe sur interface interne
sudo ufw deny in on eth1

Applications prédéfinies :

# Lister applications disponibles
sudo ufw app list

# Nginx Full (HTTP + HTTPS)
sudo ufw allow 'Nginx Full'

# OpenSSH
sudo ufw allow 'OpenSSH'

# Apache Full
sudo ufw allow 'Apache Full'

# Voir ports d'une app
sudo ufw app info 'Nginx Full'
Bloquer et Supprimer
# Bloquer port
sudo ufw deny 3306

# Bloquer IP
sudo ufw deny from 203.0.113.99

# Supprimer règle par numéro
sudo ufw status numbered
sudo ufw delete 2

# Supprimer règle par description
sudo ufw delete allow 80/tcp

# Supprimer règle complexe
sudo ufw delete allow from 203.0.113.50 to any port 22
Logging
# Activer logs
sudo ufw logging on

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

# Voir logs
sudo tail -f /var/log/ufw.log

# Exemple log bloqué
[UFW BLOCK] IN=eth0 OUT= MAC=... SRC=203.0.113.99 DST=203.0.113.1 PROTO=TCP DPT=22

Configuration Serveur Web avec UFW

Exemple : Serveur LEMP
# Reset pour commencer propre
sudo ufw reset

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

# SSH (CRITIQUE : autoriser avant d'activer!)
sudo ufw allow 22/tcp

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

# Activer
sudo ufw enable

# Vérifier
sudo ufw status numbered
Exemple : Serveur SSH Sécurisé
# Autoriser SSH seulement depuis IPs admins
sudo ufw allow from 203.0.113.50 to any port 22
sudo ufw allow from 203.0.113.51 to any port 22

# Limiter tentatives SSH (rate limiting)
sudo ufw limit 22/tcp
# Bloque IP après 6 tentatives en 30 secondes

# Bloquer tout autre SSH
sudo ufw deny 22/tcp
Exemple : Serveur Base de Données
# MySQL accessible seulement depuis serveur web
sudo ufw allow from 192.168.1.10 to any port 3306

# PostgreSQL depuis subnet application
sudo ufw allow from 10.0.1.0/24 to any port 5432

iptables : Contrôle Avancé

Concepts Fondamentaux

Tables :

  • filter : Filtrage paquets (défaut)
  • nat : Translation d'adresses (NAT)
  • mangle : Modification paquets
  • raw : Exceptions au suivi de connexion

Chains (chaînes) :

  • INPUT : Trafic entrant
  • OUTPUT : Trafic sortant
  • FORWARD : Trafic traversant (routeur)

Actions (targets) :

  • ACCEPT : Accepter
  • DROP : Rejeter silencieusement
  • REJECT : Rejeter avec message
  • LOG : Logger
Syntaxe iptables de Base
iptables -A CHAIN -p PROTOCOLE --dport PORT -j ACTION

# -A : Append (ajouter)
# -I : Insert (insérer en début)
# -D : Delete (supprimer)
# -p : Protocol (tcp, udp, icmp)
# --dport : Destination port
# --sport : Source port
# -s : Source IP
# -d : Destination IP
# -i : Interface entrante
# -o : Interface sortante
# -j : Jump to target (action)
Commandes iptables Essentielles
# Lister toutes règles
sudo iptables -L -v -n

# Lister avec numéros
sudo iptables -L --line-numbers

# Lister table nat
sudo iptables -t nat -L -v -n

# Supprimer toutes règles (DANGER)
sudo iptables -F

# Supprimer règle spécifique
sudo iptables -D INPUT 3

# Politique par défaut
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Exemples iptables Basiques
# Autoriser SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Autoriser HTTP et HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Autoriser depuis IP spécifique
sudo iptables -A INPUT -s 203.0.113.50 -j ACCEPT

# Bloquer IP
sudo iptables -A INPUT -s 203.0.113.99 -j DROP

# Autoriser loopback
sudo iptables -A INPUT -i lo -j ACCEPT

# Autoriser connexions établies
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Configuration iptables Complète Serveur Web
#!/bin/bash
# firewall-web.sh

# Flush règles existantes
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Politique par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Connexions établies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Ping (ICMP)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# DNS (si serveur DNS local)
# iptables -A INPUT -p udp --dport 53 -j ACCEPT

# Log paquets rejetés
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-dropped: "

# Sauvegarder règles
iptables-save > /etc/iptables/rules.v4
Sauvegarder et Restaurer Règles
# Sauvegarder
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

# Restaurer
sudo iptables-restore < /etc/iptables/rules.v4

# Automatiser au démarrage (Debian/Ubuntu)
sudo apt install iptables-persistent

# Règles sauvegardées dans
/etc/iptables/rules.v4
/etc/iptables/rules.v6

# Update règles persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

Cas d'Usage Avancés

Rate Limiting (Protection DDoS)

UFW :

# Limiter SSH (6 connexions / 30 sec)
sudo ufw limit ssh

iptables :

# Limiter SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

# Limiter HTTP (20 req/sec par IP)
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
Port Knocking

Séquence secrète de ports pour ouvrir SSH. Pour une approche dédiée, consultez le guide port knocking :

# Port knocking avec iptables
# Frapper ports 7000, 8000, 9000 dans l'ordre ouvre SSH pendant 30s

iptables -N KNOCKING
iptables -N GATE1
iptables -N GATE2
iptables -N GATE3

# État initial
iptables -A INPUT -p tcp --dport 7000 -m recent --name knock1 --set -j DROP
iptables -A INPUT -p tcp --dport 8000 -m recent --name knock1 --rcheck -m recent --name knock2 --set -j DROP
iptables -A INPUT -p tcp --dport 9000 -m recent --name knock2 --rcheck -m recent --name knock3 --set -j DROP

# SSH ouvert si séquence complète
iptables -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 30 --name knock3 -j ACCEPT

# Alternative simple : knockd daemon
sudo apt install knockd
NAT et Port Forwarding

Activer forwarding :

# Temporaire
sudo sysctl -w net.ipv4.ip_forward=1

# Permanent
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

NAT (Masquerading) :

# Partager connexion Internet (routeur)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Port Forwarding :

# Rediriger port 8080 externe vers 80 interne
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

# Forward vers autre machine
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
Bloquer Pays (GeoIP)
# Installer module geoip
sudo apt install xtables-addons-common libtext-csv-xs-perl

# Télécharger base GeoIP
sudo mkdir -p /usr/share/xt_geoip
cd /usr/share/xt_geoip
sudo wget https://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
sudo tar -xzf all-zones.tar.gz

# Bloquer Chine et Russie (exemple)
iptables -A INPUT -m geoip --src-cc CN,RU -j DROP

# Autoriser seulement France
iptables -A INPUT -m geoip ! --src-cc FR -j DROP

UFW vs iptables : Comparaison

FeatureUFWiptables
Facilité⭐⭐⭐⭐⭐⭐⭐
Puissance⭐⭐⭐⭐⭐⭐⭐⭐
SyntaxeSimpleComplexe
Learning curve10 minutesPlusieurs heures
Use caseServeur web basiqueConfigurations avancées
Recommandé pourDébutants, VPS simpleExperts, routeurs, NAT

Quand utiliser UFW :

  • Serveur web/application simple
  • Premier firewall
  • Configuration rapide
  • Maintenance facile

Quand utiliser iptables :

  • Règles complexes
  • NAT/Routing
  • Rate limiting avancé
  • Contrôle granulaire

Debugging et Troubleshooting

UFW ne fonctionne pas
# 1. Vérifier service actif
sudo systemctl status ufw

# 2. Vérifier règles
sudo ufw status verbose

# 3. Voir logs
sudo tail -f /var/log/ufw.log

# 4. Tester port ouvert
sudo netstat -tlnp | grep :80
sudo ss -tlnp | grep :80

# 5. Tester depuis externe
# Sur autre machine
telnet SERVER_IP 80
nmap SERVER_IP
Bloqué hors SSH

Prévention :

# Toujours tester AVANT d'activer firewall
sudo ufw allow 22
sudo ufw enable

# Ou utiliser at pour désactiver auto
echo "ufw disable" | sudo at now + 5 minutes
# Si connexion perdue, firewall désactivé après 5min

Solution (accès physique/console requis) :

# Console serveur ou interface web hébergeur
sudo ufw disable
sudo ufw allow 22
sudo ufw enable
Ports semblent fermés malgré règles
# 1. Vérifier service écoute
sudo netstat -tlnp
sudo ss -tlnp

# 2. Vérifier ordre règles (iptables)
sudo iptables -L -n --line-numbers
# Règle DENY avant ALLOW = problème

# 3. Vérifier politique défaut
sudo ufw status verbose
sudo iptables -L -v

# 4. Logs firewall
sudo tail -f /var/log/ufw.log
sudo dmesg | grep -i iptables
Tester Règles Firewall
# Depuis serveur (test sortant)
curl -I https://google.com
ping 8.8.8.8

# Depuis externe (test entrant)
nmap -p 22,80,443 SERVER_IP

# Test spécifique
nc -zv SERVER_IP 80
telnet SERVER_IP 443

# Scanner complet
nmap -sV -p- SERVER_IP

Sécurité et Bonnes Pratiques

Règles de Base

✓ Toujours autoriser SSH AVANT d'activer firewall

sudo ufw allow 22
sudo ufw enable

✓ Principe du moindre privilège

# Bloquer par défaut, ouvrir le strict nécessaire
sudo ufw default deny incoming

✓ Rate limiting sur services publics

sudo ufw limit ssh

✓ Logger les connexions suspectes

sudo ufw logging medium

✓ Backup règles avant modifications

sudo iptables-save > /root/iptables-backup-$(date +%Y%m%d).rules
Erreurs Courantes

❌ Activer firewall sans autoriser SSH

# MAUVAIS
sudo ufw enable  # Bloqué!

# BON
sudo ufw allow 22
sudo ufw enable

❌ Ordre règles iptables

# MAUVAIS (deny avant allow)
iptables -A INPUT -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Jamais atteint!

# BON
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

❌ Oublier connexions établies

# MAUVAIS (bloque réponses)
iptables -P INPUT DROP

# BON
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Audit Firewall
#!/bin/bash
# firewall-audit.sh

echo "=== Firewall Audit ==="

# UFW
if command -v ufw > /dev/null; then
    echo "UFW Status:"
    sudo ufw status verbose
fi

# iptables
echo ""
echo "iptables Rules:"
sudo iptables -L -v -n

# Ports ouverts
echo ""
echo "Listening Ports:"
sudo netstat -tlnp

# Services exposés
echo ""
echo "Exposed Services:"
sudo nmap -sV localhost

Scripts Utiles

Script UFW Configuration Serveur Web
#!/bin/bash
# setup-ufw-web.sh

# Couleurs
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

echo -e "${GREEN}Configuration UFW pour serveur web${NC}"

# Vérifier UFW installé
if ! command -v ufw > /dev/null; then
    echo "Installation UFW..."
    sudo apt update
    sudo apt install -y ufw
fi

# Reset
read -p "Reset UFW? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    sudo ufw --force reset
fi

# Politique
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH
echo -e "${GREEN}Autoriser SSH...${NC}"
sudo ufw allow 22/tcp

# Web
echo -e "${GREEN}Autoriser HTTP/HTTPS...${NC}"
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Rate limiting SSH
sudo ufw limit 22/tcp

# Activer logging
sudo ufw logging medium

# Activer
sudo ufw --force enable

# Status
echo -e "${GREEN}Configuration terminée!${NC}"
sudo ufw status verbose

Conclusion

Un firewall verrouille un serveur Linux. Points clés :

Pour débutants : UFW

sudo ufw allow 22
sudo ufw allow 80,443/tcp
sudo ufw enable

Pour experts : iptables

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP

Bonnes pratiques :

  • ✓ Autoriser SSH avant activation (voir sécuriser SSH)
  • ✓ Bloquer par défaut (deny incoming)
  • ✓ Rate limiting services publics
  • ✓ Logger activité suspecte
  • ✓ Tester règles régulièrement

Compléments recommandés :

  • nftables avancé pour une granularité maximale
  • Fail2ban pour le blocage automatique d'IPs malveillantes
  • CrowdSec pour une protection collaborative

Ressources :

  • man ufw
  • man iptables
  • https://help.ubuntu.com/community/UFW

Ces commandes verrouillent n'importe quel serveur Linux.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets d'infrastructure et d'infogérance.

Contactez-nous

Articles similaires

nftables Avancé : Sets Dynamiques, Verdict Maps, Conntrack Zones et Rate Limiting par IP
Linux
Sécurité
Réseau

nftables Avancé : Sets Dynamiques, Verdict Maps, Conntrack Zones et Rate Limiting par IP

Vous connaissez nftables, mais vous n'utilisez probablement que 10% de ses capacités. Sets dynamiques avec timeout, verdict maps pour du routing intelligent, conntrack zones pour isoler les flux, rate limiting par IP avec meters. Tout ça dans le noyau, sans script externe, sans fail2ban.

17 févr. 2026

Lire plus

Nginx avancé : Maîtriser le Reverse Proxy en production sur Linux
Linux
Réseau
Sécurité

Nginx avancé : Maîtriser le Reverse Proxy en production sur Linux

Guide complet sur Nginx comme reverse proxy en production : configuration multi-sites, SSL avec Let's Encrypt, rate limiting, load balancing, cache, logs d'accès. Tout ce qu'il faut pour servir des applications en toute sécurité.

14 févr. 2026

Lire plus

SSH Avancé : Tunnels, ProxyJump et SOCKS Proxy, SSH n'est pas juste une connexion distante
Linux
Sécurité
Réseau

SSH Avancé : Tunnels, ProxyJump et SOCKS Proxy, SSH n'est pas juste une connexion distante

Vous pensez maîtriser SSH parce que vous faites ssh user@host ? Tunnels, ProxyJump, agent, ~/.ssh/config, forwarding dynamique comme un SOCKS proxy : SSH est un réseau à l'intérieur du réseau. Tout ce qu'il faut savoir.

13 févr. 2026

Lire plus


SHPV, votre partenaire de confiance en infrastructure et infogérance informatique en France.

SHPV
Prendre rendez-vousNous contacter
Expertise
InfrastructureDatacenterInfogéranceCloudHébergementTransit IP
Légales
Conditions Générales de VenteCPS - Contrat de ServicesCPS - Hébergement CloudCPS - Microsoft 365Accord sous-traitance RGPDTarifs interventions

SHPV © 2026 - Tous droits réservés

Mentions légalesPolitiques de confidentialité
SHPV FRANCE - SAS au capital de 16 000 € - 52 Rue Romain Rolland, 71230 Saint-Vallier - SIRET n°80886287400035 - R.C.S. Chalon-sur-Saône. Par téléphone 09 72 310 818 - Email: support@shpv.fr