Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code : Skills Commencer
Sections
Linux Sécurité

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 sudo au 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 -y

Ou, sur les versions plus récentes utilisant DNF :

sudo dnf install firewalld -y

Sur 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 firewalld

Vérifiez que le service fonctionne correctement :

sudo systemctl status firewalld

Vous 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

ZoneNiveau de confianceCas d’usage typique
dropLe plus basToutes les connexions entrantes sont supprimées sans réponse
blockTrès basLes connexions entrantes sont rejetées avec un message ICMP
publicBasZone par défaut pour les réseaux publics non fiables
externalBasPour les interfaces externes avec masquage NAT
dmzMoyenServeurs accessibles de l’extérieur mais isolés en interne
workMoyen-HautRéseaux de travail avec confiance modérée
homeHautRéseaux domestiques où les autres hôtes sont fiables
internalHautRéseaux internes, similaires à la maison
trustedLe plus hautToutes 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-zones

Exemple 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=public

Vérifiez la modification :

sudo firewall-cmd --get-default-zone

Ré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=home

Vérifiez :

sudo firewall-cmd --get-default-zone

Résultat attendu :

home

Exemple 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=work

Vérifiez :

sudo firewall-cmd --get-default-zone

Ré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-services

Autoriser 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 --permanent

Pour autoriser le trafic HTTPS (port 443/TCP) :

sudo firewall-cmd --zone=public --add-service=https --permanent

Pour 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 --permanent

Appliquer 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 --reload

Vérifier les services dans une zone

sudo firewall-cmd --zone=public --list-services

Exemple de sortie :

dhcpv6-client http https ssh

Supprimer 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 --reload

Pour ouvrir un port UDP (par exemple, le port 53 pour DNS) :

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Pour ouvrir une plage de ports (par exemple, 6000–6100 TCP) :

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Fermer un port spécifique

Pour fermer le port 8080 :

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Lister 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 --reload

Exemple 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 --reload

Exemple 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 --reload

Exemple 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 --reload

Exemple 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 --reload

Lister toutes les règles enrichies dans une zone

sudo firewall-cmd --zone=public --list-rich-rules

Supprimer 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-all

Exemple 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" accept

Afficher la configuration pour toutes les zones

sudo firewall-cmd --list-all-zones

Afficher la configuration pour une zone spécifique

sudo firewall-cmd --zone=dmz --list-all

Vérifier si un service spécifique est autorisé

sudo firewall-cmd --zone=public --query-service=http

Vé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 :

CoucheDrapeauPersistanceCas d’utilisation
Runtime*(aucun drapeau)*Perdu au rechargement/redémarrageTest temporaire de règles
Permanente--permanentSurvit au rechargement et au redémarrageConfigurations de production

Flux de travail des meilleures pratiques

  1. Testez la règle au runtime en premier (sans --permanent) pour vérifier qu’elle fonctionne comme prévu
  2. Ajoutez la règle de manière permanente une fois confirmée
  3. 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 --reload

Vous 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 --reload

Modifier la zone d’une interface

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Supprimer 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 --reload

Rediriger 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 --reload

Rediriger 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 --reload

Configurations 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 --reload

Configuration 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 --reload

Dé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 firewalld

Problè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 --reload

La 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 --reload

Problème 4 : Vérification des journaux de Firewalld

sudo journalctl -u firewalld -f

Ou vérifiez le journal système pour les messages liés au pare-feu :

sudo grep -i firewall /var/log/messages

Feuille de référence rapide Firewalld

TâcheCommande
Vérifier le statutsudo systemctl status firewalld
Démarrer Firewalldsudo systemctl start firewalld
Arrêter Firewalldsudo systemctl stop firewalld
Activer au démarragesudo systemctl enable firewalld
Obtenir la zone par défautsudo firewall-cmd --get-default-zone
Lister toutes les zonessudo firewall-cmd --get-zones
Lister les zones activessudo firewall-cmd --get-active-zones
Définir la zone par défautsudo firewall-cmd --set-default-zone=public
Ajouter un servicesudo firewall-cmd --zone=public --add-service=http --permanent
Supprimer un servicesudo firewall-cmd --zone=public --remove-service=http --permanent
Ouvrir un portsudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
Fermer un portsudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Lister les servicessudo firewall-cmd --zone=public --list-services
Lister les portssudo firewall-cmd --zone=public --list-ports
Lister toutes les règlessudo firewall-cmd --list-all
Ajouter une règle enrichiesudo firewall-cmd --zone=public --add-rich-rule='...' --permanent
Enregistrer les règles d’exécutionsudo firewall-cmd --runtime-to-permanent
Recharger Firewalldsudo firewall-cmd --reload
Mode panique (bloquer tout)sudo firewall-cmd --panic-on
Désactiver le mode paniquesudo 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 :

  1. Autorisez toujours SSH avant d’activer le pare-feu pour éviter de vous verrouiller
  2. Utilisez le --permanent flag pour toutes les règles de production, et suivez toujours avec --reload
  3. 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
  4. Examinez régulièrement vos règles de pare-feu — votre posture de sécurité doit évoluer à mesure que votre infrastructure change
  5. 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.