firewalld : Le pare-feu facile sous Linux
Table des matières
firewalld est un pare-feu sous Linux qui est facile à mettre en oeuvre et paramétrer, par rapport à iptables ou son successeur nftables.
Il est livré par défaut sous CentOS et Fedora, mais il est possible de l'installer sur d'autres distributions Linux telles que Gentoo ou Debian.
Il est à mon gout le pare-feu idéal qui allie flexibilité, simplicité et efficacité.
Il fonctionne évidemment avec IPv4 et IPv6 !
Pour suivre cet article, quelques notions de réseau et de parefeu sont recommandées
Cet article est à but de mémo et surtout c'est qu'on n'a pas beaucoup de doc de qualité et synthétisée en français sur ce parefeu !
Après avoir installé le pare-feu, celui-ci est lancé en tant que service :
Sous systemd :
Sous OpenRC :
Firewalld prévoit une commande pour vérifier son statut :
Si la commande renvoie running c'est que le pare-feu est en fonctionnement.
La commande permettant de gérer firewalld s'appelle firewall-cmd.
Firewalld est gérable en graphique avec firewall-config
Firewalld est gérable en interface web si Cockpit est installé sur a machine (utile pour les serveurs)
Concernant le comportement de la commande firewall-cmd
Une commande du style :
Prendra effet dès la validation. Cependant, si le parefeu est redémarré ou la configuration rechargée, la commande n'est pas mémorisée. Il faudra pour cela ajouter l'option --permanent à la commande :
L'option --permanent permet de rendre permanente la configuration, mais ne prend effet qu'après avoir rechargé la configuration du parefeu. Pour recharger la configuration du pare-feu :
Donc dans la suite de cet article, je préciserai avec [--permanent] en fin de ligne les commandes supportant cette option.
Vous aurez donc compris que sans, la règle s'applique de suite mais de manière éphémère, et qu'avec il est nécessaire de recharger la configuration du pare-feu après.
Firewalld fonctionne avec la notion de zone. Avant de savoir quelle zone on utilise et comment les changer et les gérer, je vous explique rapidement les zones existantes. Chaque zone dispose de règles et de comportements par défaut.
Pour voir la liste des zones créées sur la machine, on utilisera
Voici une explication concernant les différentes zones :
- drop : Niveau de confiance minimal. Toute connexion entrante est ignorée (sans notification) et les connexions sortantes sont autorisées
- block : Niveau de confiance minimal. Toute connexion entrante est ignorée (avec notification icmp-host-prohibited ou icmp6-adm-prohibited) et les connexions sortantes sont autorisées
- public : Niveau de confiance bas (zone par défaut sous CentOS) : Certaines connexions entrantes sont acceptées (ssh par exemple) et on peut en ajouter à la demande à l'aide des règles.
- external : Zone dans laquelle on va placer une interface reliée à une réseau externe (WAN par exemple) quand on utilise le serveur comme passerelle. Le MASQUERADE NAT (qu'on connait dans iptables) est activé.
- internal : Zone de l'autre côté de l'external quand on utilise le serveur comme passerelle. Cette zone est de bonne confiance, et on peut éditer les services acceptés avec des règles.
- dmz : Zone réservée pour les serveurs étant dans une DMZ (zone démilitarisée). Quelques connexions entrantes sont autorisées.
- work : Niveau de confiance bonne : Zone utilisée pour les machines de travail, La plupart des connexions entrantes sont autorisées, et on peut éditer les services acceptés avec des règles.
- home : Niveau de confiance bonne : Zone utilisée pour une zone personnelle. La plupart des connexions entrantes sont autorisées, et on peut éditer les services acceptés avec des règles.
- trusted : Niveau de confiance élevée : Zone utilisée pour les machines qui se font 100% confiance. A utiliser avec précaution évidemment.
On peut évidemment créer des zones personnalisées.
Pour voir la liste des zones créées sur la machine, on utilisera
Pour lister toutes les zones et leur paramétrage actuel, on utilisera :
Pour lister le paramétrage actuel d'une zone :
Exemple avec la zone public :
On peut créer sa propre zone, par exemple ici avec la zone "mesvps" :
Le paramétrage de la zone est vide par défaut
On peut supprimer des zones personnalisée avec :
Par défaut, quand la commande firewall-cmd est invoquée, la règle s'applique à la zone par défaut.
Pour vérifier la zone utilisée par défaut :
Et pour définir une autre zone par défaut :
Introduction
firewalld est un pare-feu sous Linux qui est facile à mettre en oeuvre et paramétrer, par rapport à iptables ou son successeur nftables.
Il est livré par défaut sous CentOS et Fedora, mais il est possible de l'installer sur d'autres distributions Linux telles que Gentoo ou Debian.
Il est à mon gout le pare-feu idéal qui allie flexibilité, simplicité et efficacité.
Il fonctionne évidemment avec IPv4 et IPv6 !
Pour suivre cet article, quelques notions de réseau et de parefeu sont recommandées
Cet article est à but de mémo et surtout c'est qu'on n'a pas beaucoup de doc de qualité et synthétisée en français sur ce parefeu !
Informations générales sur firewalld
Après avoir installé le pare-feu, celui-ci est lancé en tant que service :
Sous systemd :
Code BASH :
systemctl status firewalld
Sous OpenRC :
Code BASH :
/etc/init.d/firewalld status
Firewalld prévoit une commande pour vérifier son statut :
Code BASH :
firewall-cmd --state
Si la commande renvoie running c'est que le pare-feu est en fonctionnement.
La commande permettant de gérer firewalld s'appelle firewall-cmd.
Firewalld est gérable en graphique avec firewall-config
Firewalld est gérable en interface web si Cockpit est installé sur a machine (utile pour les serveurs)
Concernant le comportement de la commande firewall-cmd
Une commande du style :
Code BASH :
firewall-cmd --add-port=22/tcp
Prendra effet dès la validation. Cependant, si le parefeu est redémarré ou la configuration rechargée, la commande n'est pas mémorisée. Il faudra pour cela ajouter l'option --permanent à la commande :
Code BASH :
firewall-cmd --add-port=22/tcp --permanent
L'option --permanent permet de rendre permanente la configuration, mais ne prend effet qu'après avoir rechargé la configuration du parefeu. Pour recharger la configuration du pare-feu :
Code BASH :
firewall-cmd --reload
Donc dans la suite de cet article, je préciserai avec [--permanent] en fin de ligne les commandes supportant cette option.
Vous aurez donc compris que sans, la règle s'applique de suite mais de manière éphémère, et qu'avec il est nécessaire de recharger la configuration du pare-feu après.
firewalld et les zones
Concept des zones
Firewalld fonctionne avec la notion de zone. Avant de savoir quelle zone on utilise et comment les changer et les gérer, je vous explique rapidement les zones existantes. Chaque zone dispose de règles et de comportements par défaut.
Pour voir la liste des zones créées sur la machine, on utilisera
Code BASH :
firewall-cmd --get-zones
Voici une explication concernant les différentes zones :
- drop : Niveau de confiance minimal. Toute connexion entrante est ignorée (sans notification) et les connexions sortantes sont autorisées
- block : Niveau de confiance minimal. Toute connexion entrante est ignorée (avec notification icmp-host-prohibited ou icmp6-adm-prohibited) et les connexions sortantes sont autorisées
- public : Niveau de confiance bas (zone par défaut sous CentOS) : Certaines connexions entrantes sont acceptées (ssh par exemple) et on peut en ajouter à la demande à l'aide des règles.
- external : Zone dans laquelle on va placer une interface reliée à une réseau externe (WAN par exemple) quand on utilise le serveur comme passerelle. Le MASQUERADE NAT (qu'on connait dans iptables) est activé.
- internal : Zone de l'autre côté de l'external quand on utilise le serveur comme passerelle. Cette zone est de bonne confiance, et on peut éditer les services acceptés avec des règles.
- dmz : Zone réservée pour les serveurs étant dans une DMZ (zone démilitarisée). Quelques connexions entrantes sont autorisées.
- work : Niveau de confiance bonne : Zone utilisée pour les machines de travail, La plupart des connexions entrantes sont autorisées, et on peut éditer les services acceptés avec des règles.
- home : Niveau de confiance bonne : Zone utilisée pour une zone personnelle. La plupart des connexions entrantes sont autorisées, et on peut éditer les services acceptés avec des règles.
- trusted : Niveau de confiance élevée : Zone utilisée pour les machines qui se font 100% confiance. A utiliser avec précaution évidemment.
On peut évidemment créer des zones personnalisées.
Gérer les zones
Lister les zones
Pour voir la liste des zones créées sur la machine, on utilisera
Code BASH :
firewall-cmd --get-zones
Pour lister toutes les zones et leur paramétrage actuel, on utilisera :
Code BASH :
firewall-cmd --list-all-zones
Lister le paramétrage des zones
Pour lister le paramétrage actuel d'une zone :
Code BASH :
firewall-cmd --info-zone lazone
Exemple avec la zone public :
Code BASH :
# firewall-cmd --info-zone public public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client http https mdns ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Créer et supprimer des zones
On peut créer sa propre zone, par exemple ici avec la zone "mesvps" :
Code BASH :
firewall-cmd --new-zone=mesvps --permanent firewall-cmd --reload
Le paramétrage de la zone est vide par défaut
On peut supprimer des zones personnalisée avec :
Code BASH :
firewall-cmd --delete-zone=mazone --permanent firewall-cmd --reload
Gestion de la zone par défaut
Par défaut, quand la commande firewall-cmd est invoquée, la règle s'applique à la zone par défaut.
Pour vérifier la zone utilisée par défaut :
Code BASH :
firewalld-cmd --get-default-zone
Et pour définir une autre zone par défaut :
Code BASH :
firewall-cmd --set-default-zone=lazone