Comment configurer un pare-feu avec Firewalld sur Linux (Guide complet)
Sécuriser votre serveur Linux contre les accès non autorisés et le trafic malveillant n’est pas optionnel — c’est une responsabilité fondamentale pour tout administrateur système. Que vous exécutiez un projet personnel, une application métier ou un serveur web de production, un pare-feu correctement configuré est votre première et plus critique ligne de défense. Firewalld est l’un des outils de gestion de pare-feu les plus puissants et flexibles disponibles sur Linux, offrant une gestion dynamique des règles, un contrôle du trafic basé sur les zones et un support de règles enrichies — tout sans nécessiter un redémarrage complet du service lors de l’application des modifications.
Ce guide complet vous guide à travers tout ce que vous devez savoir : installer Firewalld, comprendre les zones, gérer les services et les ports, écrire des règles enrichies et surveiller votre pare-feu en temps réel. Si vous hébergez sur un VPS ou un Serveur Dédié d’AlexHost, ce guide vous aidera à sécuriser votre environnement et à maintenir une posture de sécurité forte et adaptative.
Qu’est-ce que Firewalld et pourquoi devriez-vous l’utiliser ?
Firewalld est un daemon de gestion de pare-feu dynamique disponible sur la plupart des principales distributions Linux, notamment CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, et de plus en plus sur Debian et Ubuntu également. Contrairement à l’approche iptables plus ancienne — où chaque modification de règle nécessitait de vider et de recharger l’ensemble des règles — Firewalld applique les modifications dynamiquement au moment de l’exécution sans interrompre les connexions actives.
Avantages clés de Firewalld
- Architecture basée sur les zones — attribuez différents niveaux de confiance à différentes interfaces réseau ou plages d’adresses IP
- Mises à jour dynamiques des règles — appliquez les modifications sans redémarrer le pare-feu ou interrompre les connexions existantes
- Abstraction des services — gérez le trafic par nom de service (par exemple,
http,ssh) plutôt que par numéros de port bruts - Règles enrichies — écrivez des règles complexes et conditionnelles ciblant des adresses IP, des protocoles et des actions spécifiques
- Intégration D-Bus — permet à d’autres applications et services d’interagir avec le pare-feu par programmation
- Support IPv4 et IPv6 — gérez les deux familles de protocoles à partir d’une seule interface
Prérequis
Avant de continuer, assurez-vous que vous disposez de :
- Un serveur Linux exécutant CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian ou Ubuntu
- Un accès root ou
sudoau serveur - Une compréhension de base des commandes du terminal Linux
- Une session SSH active (gardez-la ouverte tout au long — vous allez modifier les règles du pare-feu)
> Avertissement critique : Assurez-vous toujours que SSH (port 22 par défaut) est explicitement autorisé dans vos règles de pare-feu avant d’activer Firewalld. Se verrouiller soi-même hors d’un serveur distant est une erreur courante et évitable.
Étape 1 : Installation de Firewalld
Firewalld est inclus dans les dépôts par défaut de la plupart des principales distributions Linux. Utilisez le gestionnaire de paquets approprié pour votre système.
Sur CentOS / RHEL / Rocky Linux / AlmaLinux
sudo yum install firewalld -yOu, sur les versions plus récentes utilisant DNF :
sudo dnf install firewalld -ySur Fedora
sudo dnf install firewalld -y
Sur Debian / Ubuntu
Bien que Firewalld soit le plus couramment associé aux systèmes basés sur RHEL, il est entièrement supporté sur les distributions basées sur Debian :
sudo apt update
sudo apt install firewalld -y> Remarque pour les utilisateurs Ubuntu/Debian : Si ufw est actuellement actif sur votre système, désactivez-le avant d’activer Firewalld pour éviter les conflits :
> “`bash
> sudo ufw disable
> “`
Étape 2 : Démarrage et activation de Firewalld
Après l’installation, démarrez le service Firewalld et configurez-le pour qu’il se lance automatiquement au démarrage du système :
sudo systemctl start firewalld
sudo systemctl enable firewalldVérifiez que le service fonctionne correctement :
sudo systemctl status firewalldVous devriez voir une sortie similaire à :
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since ...Si le statut affiche active (running), Firewalld est opérationnel et prêt à être configuré.
Étape 3 : Comprendre les zones Firewalld
Le modèle basé sur les zones est la pierre angulaire de l’architecture de Firewalld. Une zone définit un niveau de confiance pour une connexion réseau ou une interface. Chaque zone contient son propre ensemble de règles qui déterminent quel trafic est autorisé ou refusé.

