firewalld s'appuie sur la notion de zones : les interfaces réseau sont associées à des zones. Chaque zone contient un ensembles de règles avec un comportement par défaut.
Les zones pré-existantes :
icmp-host-prohibited ou icmp6-adm-prohibited) et connexions sortantes autorisées ;MASQUERADE NAT est activé.DMZ (zone démilitarisée). Quelques connexions entrantes sont autorisées ;# Lister les zones firewall-cmd --get-zones # Détail du paramétrage d'une zone firewall-cmd --info-zone MyZone # Lister les zones et leur paramétrage firewall-cmd --list-all-zones # Créer une zone # la zone est crée mais ne contient aucune règle firewall-cmd --new-zone=MyNewZone --permanent firewall-cmd --reload
Lorsque qu'on invoque firewall-cmd ses effets s'appliquent par défaut :
--permanent pour que la règle soit conservée après redémarrage/rechargement du service). # Afficher la zone sur laquelle s'applique # par défaut les actions de la commande firewalld-cmd --get-default-zone
Pour changer la zone par défaut :
# Passer la zone 'work' comme zone par défaut firewall-cmd --set-default-zone=work
Aux zones on peut affecter des interfaces ou des IP/réseaux source :
firewall-cmd --zone=work --add-interface=eno1 [--permanent] firewall-cmd --zone=work --add-source=192.168.22.123 [--permanent] firewall-cmd --zone=work --add-source=192.168.21.0/24 [--permanent]
Certaines fonctionnalités nécessite l'usage de modules complémentaires notamment :
Pour suivre les connexions on utilise le module conntrack
sudo firewall-cmd --zone=work --add-module=conntrack
Une fois le module activé sur la zone, on peut utiliser la commande --list-connections.
Firewalld peut journaliser les événements de pare-feu pour une analyse ultérieure. Pour activer la journalisation des trafics rejetés, utiliser l' argument --set-log-denied.
sudo firewall-cmd --set-log-denied=all
On peut transférer le trafic d'un port sur un autre port, ou bien d'un port sur une autre IP et un autre port.
Le forwarding s'utilise entre les zones external et internal.
Syntaxe :
firewall-cmd --zone=external --add-forward-port=port=:proto=:toaddr=:toport= [--permanent]
Exemple de redirection du trafic HTTP arrivant sur l'interface externe vers la machine 172.21.21.10
firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=172.21.21.10:toport=80 --permanent
Pour des besoins plus spécifiques, il est possible de créer des règles avancées désignées règles enrichies (rich rules) comprenant beaucoup plus d'options de paramétrage comme la journalisation, le masquage, la redirection de port et la limitation de débit.
Pour lister les règles enrichies existantes sur une zone :
sudo firewall-cmd --zone=public --list-rich-rules
Une règle enrichie peut contenir une plage de ports consécutifs mais pas d'ensemble anonyme nft. Pour plusieurs ports non consécutifs on créera plusieurs règles.
Pour sauvegarder, importer ou exporter la configuration du pare-feu il suffit de copier le répertoire /etc/firewalld.
La configuration est réparties dans plusieurs fichiers et sous-répertoires notamment :
firewalld.conf : Fichier de configuration principal ; zones, helpers, icmptypes, ipsets et services.