Firewall (UFW / iptables / firewalld)
- UFW (Uncomplicated Firewall)
- iptables
- firewalld
- Commun
1. Installation et activation (UFW)
UFW (Uncomplicated Firewall) est l'interface simplifiee pour iptables, installee par defaut sur Ubuntu. Elle permet de gerer les regles de pare-feu sans manipuler directement iptables.
1.1 Installation
# Debian / Ubuntu
sudo apt update
sudo apt install ufw
# Verifier la version installee
ufw version
1.2 Activation et desactivation
# Activer le pare-feu
sudo ufw enable
# Desactiver le pare-feu
sudo ufw disable
# Reinitialiser toutes les regles (retour a zero)
sudo ufw reset
sudo ufw allow ssh) sinon vous perdrez l'acces au serveur !
1.3 Politique par defaut
La bonne pratique est de tout bloquer en entree et tout autoriser en sortie :
# Bloquer tout le trafic entrant par defaut
sudo ufw default deny incoming
# Autoriser tout le trafic sortant par defaut
sudo ufw default allow outgoing
2. Regles de base UFW (allow, deny, limit)
2.1 Autoriser un service ou un port
# Autoriser par nom de service
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
# Autoriser par numero de port
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
# Autoriser un port avec protocole specifique
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
2.2 Bloquer un port
# Bloquer un port specifique
sudo ufw deny 3306
# Bloquer un port avec protocole
sudo ufw deny 23/tcp
2.3 Limiter les connexions (anti brute-force)
La commande limit bloque automatiquement une IP si elle tente plus de 6 connexions en 30 secondes :
# Limiter les connexions SSH (protection brute-force)
sudo ufw limit ssh
# Equivalent avec numero de port
sudo ufw limit 22/tcp
ufw limit ssh est une mesure de securite indispensable sur tout serveur accessible depuis Internet. C'est une alternative simple a fail2ban pour la protection SSH basique.
2.4 Supprimer une regle
# Methode 1 : supprimer par la regle exacte
sudo ufw delete allow 80
# Methode 2 : supprimer par numero (voir ufw status numbered)
sudo ufw status numbered
sudo ufw delete 3
3. Regles avancees UFW
3.1 Plages de ports (port ranges)
# Autoriser une plage de ports
sudo ufw allow 6000:6100/tcp
sudo ufw allow 6000:6100/udp
# Bloquer une plage de ports
sudo ufw deny 10000:10100/tcp
3.2 Regles par adresse IP specifique
# Autoriser tout le trafic depuis une IP
sudo ufw allow from 192.168.1.100
# Autoriser une IP vers un port specifique
sudo ufw allow from 192.168.1.100 to any port 3306
# Autoriser une IP vers un port et protocole specifique
sudo ufw allow from 192.168.1.100 to any port 22 proto tcp
# Bloquer tout le trafic depuis une IP
sudo ufw deny from 203.0.113.50
3.3 Regles par sous-reseau
# Autoriser tout un sous-reseau
sudo ufw allow from 192.168.1.0/24
# Autoriser un sous-reseau vers un port specifique
sudo ufw allow from 10.0.0.0/8 to any port 5432
# Bloquer un sous-reseau
sudo ufw deny from 172.16.0.0/12
3.4 Regles sur une interface reseau specifique
# Autoriser HTTP uniquement sur l'interface eth0
sudo ufw allow in on eth0 to any port 80
# Autoriser le trafic interne sur l'interface privee
sudo ufw allow in on eth1 from 10.0.0.0/24
3.5 Inserer une regle a une position specifique
# Inserer une regle en position 1 (prioritaire)
sudo ufw insert 1 deny from 203.0.113.50
# Inserer une regle en position 2
sudo ufw insert 2 allow from 192.168.1.0/24 to any port 22
ufw insert pour placer une regle prioritaire.
4. Logging et status UFW
4.1 Verifier le statut
# Statut simple (actif/inactif + regles)
sudo ufw status
# Statut detaille avec compteurs de paquets
sudo ufw status verbose
# Statut avec numeros de regles (utile pour supprimer)
sudo ufw status numbered
4.2 Configurer le logging
# Activer les logs
sudo ufw logging on
# Niveaux de log disponibles : off, low, medium, high, full
sudo ufw logging low # Paquets bloques uniquement
sudo ufw logging medium # + paquets non-matches
sudo ufw logging high # + tous les paquets avec rate limiting
sudo ufw logging full # Tout sans rate limiting
4.3 Consulter les logs
# Emplacement des logs UFW
sudo tail -f /var/log/ufw.log
# Filtrer les logs bloques
sudo grep "UFW BLOCK" /var/log/ufw.log
# Compter les blocages par IP
sudo grep "UFW BLOCK" /var/log/ufw.log | grep -oP 'SRC=\K[^ ]+' | sort | uniq -c | sort -rn | head -20
4.4 Fichiers de configuration UFW
# Regles utilisateur (IPv4)
/etc/ufw/user.rules
# Regles utilisateur (IPv6)
/etc/ufw/user6.rules
# Configuration generale
/etc/default/ufw
# Regles avant/apres les regles utilisateur
/etc/ufw/before.rules
/etc/ufw/after.rules
/etc/default/ufw et modifiez DEFAULT_FORWARD_POLICY="ACCEPT", puis editez /etc/ufw/sysctl.conf pour decomposer net.ipv4.ip_forward=1.
5. Concepts iptables (chains, tables, targets)
iptables est le pare-feu natif du noyau Linux (netfilter). C'est l'outil bas niveau sur lequel repose UFW. Il offre un controle total sur le filtrage des paquets.
5.1 Les tables
| Table | Fonction | Chains disponibles |
|---|---|---|
filter | Filtrage des paquets (table par defaut) | INPUT, FORWARD, OUTPUT |
nat | Traduction d'adresses (NAT, redirection) | PREROUTING, OUTPUT, POSTROUTING |
mangle | Modification des en-tetes de paquets (QoS, TTL) | Toutes |
raw | Marquage avant le suivi de connexion (NOTRACK) | PREROUTING, OUTPUT |
5.2 Les chains (chaines)
| Chain | Description |
|---|---|
INPUT | Paquets destines au serveur lui-meme |
OUTPUT | Paquets generes par le serveur |
FORWARD | Paquets qui transitent par le serveur (routage) |
PREROUTING | Paquets avant la decision de routage (DNAT) |
POSTROUTING | Paquets apres la decision de routage (SNAT) |
5.3 Les targets (cibles)
| Target | Action |
|---|---|
ACCEPT | Autoriser le paquet |
DROP | Ignorer le paquet silencieusement (pas de reponse) |
REJECT | Refuser le paquet avec un message d'erreur ICMP |
LOG | Enregistrer le paquet dans les logs (ne stoppe pas le traitement) |
MASQUERADE | NAT dynamique (pour IP dynamiques, table nat) |
SNAT | NAT source statique (table nat, POSTROUTING) |
DNAT | NAT destination (redirection de port, PREROUTING) |
DROP vs REJECT : DROP est prefere pour les serveurs exposes a Internet (pas de reponse = le port semble ferme), tandis que REJECT est utile en interne pour un diagnostic plus rapide (l'emetteur recoit immediatement un refus).
6. Commandes essentielles iptables
6.1 Lister les regles (LIST)
# Lister toutes les regles (table filter par defaut)
sudo iptables -L -n -v
# Lister avec les numeros de ligne
sudo iptables -L -n -v --line-numbers
# Lister une chain specifique
sudo iptables -L INPUT -n -v --line-numbers
# Lister la table NAT
sudo iptables -t nat -L -n -v
# Lister les regles au format brut (utile pour scripts)
sudo iptables -S
sudo iptables -S INPUT
6.2 Ajouter des regles (APPEND / INSERT)
# Ajouter une regle a la fin d'une chain (-A = Append)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Inserer une regle a une position specifique (-I = Insert)
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
# Syntaxe generale
sudo iptables -A [CHAIN] -p [protocole] --dport [port] -s [source] -d [dest] -j [TARGET]
6.3 Supprimer des regles (DELETE)
# Supprimer par numero de ligne
sudo iptables -D INPUT 3
# Supprimer par specification exacte
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
6.4 Vider les regles (FLUSH)
# Vider toutes les regles de toutes les chains
sudo iptables -F
# Vider une chain specifique
sudo iptables -F INPUT
# Vider la table NAT
sudo iptables -t nat -F
# Reinitialisation complete (flush + politique par defaut)
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
iptables -F vide les regles mais ne change PAS la politique par defaut. Si votre politique INPUT est DROP et que vous faites un flush, vous perdrez l'acces SSH ! Toujours remettre la politique a ACCEPT avant de flush sur un serveur distant.
6.5 Politique par defaut
# Definir la politique par defaut d'une chain
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
7. Regles courantes iptables
7.1 Configuration de base securisee
# Autoriser le loopback (obligatoire)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# Autoriser les connexions deja etablies et associees
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Bloquer les paquets invalides
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
7.2 Autoriser SSH, HTTP, HTTPS
# SSH (port 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# SSH depuis une IP specifique uniquement
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
# HTTP (port 80)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS (port 443)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# HTTP + HTTPS en une seule regle (multiport)
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
7.3 Limiter les connexions SSH (anti brute-force)
# Limiter a 3 nouvelles connexions par minute sur SSH
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j DROP
7.4 Bloquer le ping (ICMP)
# Bloquer les requetes ping entrantes
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# Limiter le ping (1 par seconde)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
7.5 NAT et redirection de port (Port Forwarding)
# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward
# Rendre le forwarding permanent
# Ajouter dans /etc/sysctl.conf :
# net.ipv4.ip_forward = 1
# Masquerade (NAT sortant) - pour partager la connexion Internet
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Redirection de port : port 8080 externe vers port 80 interne
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
# SNAT (IP source fixe)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.5
7.6 Logger les paquets bloques
# Logger puis bloquer (LOG ne stoppe pas le traitement)
sudo iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4
sudo iptables -A INPUT -j DROP
# Les logs apparaissent dans /var/log/kern.log ou /var/log/messages
8. Sauvegarde et restauration iptables
Les regles iptables sont volatiles : elles disparaissent au redemarrage du serveur. Il est essentiel de les sauvegarder et de configurer leur restauration automatique.
8.1 Sauvegarder les regles
# Sauvegarder toutes les regles dans un fichier
sudo iptables-save > /etc/iptables/rules.v4
# Sauvegarder les regles IPv6
sudo ip6tables-save > /etc/iptables/rules.v6
# Sauvegarder une table specifique
sudo iptables-save -t filter > /etc/iptables/filter.rules
8.2 Restaurer les regles
# Restaurer depuis un fichier
sudo iptables-restore < /etc/iptables/rules.v4
# Restaurer les regles IPv6
sudo ip6tables-restore < /etc/iptables/rules.v6
# Restaurer sans vider les regles existantes (ajout)
sudo iptables-restore -n < /etc/iptables/rules.v4
8.3 Persistance automatique (Debian/Ubuntu)
# Installer le paquet iptables-persistent
sudo apt install iptables-persistent
# Les regles sont automatiquement sauvegardees dans :
# /etc/iptables/rules.v4
# /etc/iptables/rules.v6
# Sauvegarder les regles actuelles
sudo netfilter-persistent save
# Recharger les regles sauvegardees
sudo netfilter-persistent reload
8.4 Persistance automatique (CentOS/RHEL)
# Installer le service iptables
sudo yum install iptables-services
# Activer au demarrage
sudo systemctl enable iptables
# Sauvegarder les regles actuelles
sudo service iptables save
# ou
sudo /usr/libexec/iptables/iptables.init save
iptables-persistent, n'oubliez pas de relancer sudo netfilter-persistent save apres chaque modification de vos regles, sinon les changements seront perdus au prochain reboot.
8.5 Script de firewall complet (exemple)
#!/bin/bash
# Script de configuration iptables complet
# Fichier : /etc/iptables/firewall.sh
# Reinitialiser
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Politiques par defaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Loopback
iptables -A INPUT -i lo -j ACCEPT
# Connexions etablies
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Paquets invalides
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# SSH (limite)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
# HTTP / HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
# Ping (limite)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
# Log puis drop le reste
iptables -A INPUT -j LOG --log-prefix "IPT-DROP: " --log-level 4
iptables -A INPUT -j DROP
echo "Regles iptables appliquees."
9. Zones et services firewalld
firewalld est le pare-feu par defaut sur CentOS/RHEL 7+, Fedora et openSUSE. Il fonctionne avec un systeme de zones et services et gere les regles dynamiquement (sans redemarrage).
9.1 Installation et activation
# CentOS / RHEL / Fedora (souvent deja installe)
sudo dnf install firewalld
# Debian / Ubuntu
sudo apt install firewalld
# Activer et demarrer
sudo systemctl enable firewalld
sudo systemctl start firewalld
# Verifier le statut
sudo firewall-cmd --state
sudo systemctl status firewalld
9.2 Les zones
Chaque interface reseau est assignee a une zone, qui definit le niveau de confiance :
| Zone | Description |
|---|---|
drop | Tout est ignore (pas de reponse). Seules les connexions sortantes sont possibles. |
block | Tout est rejete avec un message ICMP. Seules les connexions sortantes sont possibles. |
public | Zone par defaut. Reseau non fiable. Seuls certains services sont autorises. |
external | Pour les interfaces WAN avec masquerading active. |
dmz | Zone demilitarisee. Acces limite depuis l'exterieur. |
work | Reseau de travail. Confiance moderee. |
home | Reseau domestique. La plupart des machines du reseau sont de confiance. |
internal | Reseau interne. Similaire a home. |
trusted | Tout est autorise. A utiliser avec extreme prudence. |
9.3 Les services
Les services sont des definitions predefinies regroupant ports et protocoles :
# Lister tous les services disponibles
sudo firewall-cmd --get-services
# Afficher le detail d'un service
sudo firewall-cmd --info-service=ssh
sudo firewall-cmd --info-service=http
# Les fichiers de definition sont dans :
# /usr/lib/firewalld/services/ (defaut systeme, ne pas modifier)
# /etc/firewalld/services/ (personnalisations)
/usr/lib/firewalld/services/ vers /etc/firewalld/services/ et en le modifiant selon vos besoins.
10. Commandes essentielles firewalld
10.1 Gestion des zones
# Voir la zone par defaut
sudo firewall-cmd --get-default-zone
# Changer la zone par defaut
sudo firewall-cmd --set-default-zone=internal
# Lister toutes les zones actives
sudo firewall-cmd --get-active-zones
# Voir la configuration complete d'une zone
sudo firewall-cmd --zone=public --list-all
# Lister la configuration de toutes les zones
sudo firewall-cmd --list-all-zones
# Assigner une interface a une zone
sudo firewall-cmd --zone=internal --change-interface=eth1 --permanent
10.2 Gestion des services
# Ajouter un service (temporaire, perdu au reload)
sudo firewall-cmd --zone=public --add-service=http
# Ajouter un service de facon permanente
sudo firewall-cmd --zone=public --add-service=http --permanent
# Supprimer un service
sudo firewall-cmd --zone=public --remove-service=http --permanent
# Ajouter plusieurs services
sudo firewall-cmd --zone=public --add-service={http,https,ssh} --permanent
10.3 Gestion des ports
# Ouvrir un port
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
# Ouvrir une plage de ports
sudo firewall-cmd --zone=public --add-port=5000-5100/tcp --permanent
# Supprimer un port
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
# Lister les ports ouverts
sudo firewall-cmd --zone=public --list-ports
10.4 Port forwarding
# Rediriger le port 8080 vers le port 80 local
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent
# Rediriger vers une autre machine
sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
# Activer le masquerading (necessaire pour le forwarding vers d'autres machines)
sudo firewall-cmd --zone=public --add-masquerade --permanent
10.5 Recharger la configuration
# Recharger les regles (applique les modifications --permanent)
sudo firewall-cmd --reload
# Recharger completement (coupe les connexions actives)
sudo firewall-cmd --complete-reload
--permanent sont perdues au reload ou au redemarrage. Ajoutez toujours --permanent puis faites un --reload pour appliquer.
11. Rich rules firewalld
Les rich rules permettent des regles avancees avec plus de granularite que les commandes simples :
11.1 Syntaxe generale
sudo firewall-cmd --zone=public --add-rich-rule='RULE' --permanent
11.2 Autoriser un service depuis une IP specifique
# Autoriser SSH depuis une IP specifique
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
# Autoriser un port depuis un sous-reseau
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="3306" protocol="tcp" accept' --permanent
11.3 Bloquer une IP ou un sous-reseau
# Bloquer tout le trafic depuis une IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" drop' --permanent
# Rejeter avec message ICMP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject' --permanent
11.4 Limiter les connexions (rate limiting)
# Limiter SSH a 3 connexions par minute
sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" accept limit value="3/m"' --permanent
# Limiter les connexions depuis une source
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" service name="http" accept limit value="25/m"' --permanent
11.5 Logger avec les rich rules
# Logger puis accepter
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" log prefix="SSH-ACCESS" level="info" accept' --permanent
# Logger puis bloquer
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" log prefix="BLOCKED" level="warning" limit value="5/m" drop' --permanent
11.6 Gerer les rich rules
# Lister les rich rules d'une zone
sudo firewall-cmd --zone=public --list-rich-rules
# Supprimer une rich rule (copier la regle exacte)
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="203.0.113.50" drop' --permanent
--permanent. Si elle fonctionne correctement, ajoutez-la ensuite avec --permanent et faites un --reload.
12. Ports courants (table de reference)
Voici la liste des ports les plus frequemment utilises dans l'administration systeme :
| Port | Protocole | Service | Description |
|---|---|---|---|
| 20 | TCP | FTP (data) | Transfert de donnees FTP |
| 21 | TCP | FTP (control) | Commandes FTP |
| 22 | TCP | SSH / SFTP / SCP | Acces securise, transfert de fichiers |
| 23 | TCP | Telnet | Acces distant non securise (a eviter) |
| 25 | TCP | SMTP | Envoi d'emails |
| 53 | TCP/UDP | DNS | Resolution de noms de domaine |
| 67-68 | UDP | DHCP | Attribution automatique d'adresses IP |
| 80 | TCP | HTTP | Trafic web non chiffre |
| 110 | TCP | POP3 | Reception d'emails |
| 123 | UDP | NTP | Synchronisation de l'heure |
| 143 | TCP | IMAP | Reception d'emails (avec dossiers) |
| 161-162 | UDP | SNMP | Supervision reseau |
| 443 | TCP | HTTPS | Trafic web chiffre SSL/TLS |
| 465 | TCP | SMTPS | SMTP securise (SSL implicite) |
| 587 | TCP | SMTP (submission) | Envoi d'emails securise (STARTTLS) |
| 993 | TCP | IMAPS | IMAP securise |
| 995 | TCP | POP3S | POP3 securise |
| 3306 | TCP | MySQL / MariaDB | Base de donnees MySQL |
| 5432 | TCP | PostgreSQL | Base de donnees PostgreSQL |
| 6379 | TCP | Redis | Cache et store cle-valeur |
| 8006 | TCP | Proxmox VE | Interface web Proxmox |
| 8080 | TCP | HTTP (alt) | Port HTTP alternatif / proxy |
| 8443 | TCP | HTTPS (alt) | Port HTTPS alternatif |
| 8888 | TCP | PBS | Interface web Proxmox Backup Server |
| 9090 | TCP | Cockpit / Prometheus | Administration web / metriques |
| 10000 | TCP | Webmin | Interface administration Webmin |
| 27017 | TCP | MongoDB | Base de donnees MongoDB |
127.0.0.1 ou sur l'interface reseau interne.
13. Depannage
13.1 Diagnostiquer un probleme de connectivite
# Verifier quel firewall est actif
sudo ufw status # UFW
sudo iptables -L -n # iptables
sudo firewall-cmd --state # firewalld
# Verifier si un port est ouvert localement
sudo ss -tlnp | grep :80
sudo netstat -tlnp | grep :80
# Tester la connectivite depuis l'exterieur
nc -zv serveur.example.com 80
telnet serveur.example.com 80
nmap -p 80 serveur.example.com
# Tester avec curl
curl -v http://serveur.example.com:80
13.2 Verifier les logs du firewall
# Logs UFW
sudo tail -f /var/log/ufw.log
# Logs iptables (kernel log)
sudo tail -f /var/log/kern.log
sudo dmesg | grep -i "ipt\|iptables\|netfilter"
# Logs firewalld
sudo journalctl -u firewalld
sudo journalctl -f -u firewalld
# Logs avec un prefixe specifique
sudo grep "IPT-DROP" /var/log/kern.log
13.3 Tracer un paquet (debug avance)
# Tracer les paquets avec TRACE (iptables)
sudo iptables -t raw -A PREROUTING -p tcp --dport 80 -j TRACE
sudo iptables -t raw -A OUTPUT -p tcp --dport 80 -j TRACE
# Voir les traces dans les logs
sudo dmesg | grep TRACE
# Ne pas oublier de supprimer les regles TRACE apres le debug
sudo iptables -t raw -F
13.4 Surveiller le trafic en temps reel
# Capturer le trafic sur un port (tcpdump)
sudo tcpdump -i eth0 port 80 -nn
sudo tcpdump -i any port 22 -nn -c 20
# Surveiller les compteurs de paquets iptables
watch -n 1 'sudo iptables -L -n -v'
# Voir les connexions actives
sudo conntrack -L
sudo conntrack -L -p tcp --dport 22
13.5 Problemes courants et solutions
| Probleme | Cause probable | Solution |
|---|---|---|
| Perte d'acces SSH apres activation du firewall | SSH non autorise avant activation | Acces console/KVM, puis ufw allow ssh ou ajout regle iptables |
| Regles disparaissent apres reboot | Regles non sauvegardees | Installer iptables-persistent ou utiliser firewall-cmd --permanent |
| Port ouvert dans le firewall mais toujours inaccessible | Le service n'ecoute pas sur ce port / ecoute sur 127.0.0.1 | Verifier avec ss -tlnp que le service ecoute sur 0.0.0.0 ou l'IP correcte |
| UFW et firewalld en conflit | Les deux services sont actifs | N'utiliser qu'un seul firewall. Desactiver l'autre avec systemctl disable |
| Docker contourne les regles UFW | Docker manipule directement iptables | Editer /etc/docker/daemon.json avec {"iptables": false} ou utiliser DOCKER-USER chain |
| Forwarding ne fonctionne pas | ip_forward desactive | sysctl net.ipv4.ip_forward=1 et l'ajouter dans /etc/sysctl.conf |
| firewalld : regles non appliquees | Oubli du --permanent ou du --reload |
Ajouter avec --permanent puis firewall-cmd --reload |
13.6 Conflit UFW / Docker
Docker modifie directement les regles iptables et contourne UFW. Voici comment reprendre le controle :
# Methode 1 : Desactiver la gestion iptables par Docker
# Editer /etc/docker/daemon.json
{
"iptables": false
}
# Puis redemarrer Docker
sudo systemctl restart docker
# Methode 2 : Utiliser la chain DOCKER-USER (recommande)
# Ajouter vos regles dans la chain DOCKER-USER
sudo iptables -I DOCKER-USER -i eth0 -p tcp --dport 3306 -j DROP
sudo iptables -I DOCKER-USER -i eth0 -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
# Methode 3 : Modifier /etc/ufw/after.rules
# Ajouter avant la ligne *filter :
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN
COMMIT
at now + 5 minutes <<< "ufw disable").