Zones Firewalld intégrées
| Zone | Niveau de confiance | Cas d’usage typique |
|---|---|---|
drop | Le plus bas | Toutes les connexions entrantes sont supprimées sans réponse |
block | Très bas | Les connexions entrantes sont rejetées avec un message ICMP |
public | Bas | Zone par défaut pour les réseaux publics non fiables |
external | Bas | Pour les interfaces externes avec masquage NAT |
dmz | Moyen | Serveurs accessibles de l’extérieur mais isolés en interne |
work | Moyen-Haut | Réseaux de travail avec confiance modérée |
home | Haut | Réseaux domestiques où les autres hôtes sont fiables |
internal | Haut | Réseaux internes, similaires à la maison |
trusted | Le plus haut | Toutes les connexions sont acceptées |
Vérifier la zone par défaut actuelle
sudo firewall-cmd --get-default-zone
Lister toutes les zones disponibles
sudo firewall-cmd --get-zones
Afficher les zones actuellement actives et leurs interfaces
sudo firewall-cmd --get-active-zonesExemple de sortie :
public
interfaces: eth0
Étape 4 : Modification de la Zone par Défaut
Exemple 1 — Définition de la Zone par Défaut sur public (Recommandé pour VPS/Serveurs Dédiés)
Pour la plupart des serveurs accessibles sur Internet, public est la zone par défaut appropriée. Elle applique un niveau de confiance conservateur et n’autorise que le trafic explicitement autorisé :
sudo firewall-cmd --set-default-zone=publicVérifiez la modification :
sudo firewall-cmd --get-default-zoneRésultat attendu :
public
Exemple 2 — Définition de la Zone par Défaut sur home
Si votre serveur fonctionne sur un réseau privé de confiance (tel qu’un laboratoire personnel ou un environnement de développement interne), la zone home permet une communication plus permissive entre les hôtes de confiance :
sudo firewall-cmd --set-default-zone=homeVérifiez :
sudo firewall-cmd --get-default-zoneRésultat attendu :
homeExemple 3 — Définition de la Zone par Défaut sur work
Pour les serveurs sur un réseau d’entreprise ou professionnel où une confiance modérée est appropriée :
sudo firewall-cmd --set-default-zone=workVérifiez :
sudo firewall-cmd --get-default-zoneRésultat attendu :
workÉtape 5 : Gestion des services avec Firewalld
Firewalld inclut une bibliothèque de définitions de services prédéfinis qui mappent les noms de services à leurs ports et protocoles correspondants. Cela facilite beaucoup la gestion des règles par intention plutôt que par des numéros de ports bruts.
Lister tous les services prédéfinis
sudo firewall-cmd --get-servicesAutoriser un service dans une zone
Pour autoriser le trafic HTTP (port 80/TCP) dans la zone public de manière permanente :
sudo firewall-cmd --zone=public --add-service=http --permanentPour autoriser le trafic HTTPS (port 443/TCP) :
sudo firewall-cmd --zone=public --add-service=https --permanentPour autoriser SSH (port 22/TCP) — assurez-vous toujours que cela est autorisé avant d’apporter d’autres modifications :
sudo firewall-cmd --zone=public --add-service=ssh --permanentAppliquer les modifications en rechargeant Firewalld
Le drapeau --permanent écrit la règle dans la configuration persistante mais ne l’applique pas immédiatement au pare-feu en cours d’exécution. Rechargez toujours après avoir apporté des modifications permanentes :
sudo firewall-cmd --reloadVérifier les services dans une zone
sudo firewall-cmd --zone=public --list-servicesExemple de sortie :
dhcpv6-client http https sshSupprimer un service d’une zone
Pour supprimer HTTPS de la zone public :
sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reloadÉtape 6 : Gestion directe des ports
Dans les cas où un service n’a pas de définition Firewalld prédéfinie, vous pouvez ouvrir ou fermer des ports spécifiques directement.
Ouvrir un port spécifique
Pour ouvrir le port 8080 sur TCP dans la zone public :
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reloadPour ouvrir un port UDP (par exemple, le port 53 pour DNS) :
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reloadPour ouvrir une plage de ports (par exemple, 6000–6100 TCP) :
sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reloadFermer un port spécifique
Pour fermer le port 8080 :
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadLister tous les ports ouverts dans une zone
sudo firewall-cmd --zone=public --list-portsÉtape 7 : Configuration avancée avec des règles enrichies
Les règles enrichies vous donnent un contrôle granulaire et conditionnel du trafic — bien au-delà de ce que permettent les simples règles de service ou de port. Elles prennent en charge le filtrage par adresse IP source, adresse IP de destination, protocole, port et action (accepter, rejeter, abandonner, enregistrer).
Syntaxe des règles enrichies
rule [family="<ipv4|ipv6>"]
[source address="<IP/CIDR>"]
[destination address="<IP/CIDR>"]
[service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
[log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
[accept|reject|drop]Exemple 1 — Autoriser SSH uniquement à partir d’une adresse IP spécifique
C’est l’une des configurations de sécurité les plus importantes pour tout serveur distant. Si vous gérez votre serveur à partir d’une adresse IP fixe, limitez l’accès SSH à cette IP exclusivement :
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reloadExemple 2 — Bloquer tout le trafic en provenance d’une adresse IP spécifique
Pour bloquer complètement une adresse IP qui génère du trafic malveillant :
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadExemple 3 — Autoriser HTTP à partir d’un sous-réseau spécifique
Pour autoriser le trafic HTTP uniquement à partir d’un sous-réseau interne de confiance (par exemple, 192.168.1.0/24) :
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reloadExemple 4 — Limiter le débit des connexions SSH pour prévenir les attaques par force brute
Enregistrez et limitez les tentatives de connexion SSH pour réduire l’exposition aux attaques par force brute :
sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reloadExemple 5 — Autoriser un port spécifique à partir d’une IP spécifique
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reloadLister toutes les règles enrichies dans une zone
sudo firewall-cmd --zone=public --list-rich-rulesSupprimer une règle enrichie
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadÉtape 8 : Surveillance et audit de votre pare-feu
L’examen régulier de votre configuration de pare-feu est essentiel pour maintenir une posture de sécurité solide. Firewalld fournit plusieurs commandes pour inspecter l’état actuel de vos règles.
Afficher la configuration complète pour la zone par défaut
sudo firewall-cmd --list-allExemple de sortie :
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="203.0.113.50" service name="ssh" acceptAfficher la configuration pour toutes les zones
sudo firewall-cmd --list-all-zonesAfficher la configuration pour une zone spécifique
sudo firewall-cmd --zone=dmz --list-allVérifier si un service spécifique est autorisé
sudo firewall-cmd --zone=public --query-service=httpVérifier si un port spécifique est ouvert
sudo firewall-cmd --zone=public --query-port=8080/tcpÉtape 9 : Règles Runtime vs. Permanentes — Comprendre la Différence
Firewalld fonctionne avec deux couches de configuration distinctes :
| Couche | Drapeau | Persistance | Cas d’utilisation |
|---|---|---|---|
| Runtime | *(aucun drapeau)* | Perdu au rechargement/redémarrage | Test temporaire de règles |
| Permanente | --permanent | Survit au rechargement et au redémarrage | Configurations de production |
Flux de travail des meilleures pratiques
- Testez la règle au runtime en premier (sans
--permanent) pour vérifier qu’elle fonctionne comme prévu - Ajoutez la règle de manière permanente une fois confirmée
- Rechargez Firewalld pour synchroniser les configurations runtime et permanentes
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http
# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
# Step 3: Reload to sync
sudo firewall-cmd --reloadVous pouvez également appliquer une règle permanente et recharger immédiatement dans un seul flux de travail :
sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reloadÉtape 10 : Attribution des interfaces réseau aux zones
Si votre serveur dispose de plusieurs interfaces réseau (courant sur les Serveurs Dédiés avec des cartes réseau publiques et privées), vous pouvez attribuer chaque interface à une zone différente avec des niveaux de confiance différents.
Attribuer une interface à une zone
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reloadModifier la zone d’une interface
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadSupprimer une interface d’une zone
sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reloadÉtape 11 : Activation du masquage IP et de la redirection de port
Pour les serveurs agissant comme passerelles ou exécutant NAT (Network Address Translation), Firewalld supporte nativement le masquage et la redirection de port.
Activer le masquage (NAT)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reloadRediriger un port (par exemple, rediriger le port externe 80 vers le port interne 8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reloadRediriger le trafic vers un hôte différent
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reloadConfigurations de sécurité pratiques pour les serveurs AlexHost
Si vous exécutez un serveur web, un serveur de base de données ou un serveur d’application sur l’infrastructure AlexHost, voici les configurations Firewalld de base recommandées :
Configuration de base du serveur web
# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent
# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# Reload to apply
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-all> Conseil professionnel : Associez votre configuration de pare-feu à un certificat SSL valide pour assurer que tout le trafic web est chiffré de bout en bout. AlexHost propose des certificats SSL pour tous les environnements d’hébergement.
Configuration de base du serveur de base de données (MySQL/MariaDB)
# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null
sudo firewall-cmd --reloadConfiguration de base du serveur cPanel/WHM
Si vous utilisez un VPS avec cPanel, vous devrez ouvrir les ports requis par cPanel et WHM :
# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent # Webmail HTTPS
# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent
sudo firewall-cmd --reloadDépannage des problèmes courants de Firewalld
Problème 1 : Firewalld ne démarre pas
Vérifiez les conflits avec d’autres outils de pare-feu :
sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalldProblème 2 : Les règles ne persistent pas après le redémarrage
Assurez-vous d’avoir utilisé le drapeau --permanent et rechargé :
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reloadLa commande --runtime-to-permanent enregistre toutes les règles d’exécution actuelles dans la configuration permanente.
Problème 3 : Verrouillé hors de SSH
Si vous avez accidentellement bloqué l’accès SSH, vous devrez accéder au serveur via la console (disponible via le panneau de contrôle VPS d’AlexHost) et exécuter :
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reloadProblème 4 : Vérification des journaux de Firewalld
sudo journalctl -u firewalld -fOu vérifiez le journal système pour les messages liés au pare-feu :
sudo grep -i firewall /var/log/messagesFeuille de référence rapide Firewalld
| Tâche | Commande |
|---|---|
| Vérifier le statut | sudo systemctl status firewalld |
| Démarrer Firewalld | sudo systemctl start firewalld |
| Arrêter Firewalld | sudo systemctl stop firewalld |
| Activer au démarrage | sudo systemctl enable firewalld |
| Obtenir la zone par défaut | sudo firewall-cmd --get-default-zone |
| Lister toutes les zones | sudo firewall-cmd --get-zones |
| Lister les zones actives | sudo firewall-cmd --get-active-zones |
| Définir la zone par défaut | sudo firewall-cmd --set-default-zone=public |
| Ajouter un service | sudo firewall-cmd --zone=public --add-service=http --permanent |
| Supprimer un service | sudo firewall-cmd --zone=public --remove-service=http --permanent |
| Ouvrir un port | sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent |
| Fermer un port | sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent |
| Lister les services | sudo firewall-cmd --zone=public --list-services |
| Lister les ports | sudo firewall-cmd --zone=public --list-ports |
| Lister toutes les règles | sudo firewall-cmd --list-all |
| Ajouter une règle enrichie | sudo firewall-cmd --zone=public --add-rich-rule='...' --permanent |
| Enregistrer les règles d’exécution | sudo firewall-cmd --runtime-to-permanent |
| Recharger Firewalld | sudo firewall-cmd --reload |
| Mode panique (bloquer tout) | sudo firewall-cmd --panic-on |
| Désactiver le mode panique | sudo firewall-cmd --panic-off |
Conclusion
Firewalld est un outil de gestion de pare-feu exceptionnellement capable et flexible qui donne aux administrateurs système Linux un contrôle précis et dynamique sur le trafic réseau. En maîtrisant les zones, les services, les règles de port et les règles enrichies, vous pouvez construire une architecture de sécurité en couches et adaptative qui protège votre serveur contre les accès non autorisés, les attaques par force brute et les menaces au niveau du réseau.
Les principes clés à retenir :
- Autorisez toujours SSH avant d’activer le pare-feu pour éviter de vous verrouiller
- Utilisez le
--permanentflag pour toutes les règles de production, et suivez toujours avec--reload - Restreignez les services sensibles (SSH, bases de données, panneaux d’administration) à des adresses IP spécifiques de confiance en utilisant des règles enrichies
- Examinez régulièrement vos règles de pare-feu — votre posture de sécurité doit évoluer à mesure que votre infrastructure change
- Testez les règles à l’exécution d’abord, puis rendez-les permanentes une fois vérifiées
Que vous gériez un seul VPS ou une flotte de Serveurs Dédiés, AlexHost fournit l’infrastructure, les performances et l’accès root complet dont vous avez besoin pour implémenter des configurations de sécurité de niveau entreprise. Associez votre configuration Firewalld avec des Certificats SSL pour les communications chiffrées et explorez les Panneaux de Contrôle VPS pour une gestion de serveur rationalisée — tous disponibles sur la plateforme fiable et haute performance d’AlexHost.
sur tous les services d'hébergement