
Firewalld est un service qui fournit un firewall dynamique et personnalisable avec une interface de type D-Bus
Toutes les opérations réalisées doivent être valider avec firewall-cmd --reload si l'option --permanent a été passée pour prendre effet immédiatement ou exécuter firewall-cmd --runtime-to-permanent pour définir la configuration actuelle comme persistante
systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-10-20 11:31:32 CEST; 13min ago
Invocation: e55564e792a7441c8b4b3fc1cb827671
Docs: man:firewalld(1)
Process: 1034 ExecStartPost=/usr/bin/firewall-cmd --state (code=exited, status=0/SUCCESS)
Main PID: 992 (firewalld)
Tasks: 2 (limit: 10680)
Memory: 47.5M (peak: 70M)
CPU: 448ms
CGroup: /system.slice/firewalld.service
└─992 /usr/bin/python3 -sP /usr/sbin/firewalld --nofork --nopid
oct. 20 11:31:32 rhel-srv systemd[1]: Starting firewalld.service - firewalld - dynamic firewall daemon...
oct. 20 11:31:32 rhel-srv systemd[1]: Started firewalld.service - firewalld - dynamic firewall daemon.
firewall-cmd --state
running
Le service est bien actif
Vous pouvez utiliser le service firewalld pour diviser les réseaux en différentes zones selon le niveau de confiance que vous accordez aux interfaces et au trafic au sein de ce réseau. Une connexion ne peut appartenir qu'à une seule zone, mais vous pouvez utiliser cette zone pour plusieurs connexions réseau.
L'utilisation des zones permet de cloisoner les réseaux en fonction du niveau de confiance avec les interfaces. Chaque zone possède ses règles et comportements par défaut. Il est possible d'affecter des zones aux interfaces ou à des sources
firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work
firewall-cmd --get-default-zone
public
La zone utilisée par défaut est public
firewall-cmd --list-all --zone=public
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: br-ethlab ens18 ens19
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:firewall-cmd --get-services
renvoi une énumération exhaustive de tous les services
firewall-cmd --list-services
cockpit dhcpv6-client ssh
Liste les services autorisés dans la zone courante (public)
firewall-cmd --list-services --zone internal
cockpit dhcpv6-client mdns samba-client ssh
liste les services autorisés dans une zone
firewall-cmd --info-service=http
http
ports: 80/tcp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
Fourni des informations sur le service http en particulier
firewall-cmd --add-service=http
success
firewall-cmd --list-services
cockpit dhcpv6-client http ssh
--permanent pour que cette configuration soit persistente
firewall-cmd --add-service=http --permanent
success
firewall-cmd --reload
success
firewall-cmd --list-services --permanent
cockpit dhcpv6-client http ssh
firewall-cmd --add-service=http --permanent --zone work
success
firewall-cmd --reload
success
firewall-cmd --list-services --zone=work
cockpit dhcpv6-client http ssh
firewall-cmd --list-ports
Aucun port n'est ouvert actuellement
firewall-cmd --add-port=8080/tcp
success
firewall-cmd --list-ports
8080/tcp
De façon permanente
firewall-cmd --add-port=8080/tcp --permanent
success
firewall-cmd --reload
success
firewall-cmd --list-ports --permanent
8080/tcp
Pour une plage de ports
firewall-cmd --add-port=8081-8088/tcp --permanent
success
firewall-cmd --reload
success
firewall-cmd --list-ports --permanent
8080/tcp 8081-8088/tcp
Fermer un port
firewall-cmd --remove-port=8080/tcp --permanent
success
firewall-cmd --reload
success
firewall-cmd --list-ports --permanent
8081-8088/tcp
Une interface ne peut appartenir qu'à une seule zone à la fois
Lister les interfaces et leur zone
firewall-cmd --get-active-zones
public (default)
interfaces: br-ethlab ens19 ens18
Changer la zone d'une interface
firewall-cmd --change-interface=ens19 --zone=work
success
firewall-cmd --get-active-zones
public (default)
interfaces: br-ethlab ens18
work
interfaces: ens19
firewall-cmd --remove-interface=ens19 --zone=work
success
firewall-cmd --get-active-zones
public (default)
interfaces: br-ethlab ens18
firewall-cmd --add-interface=ens19 --zone=dmz --permanent
The interface is under control of NetworkManager, setting zone to 'dmz'.
success
firewall-cmd --reload
success
firewall-cmd --get-active-zones
dmz
interfaces: ens19
public (default)
interfaces: br-ethlab ens18
Ajouter une adresse IP à la zone trusted
firewall-cmd --zone=trusted --add-source=192.168.10.181
success
Ajouter un sous-réseau à la zone work
firewall-cmd --zone=work --add-source=192.168.10.0/24
success
Application de la configuration
firewall-cmd --runtime-to-permanent
success
Vérification
firewall-cmd --list-sources --zone trusted
192.168.10.181
firewall-cmd --list-sources --zone work
192.168.10.0/24
Supprimer une source
firewall-cmd --remove-source=192.168.10.181 --zone=trusted
success
firewall-cmd --runtime-to-permanent
success
Lister les types IP set utilisables
firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
Créer une IP set avec un nom explicite
firewall-cmd --new-ipset=allowlist --type=hash:ip --permanent
success
Incrémenter la liste allowlist avec des adresses IP
firewall-cmd --ipset=allowlist --add-entry=192.168.10.55 --permanent
success
Créer une règle basée sur la liste allowlist pour la zone trusted
firewall-cmd --add-source=ipset:allowlist --zone=trusted --permanent
success
firewall-cmd --reload
success
Afficher les listes IP set
firewall-cmd --get-ipsets
allowlist
Afficher le contenu d'une liste IP set
Les listes sont stockées dans /etc/firewalld/ipsets/
cat /etc/firewalld/ipsets/allowlist.xml
<?xml version="1.0" encoding="utf-8"?>
<ipset type="hash:ip">
<entry>192.168.10.55</entry>
</ipset>
Ou
firewall-cmd --info-ipset=allowlist
allowlist
type: hash:ip
options:
entries: 192.168.10.55
Ajouter dynamiquement des adresses IP dans la liste allowlist
firewall-cmd --ipset=allowlist --add-entry=192.168.10.45 --permanent
success
firewall-cmd --reload
success
Créer une liste IP set pour les sous-réseaux nommé allownetlist
firewall-cmd --new-ipset=allownetlist --type=hash:net --permanent
success
firewall-cmd --ipset=allownetlist --add-entry=192.168.0.0/24 --permanent
success
firewall-cmd --reload
success
Vérifications
firewall-cmd --info-ipset=allowlist
allowlist
type: hash:ip
options:
entries: 192.168.10.55 192.168.10.45
firewall-cmd --info-ipset=allownetlist
allownetlist
type: hash:net
options:
entries: 192.168.0.0/24
Créer un fichier contenant une liste d'adresses IP pour alimenter une liste IP set
vim iplist
192.168.10.200
192.168.10.201
192.168.10.203
firewall-cmd --new-ipset=filelist --type=hash:ip --permanent
success
firewall-cmd --ipset=filelist --add-entries-from-file=iplist --permanent
success
firewall-cmd --ipset=filelist --get-entries
192.168.10.200
192.168.10.201
192.168.10.203firewall-cmd --ipset=filelist --remove-entries-from-file=iplist --permanent
success
firewall-cmd --reload
success
Ces règles ont une pripriéte plus élevée
Refuser une ip pour le service ssh
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.10.181" service name="ssh" drop' --permanent
success
Autoriser un sous-réseau pour le service http
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name=http accept' --permanent
success
Valider
firewall-cmd --reload
success
Vérification
firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.1.0/24" service name="http" accept
rule family="ipv4" source address="192.168.10.181" service name="ssh" drop
Redirection de port
firewall-cmd --add-rich-rule='rule family="ipv4" forward-port port="8888" protocol="tcp" to-port="80"' --permanent --zone=public
success
firewall-cmd --reload
success
_Redirige le port 8888 vers le port 80 dans la zone public_
Vérification
firewall-cmd --list-rich-rules --zone=public
rule family="ipv4" forward-port port="8888" protocol="tcp" to-port="80"
rule family="ipv4" source address="192.168.1.0/24" service name="http" accept
rule family="ipv4" source address="192.168.10.181" service name="ssh" drop
Supprimer la règle précedement créée
firewall-cmd --remove-rich-rule='rule family="ipv4" forward-port port="8888" protocol="tcp" to-port="80"'
firewall-cmd --reload
success
L'option --direct permet d'utiliser la syntaxe iptables/ip6tables à travers firewalld, cela contourne le système par zones et permet d'accéder aux tables et chaînes bas niveau. Le risque de conflis est important avec les règles natives de firewalld
firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -p udp --dport 53 -j DROP
success
ipv4 → famille d'adressage ipfilter OUTPUT → trafic sortant0 → priorité la plus haute-p udp → protocole choisi--dport 53 → port de destination choisi-j DROP → décisionVérification
firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 0 -p udp --dport 53 -j DROP
Supprimer la règle précédemment créé
firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -p udp --dport 53 -j DROP
success
Afficher l'ensemble de la configuration de firewalld
firewall-cmd --list-all-zones
Exporter la configuration actuellement appliquée dans un fichier
firewall-cmd --list-all-zones > firewalld_config.old
Créer une archive tar du dossier /etc/firewalld
tar -cf firewalld_backup.tar /etc/firewalld/
Réinitialiser la configuration d'origine → détruit toute la configuration
firewall-cmd --reset-to-defaults
success
firewall-cmd --reload
success
Vérification
firewall-cmd --list-all-zones
On constate que l'ensemble des règles précédemment configurées ne sont plus en place
Restaurer l'ancienne configuration
tar -xf firewalld_backup.tar -C /
firewall-cmd --reload
success
Vérification
firewall-cmd --list-all --zone=public
public (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: br-ethlab ens18
sources:
services: cockpit dhcpv6-client http ssh
ports: 8081-8088/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" forward-port port="8888" protocol="tcp" to-port="80"
rule family="ipv4" source address="192.168.1.0/24" service name="http" accept
rule family="ipv4" source address="192.168.10.181" service name="ssh" drop
Les anciennes règles sont à nouveau en place
Objectif:
Création de la nouvelle zone
firewall-cmd --new-zone=labzone --permanent
Définition d'une nouvelle règle autorisant http dans la zone labzone
firewall-cmd --add-service=http --zone=labzone --permanent
Définition d'une règle pour autoriser l'accès sur le port 2222/tcp dans la zone labzone
firewall-cmd --add-port=2222/tcp --zone=labzone --permanent
Définition d'une règle pour interdire le port 2222/tcp au sous-réseau 192.168.20.0/24 dans la zone labzone
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" port port="2222" protocol="tcp" drop' --zone=labzone --permanent
Ajouter l'interface ens19 dans la zone labzone
firewall-cmd --change-interface=ens19 --zone=labzone --permanent
The interface is under control of NetworkManager, setting zone to 'labzone'.
Appliquer la configuration et définir labzone comme zone par défaut
firewall-cmd --reload
firewall-cmd --set-default-zone=labzone
firewall-cmd --runtime-to-permanent
Verification
firewall-cmd --list-all --zone=labzone
labzone (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: ens19
sources:
services: http
ports: 2222/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.20.0/24" port port="2222" protocol="tcp" drop
systemctl status firewalld.service → état du service firewalldfirewall-cmd --state → vérifier si firewalld est actiffirewall-cmd --list-all-zones → informations détaillées sur l'ensemble des zonesfirewall-cmd --list-all → informations détaillées sur la zone courantefirewall-cmd --list-services → liste les services autorisés dans la zone courantefirewall-cmd --list-sources → liste les sources autorisés dans la zone courantefirewall-cmd --list-interfaces → liste les interfaces liées à la zone courantefirewall-cmd --get-active-zones → affiche les sources et interfaces des zones pour lesquelles une configuration a été appliquéeSources principales:
man firewall-cmd