🛠 Outils IT
🛠 78 outils 📚 32 docs
🤖 Assistant

Firewall (UFW / iptables / firewalld)

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
Attention : Avant d'activer UFW sur un serveur distant, assurez-vous d'avoir autorise SSH (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
Astuce : Toujours configurer les politiques par defaut AVANT d'activer le firewall. Cela evite de bloquer accidentellement des connexions en cours.

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
Astuce : 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
Attention : L'ordre des regles est important dans UFW. Les regles sont evaluees de haut en bas. La premiere regle qui correspond est appliquee. Utilisez 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
Astuce : Pour activer le forwarding IP via UFW, editez /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

TableFonctionChains disponibles
filterFiltrage des paquets (table par defaut)INPUT, FORWARD, OUTPUT
natTraduction d'adresses (NAT, redirection)PREROUTING, OUTPUT, POSTROUTING
mangleModification des en-tetes de paquets (QoS, TTL)Toutes
rawMarquage avant le suivi de connexion (NOTRACK)PREROUTING, OUTPUT

5.2 Les chains (chaines)

ChainDescription
INPUTPaquets destines au serveur lui-meme
OUTPUTPaquets generes par le serveur
FORWARDPaquets qui transitent par le serveur (routage)
PREROUTINGPaquets avant la decision de routage (DNAT)
POSTROUTINGPaquets apres la decision de routage (SNAT)

5.3 Les targets (cibles)

TargetAction
ACCEPTAutoriser le paquet
DROPIgnorer le paquet silencieusement (pas de reponse)
REJECTRefuser le paquet avec un message d'erreur ICMP
LOGEnregistrer le paquet dans les logs (ne stoppe pas le traitement)
MASQUERADENAT dynamique (pour IP dynamiques, table nat)
SNATNAT source statique (table nat, POSTROUTING)
DNATNAT destination (redirection de port, PREROUTING)
Astuce : 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
Attention : 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
Astuce : Placez toujours la regle LOG juste avant la regle DROP correspondante. Le LOG n'interrompt pas le traitement : le paquet continue vers la regle suivante.

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
Attention : Si vous utilisez 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 :

ZoneDescription
dropTout est ignore (pas de reponse). Seules les connexions sortantes sont possibles.
blockTout est rejete avec un message ICMP. Seules les connexions sortantes sont possibles.
publicZone par defaut. Reseau non fiable. Seuls certains services sont autorises.
externalPour les interfaces WAN avec masquerading active.
dmzZone demilitarisee. Acces limite depuis l'exterieur.
workReseau de travail. Confiance moderee.
homeReseau domestique. La plupart des machines du reseau sont de confiance.
internalReseau interne. Similaire a home.
trustedTout 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)
Astuce : Vous pouvez creer vos propres services en copiant un fichier XML existant de /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
Attention : Les regles ajoutees sans --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
Astuce : Pour tester une rich rule complexe, ajoutez-la d'abord sans --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 :

PortProtocoleServiceDescription
20TCPFTP (data)Transfert de donnees FTP
21TCPFTP (control)Commandes FTP
22TCPSSH / SFTP / SCPAcces securise, transfert de fichiers
23TCPTelnetAcces distant non securise (a eviter)
25TCPSMTPEnvoi d'emails
53TCP/UDPDNSResolution de noms de domaine
67-68UDPDHCPAttribution automatique d'adresses IP
80TCPHTTPTrafic web non chiffre
110TCPPOP3Reception d'emails
123UDPNTPSynchronisation de l'heure
143TCPIMAPReception d'emails (avec dossiers)
161-162UDPSNMPSupervision reseau
443TCPHTTPSTrafic web chiffre SSL/TLS
465TCPSMTPSSMTP securise (SSL implicite)
587TCPSMTP (submission)Envoi d'emails securise (STARTTLS)
993TCPIMAPSIMAP securise
995TCPPOP3SPOP3 securise
3306TCPMySQL / MariaDBBase de donnees MySQL
5432TCPPostgreSQLBase de donnees PostgreSQL
6379TCPRedisCache et store cle-valeur
8006TCPProxmox VEInterface web Proxmox
8080TCPHTTP (alt)Port HTTP alternatif / proxy
8443TCPHTTPS (alt)Port HTTPS alternatif
8888TCPPBSInterface web Proxmox Backup Server
9090TCPCockpit / PrometheusAdministration web / metriques
10000TCPWebminInterface administration Webmin
27017TCPMongoDBBase de donnees MongoDB
Attention : N'exposez jamais les ports de bases de donnees (3306, 5432, 6379, 27017) directement sur Internet. Limitez toujours l'acces a des IP ou sous-reseaux specifiques. Les bases de donnees doivent ecouter uniquement sur 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

ProblemeCause probableSolution
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
Astuce : Avant de modifier les regles de firewall en production, ayez toujours un plan de secours : acces console (KVM/IPMI/iLO), session SSH deja ouverte en parallele, ou un cron job qui desactive temporairement le firewall (at now + 5 minutes <<< "ufw disable").