Firewalld en exemples : un guide complet du débutant
Ce guide vous apprendra tout ce que vous devez savoir pour démarrer avec firewalld afin d'ajouter, modifier et supprimer des règles de vos zones de pare-feu.
De nos jours, configurer et mettre en œuvre un pare-feu fiable pour vos serveurs et votre réseau est indispensable. Sans cela, la question n'est plus de savoir si mais quand les attaques malveillantes vous feront du mal, malheureusement, elles sont courantes sur Internet de nos jours.
C'est là que Firewalld entre en jeu. Firewalld, le pare-feu par défaut des distributions Linux telles que Red Hat Enterprise Linux, Fedora, Oracle Linux, openSUSE, AlmaLinux, Rocky Linux et autres, offre toute la protection dont vous avez besoin pour sécuriser vos serveurs et votre réseau. Mais avant d’aborder comment l’utiliser, expliquons d’abord ce que c’est.
Qu’est-ce que Firewalld ?
Firewalld est un outil de gestion de pare-feu basé sur des zones qui fournit un pare-feu géré dynamiquement avec prise en charge des zones réseau qui définissent le niveau de confiance pour les connexions ou interfaces réseau.
De plus, il agit comme une interface pour le framework Netfilter du noyau Linux, fournissant une fonctionnalité de pare-feu.
Contrairement aux chaînes iptables, elle gère les règles de pare-feu à l'aide de zones et de services. Ces règles sont utilisées pour trier le trafic entrant et déterminer s'il doit être bloqué ou autorisé.
Comment gérer les règles de pare-feu avec Firewalld
Le principal outil de gestion des règles Firewalld est firewall-cmd. Il s’agit d’un outil de ligne de commande qui fournit une interface pour gérer le runtime et la configuration permanente de Firewalld. Lorsque vous l'utilisez, les modifications prennent effet immédiatement et il n'est pas nécessaire de redémarrer le service.
Vérification de l'état du pare-feu
Exécutez la commande suivante pour voir si votre pare-feu est actif :
sudo firewall-cmd --stateLe résultat doit indiquer « en cours d'exécution » ou « pas en cours d'exécution ».
De plus, pour afficher l'état du service Firewalld, exécutez ce qui suit :
sudo systemctl status firewalldSi le service n'est pas démarré pour une raison quelconque, vous pouvez le démarrer et le configurer pour qu'il démarre automatiquement lorsque le système démarre en mode exécution :
sudo systemctl start firewalld
sudo systemctl enable firewalldDe même, vous pouvez arrêter et désactiver le démarrage automatique du service Firewalld en procédant comme suit :
sudo systemctl stop firewalld
sudo systemctl disable firewalldZones et interfaces
Firewalld, comme indiqué précédemment, est un pare-feu basé sur des zones. Mais qu’est-ce que cela signifie exactement et que sont les zones ?
En bref, ils constituent un composant de premier niveau de l’organisation Firewalld. Ainsi, les zones peuvent fournir différents niveaux de sécurité pour différentes zones de connexion. L'idée est d'avoir des mesures de sécurité distinctes pour différentes zones du réseau.
Chaque zone est connectée à au moins une interface réseau – du matériel ou une carte réseau virtuelle. Obtenir une liste des zones Firewalld préconfigurées est simple. Tapez la commande :
sudo firewall-cmd --get-zonesComme vous pouvez le constater, les zones répertoriées par défaut sont :
- bloquer : les connexions réseau entrantes sont rejetées avec un message icmp-host-prohibited. Seules les connexions réseau initiées par ce système sont autorisées.
- dmz : pour les ordinateurs accessibles au public dans votre zone démilitarisée avec un accès limité à votre réseau interne. Seules certaines connexions entrantes sont acceptées.
- drop : toutes les connexions réseau entrantes sont abandonnées et aucune réponse n'est envoyée. Seules les connexions réseau sortantes sont autorisées.
- externe : pour une utilisation sur des réseaux externes avec le masquage activé, principalement des routeurs. Vous ne faites pas confiance aux autres ordinateurs des réseaux pour ne pas nuire au vôtre. Seuls certains types de connexions entrantes sont acceptés.
- home : pour une utilisation dans une maison. Vous faites généralement confiance aux autres ordinateurs des réseaux pour ne pas nuire au vôtre. Seuls certains types de connexions entrantes sont acceptés.
- interne : pour une utilisation sur les réseaux internes. Vous êtes généralement sûr que les autres ordinateurs du réseau n'endommageront pas votre ordinateur. Seules certaines connexions entrantes sont acceptées.
- public : pour une utilisation sur des réseaux externes. Vous ne faites pas confiance aux autres ordinateurs des réseaux pour ne pas nuire au vôtre. Seuls certains types de connexions entrantes sont acceptés.
- de confiance : toute connexion réseau est autorisée.
- travail : pour une utilisation sur les lieux de travail. Vous êtes généralement sûr que les autres ordinateurs des réseaux n'endommageront pas votre ordinateur. Seules certaines connexions entrantes sont acceptées.
Si vous n’avez apporté aucune modification supplémentaire, la zone par défaut de Firewalld est définie sur « publique ». Pour vérifier la zone par défaut :
sudo firewall-cmd --get-default-zonePour modifier la zone par défaut, par exemple « domicile », saisissez :
sudo firewall-cmd --set-default-zone=homePour répertorier les zones actives et les interfaces réseau qui leur sont attribuées, exécutez la commande suivante :
sudo firewall-cmd --get-active-zones
Pour attribuer une interface réseau (enp1s0 dans notre cas) à une autre zone, comme « home », tapez :
sudo firewall-cmd --zone=home --change-interface=enp1s0N'oubliez pas que si vous n'avez qu'une seule interface réseau sur votre système et que vous l'attribuez à une autre zone, cette zone deviendra active par défaut.
Pour obtenir toutes les configurations pour une zone spécifique, par exemple « publique », exécutez :
sudo firewall-cmd --zone=public --list-allDe même, pour obtenir les configurations de toutes les zones à la fois :
sudo firewall-cmd --list-all-zonesAutoriser et refuser par nom de service
Firewalld peut autoriser le trafic pour des services réseau spécifiques en fonction de règles prédéfinies. La méthode la plus simple consiste à ajouter les services que vous devez autoriser aux zones que vous utilisez.
Bien entendu, vous devez d’abord connaître le nom du service. Mais il est difficile de retenir les noms de tous les services, même s’ils correspondent aux attentes. Ainsi, en utilisant la commande suivante, nous pouvons afficher les noms de tous ceux prédéfinis disponibles.
sudo firewall-cmd --get-servicesVous pouvez trouver plus de détails sur ces services dans leur fichier .xml associé dans le répertoire /usr/lib/firewalld/services. Par exemple, le service MySQL est défini comme suit :
cat /usr/lib/firewalld/services/mysql.xmlSupposons que nous souhaitions activer le service MySQL. Pour ce faire, nous ajoutons le nom du service après --add-service= à la commande firewalld-cmd et utilisons le --zone= option pour spécifier à quelle zone attribuer le service.
sudo firewall-cmd --zone=public --add-service=mysqlRevérifions maintenant les détails de la zone « publique ».
sudo firewall-cmd --zone=public --list-allSuper. Nous avons ajouté une règle de pare-feu qui autorise les connexions entrantes au serveur MySQL. Toutefois, cette règle est temporaire. Cela signifie que la règle ne survivra pas lors d'un redémarrage du système.
Pour assurer la persistance de la règle, il faut ajouter l'option --permanent à la commande. De cette façon, même après un redémarrage, Firewalld le chargera automatiquement.
sudo firewall-cmd --zone=public --add-service=mysql --permanentIl faut noter un détail important : ajouter une règle sans l'option --permanent la rend disponible et effective immédiatement. Cependant, l'utilisation de --permanent n'aura aucun effet jusqu'au redémarrage du système.
Ainsi, pour rendre notre nouvelle règle permanente active immédiatement, nous devons recharger le Firewalld en exécutant :
sudo firewall-cmd --reloadDe cette façon, nous rechargeons les règles du pare-feu tout en préservant les informations d'état. En d’autres termes, la configuration permanente actuelle deviendra une nouvelle configuration d’exécution.
Voyons maintenant comment supprimer les règles de notre pare-feu. La procédure est presque identique à l'ajout, mais l'option --remove-service est utilisée cette fois.
Par exemple, pour supprimer le service MySQL, nous devons émettre la commande suivante :
sudo firewall-cmd --zone=public --remove-service=mysqlEncore une fois, pour supprimer l'accès définitivement, nous devons ajouter l'option --permanent puis recharger les règles pour que la modification prenne effet immédiatement.
sudo firewall-cmd --zone=public --remove-service=mysql --permanent
sudo firewall-cmd --reloadAutoriser et refuser par numéro de port
Cependant, nous devons parfois autoriser l'accès en spécifiant un numéro de port. Par exemple, supposons que vous ayez un service qui écoute sur le port TCP non standard 10069. Nous aurons donc besoin d'autre chose que de prédéfinir les services par leur nom.
Heureusement, Firewalld propose un moyen d'autoriser l'accès par port et protocole entièrement identique à celui des noms de services. Par exemple, pour autoriser le trafic vers le port 10069 sur TCP, exécutez :
sudo firewall-cmd --zone=public --add-port=10069/tcpNous vérifions les ports autorisés en exécutant :
sudo firewall-cmd --zone=public --list-portsBien entendu, nous pouvons également avoir une vue d’ensemble de l’ensemble de la zone de manière familière :
sudo firewall-cmd --zone=public --list-allLes mêmes règles de persistance s'appliquent ici que lors de l'utilisation de noms de service. Par conséquent, pour garantir que notre règle de pare-feu survit entre les redémarrages, nous devons exécuter ce qui suit :
sudo firewall-cmd --zone=public --add-port=10069/tcp --permanent
sudo firewall-cmd --reloadDe plus, si le port que vous souhaitez activer utilise le protocole UDP au lieu de TCP, vous devez remplacer tcp par udp dans le firewall-cmd doubler.
L'approche pour supprimer un port de la liste des règles est identique, la seule différence étant le remplacement de --add-port= par le --remove-port= option.
sudo firewall-cmd --zone=public --remove-port=10069/tcp --permanent
sudo firewall-cmd --reloadRègles riches en pare-feu
Ceux qui sont familiers avec iptables seront à l'aise avec les règles riches de Firewall. Comme leur nom l'indique, ils vous permettent de construire des règles complexes avec plusieurs critères qui ne peuvent pas être obtenus à l'aide d'un nom ou de règles basées sur les ports.
En d'autres termes, les règles riches du pare-feu offrent un niveau de contrôle beaucoup plus élevé grâce à des options granulaires plus personnalisées. En outre, ils peuvent également configurer la journalisation, le masquage, la redirection de port et la limitation de débit.
Leur utilisation peut avoir d'innombrables variantes, donc si vous souhaitez en savoir plus sur eux, vous devriez consulter la documentation officielle. Ici, nous fournirons quelques exemples simplifiés pour vous donner une idée de ce que vous pouvez faire avec les règles riches de Firewalld.
Par exemple, supposons que nous souhaitions autoriser l'accès au serveur MySQL qui, comme nous le savons, écoute sur le port 3306 à partir de l'adresse IP 192.168.1.69. La règle ressemblerait à ceci :
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port=3306 protocol=tcp accept'Comme pour les règles basées sur le nom et le port, les règles riches de Firewalld ne sont pas persistantes à moins que l'indicateur --permanent ne soit spécifié.
La commande pour supprimer cette règle est identique à celle ci-dessus, sauf que l'option --add-rich-rule doit être remplacée par --remove-rich-rule.
sudo firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" accept'Si nous voulons faire l'inverse et bloquer l'accès au serveur MySQL à partir de l'adresse IP 192.168.1.69, notre règle serait :
sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.69" port port="3306" protocol="tcp" reject'Comme dernier exemple, nous souhaitons rediriger tout le trafic entrant du port 80 vers le port 8080 sur l'hôte 192.168.1.200, où nous avons installé un serveur Tomcat. Pour y parvenir, notre règle riche de Firewalld devrait être :
sudo firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=192.168.1.200'Vous pouvez consulter les règles enrichies en exécutant la commande suivante :
sudo firewall-cmd --zone=public --list-rich-rulesConclusion
Ceci conclut notre guide. J'espère que vous l'avez trouvé utile. Vous devriez maintenant bien comprendre ce qu'est Firewalld et comment l'utiliser pour sécuriser vos ordinateurs et votre réseau. Sa connaissance vous permettra d’utiliser la flexibilité et la puissance de l’outil.
Pour un aperçu plus approfondi de Firewalld, visitez la documentation officielle ou consultez cet article sur le site Web de Red Hat, qui sont les auteurs de Firewalld.


















