Recherche de site Web

Comment installer, configurer et utiliser Firewalld dans CentOS et Ubuntu


Firewalld (démon de pare-feu) est une alternative au service iptables, pour gérer dynamiquement le pare-feu d'un système avec prise en charge des zones réseau (ou pare-feu) et fournit une interface D-Bus pour gérer les configurations. Il est facile à utiliser et à configurer, et c'est désormais l'outil de gestion de pare-feu par défaut sur RHEL/CentOS, Fedora et plusieurs autres distributions Linux.

Dans cet article, nous verrons comment configurer le pare-feu système avec firewalld et implémenter le filtrage de paquets de base dans CentOS/RHEL 7 et Ubuntu.

Les bases du pare-feu

Firewalld comprend trois couches :

  • couche principale : responsable de la gestion de la configuration et des back-ends (répertoriés ci-dessous).
  • Interface D-Bus : le principal moyen de modifier et de créer la configuration du pare-feu.
  • backends : pour interagir avec netfilter (le module natif du noyau utilisé pour le pare-feu). Ils incluent iptables, ip6tables, ebtables, ipset, nft, linnftables ; gestionnaire de réseau; et modules.

Il gère les règles de pare-feu en implémentant des zones réseau/pare-feu qui définissent le niveau de confiance des connexions ou interfaces réseau. Les autres fonctionnalités de pare-feu prises en charge incluent les services, la configuration directe (utilisée pour transmettre directement la syntaxe iptables brute), les IPSets ainsi que les types ICMP.

Deux types d'environnements de configuration sont pris en charge par firewalld :

  • configuration d'exécution qui n'est efficace que jusqu'au redémarrage de la machine ou jusqu'au redémarrage du service firewalld
  • configuration permanente qui est enregistrée et fonctionne de manière persistante.

L'outil de ligne de commande firewall-cmd est utilisé pour gérer le runtime et la configuration permanente. Vous pouvez également utiliser l'outil de configuration de l'interface utilisateur graphique (GUI) firewall-config pour interagir avec le démon.

De plus, firewalld offre une interface bien définie permettant à d'autres services ou applications locaux de demander directement des modifications aux règles de pare-feu, s'ils s'exécutent avec les privilèges root.

Le fichier de configuration globale de firewalld se trouve dans /etc/firewalld/firewalld.conf et les fonctionnalités du pare-feu sont configurées au format XML.

Comprendre les fonctionnalités importantes du pare-feu

La fonctionnalité centrale de firewalld concerne les zones réseau/pare-feu. Toutes les autres entités sont limitées à une zone. Une zone de pare-feu décrit le niveau de confiance pour une connexion, une interface ou une liaison d'adresse source.

La configuration par défaut est livrée avec un certain nombre de zones prédéfinies triées en fonction du niveau de confiance par défaut des zones, de non fiable à fiable : drop, block, public, external, dmz, work, home, internal et trust. Ils sont définis dans des fichiers stockés dans le répertoire /usr/lib/firewalld/zones.

Vous pouvez configurer ou ajouter vos zones personnalisées à l'aide du client CLI ou simplement créer ou copier un fichier de zone dans /etc/firewalld/zones à partir de fichiers existants et le modifier.

Un autre concept important sous firewalld est celui des services. Un service est défini à l'aide de ports et de protocoles ; ces définitions représentent un service réseau donné tel qu'un serveur Web ou un service d'accès à distance. Les services sont définis dans des fichiers stockés dans le répertoire /usr/lib/firewalld/services/ ou /etc/firewalld/services/.

Si vous connaissez les concepts de base d'iptables/ip6tables/ebtables, vous pouvez également utiliser l'interface directe (ou la configuration) pour accéder directement au pare-feu. Mais, pour ceux qui n'ont aucune connaissance d'iptables, vous pouvez utiliser le langage riche pour créer des règles de pare-feu plus complexes pour IPv4 et IPv6.

Comment installer le package Firewalld sous Linux

Sur CentOS 7, le package firewalld est préinstallé et vous pouvez le vérifier à l'aide de la commande suivante.

rpm -qa firewalld

Sur Ubuntu 16.04 et 18.04, vous pouvez l'installer à l'aide du gestionnaire de packages par défaut, comme indiqué.

sudo apt install firewalld

Comment gérer le service Firewalld sous Linux

Firewalld est un service systemd standard qui peut être géré via la commande systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Après avoir démarré le service firewalld, vous pouvez également vérifier si le démon est en cours d'exécution ou non, à l'aide de l'outil firewall-cmd (s'il n'est pas actif, cette commande affichera « not en cours d'exécution ").

sudo firewall-cmd --state

Si vous enregistrez des modifications de manière permanente, vous pouvez recharger firewalld. Cela rechargera les règles du pare-feu et conservera les informations d'état. La configuration permanente actuelle deviendra une nouvelle configuration d'exécution.

sudo firewall-cmd --reload

Comment travailler avec les zones de pare-feu dans Firewalld

Pour obtenir une liste de toutes les zones et services de pare-feu disponibles, exécutez ces commandes.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

La zone par défaut est la zone utilisée pour chaque fonctionnalité de pare-feu qui n'est pas explicitement limitée à une autre zone. Vous pouvez obtenir la zone par défaut définie pour les connexions et les interfaces réseau en exécutant.

sudo firewall-cmd --get-default-zone

Pour définir la zone par défaut, par exemple sur externe, utilisez la commande suivante. Notez que l'ajout de l'option --permanent définit la configuration de manière permanente (ou permet d'interroger des informations à partir de l'environnement de configuration permanent).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Voyons ensuite comment ajouter une interface à une zone. Cet exemple montre comment ajouter votre adaptateur réseau sans fil (wlp1s0) à la zone domestique, qui est utilisée dans les zones résidentielles.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Une interface ne peut être ajoutée qu’à une seule zone. Pour le déplacer vers une autre zone, utilisez le commutateur --change-interface comme indiqué, ou supprimez-le de la zone précédente à l'aide du commutateur –remove-interface, puis ajoutez-le vers la nouvelle zone.

En supposant que vous souhaitiez vous connecter à un réseau WI-FI public, vous devez replacer votre interface sans fil dans la zone publique, comme ceci :

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Vous pouvez utiliser plusieurs zones en même temps. Pour obtenir une liste de toutes les zones actives avec les fonctionnalités activées telles que les interfaces, les services, les ports, les protocoles, exécutez :

sudo firewall-cmd --get-active-zones

Par rapport au point précédent, si vous souhaitez trouver plus d'informations sur une zone particulière, c'est-à-dire tout ce qui y est ajouté ou activé, utilisez l'une de ces commandes :

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Une autre option utile est --get-target, qui vous montre la cible d'une zone permanente. Une cible est l'une des suivantes : par défaut, ACCEPT, DROP, REJECT. Vous pouvez vérifier la cible de différentes zones :

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Comment ouvrir et bloquer des ports dans Firewalld

Pour ouvrir un port (ou une combinaison port/protocole) dans le pare-feu, ajoutez-le simplement dans une zone avec l'option --add-port. Si vous ne spécifiez pas explicitement la zone, elle sera activée dans la zone par défaut.

L'exemple suivant montre comment ajouter les ports 80 et 443 pour autoriser le trafic Web entrant via HTTP et HTTPS . protocoles respectivement :

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Ensuite, rechargez firewalld et vérifiez à nouveau les fonctionnalités activées dans la zone publique, vous devriez pouvoir voir les ports qui viennent d'être ajoutés.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Bloquer ou fermer un port dans le pare-feu est tout aussi simple, il suffit de le supprimer d'une zone avec l'option --remove-port. Par exemple, pour fermer les ports 80 et 443 dans la zone publique.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Au lieu d'utiliser un port ou une combinaison port/protocole, vous pouvez utiliser le nom de service auquel un port est attribué, comme expliqué dans la section suivante.

Comment ouvrir et bloquer des services dans Firewalld

Pour ouvrir un service dans le pare-feu, activez-le à l'aide de l'option --add-service. Si la zone est omise, la zone par défaut sera utilisée.

La commande suivante activera définitivement le service http dans la zone publique.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

L'option --remove-service peut être utilisée pour désactiver un service.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Comment activer et désactiver le masquage IP à l'aide de Firewalld

Le IP Masquerading (également connu sous le nom de IPMASQ ou MASQ) est un NAT (Traduction d'adresses réseau.) mécanisme dans les réseaux Linux qui permet à vos hôtes dans un réseau, avec des adresses IP privées de communiquer avec Internet en utilisant l'adresse IP publique attribuée à votre serveur Linux (passerelle IPMASQ).

Il s'agit d'une cartographie un-à-plusieurs. Le trafic provenant de vos hôtes invisibles apparaîtra sur les autres ordinateurs sur Internet comme s'il provenait de votre serveur Linux.

Vous pouvez activer le masquage IP dans une zone souhaitée, par exemple la zone publique. Mais avant de faire cela, vérifiez d'abord si le masquage est actif ou non (un « non » signifie qu'il est désactivé et un « oui » signifie le contraire).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Un cas d’utilisation typique du masquage consiste à effectuer une redirection de port. Supposons que vous souhaitiez effectuer une connexion SSH depuis une machine distante vers un hôte de votre réseau interne avec l'adresse IP 10.20.1.3, sur laquelle le démon sshd écoute sur le port 5000.

Vous pouvez transférer toutes les connexions vers le port 22 de votre serveur Linux vers le port prévu sur votre hôte cible en émettant :

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Pour désactiver le masquage dans une zone, utilisez le commutateur --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Comment activer et désactiver le message IMCP dans Firewalld

Les messages ICMP (Internet Control Message Protocol) sont soit des demandes d'informations, soit des réponses à des demandes d'informations ou à des conditions d'erreur.

Vous pouvez activer ou désactiver les messages ICMP dans le pare-feu, mais avant cela, répertoriez d'abord tous les types ICMP pris en charge.

sudo firewall-cmd --get-icmptypes

Pour ajouter ou supprimer un type de bloc souhaité.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Vous pouvez afficher tous les types icmp ajoutés dans une zone à l'aide du commutateur --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Comment utiliser l'interface directe pour transmettre les commandes iptables brutes

Le firewall-cmd fournit également des options directes (--direct) pour vous permettre d'obtenir un accès plus direct au pare-feu. Ceci est utile pour ceux qui ont des connaissances de base sur iptables.

Important : vous ne devez utiliser les options directes qu'en dernier recours lorsqu'il n'est pas possible d'utiliser les options firewall-cmd normales expliquées ci-dessus.

Voici un exemple de la façon de transmettre la règle iptables brute, en utilisant le commutateur --add-rules. Vous pouvez facilement supprimer ces règles en remplaçant --add-rule par --remove-rule :

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Pour plus d'informations sur iptables, consultez ce guide : Comment configurer un pare-feu Iptables pour activer l'accès à distance aux services sous Linux.

Si vous n'êtes pas familier avec la syntaxe iptables, vous pouvez opter pour le « langage riche » de firewalld pour créer des règles de pare-feu plus complexes d'une manière facile à comprendre, comme expliqué ci-dessous.

Comment utiliser un langage riche dans Firewalld

Le langage riche (également appelé règles riches) est utilisé pour ajouter des règles de pare-feu plus complexes pour IPv4 et IPv6. sans la connaissance de la syntaxe iptables.

Il étend les fonctionnalités de zone (service, port, bloc icmp, mascarade et port avancé) que nous avons couvertes. Il prend en charge les adresses source et de destination, la journalisation, les actions et les limites des journaux et des actions.

Le --add-rich-rule est utilisé pour ajouter des règles riches. Cet exemple montre comment autoriser de nouvelles connexions IPv4 et IPv6 pour le service http et enregistrer 1 par minute à l'aide de l'audit :

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Pour supprimer la règle ajoutée, remplacez l'option --add-rich-rule par --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Cette fonctionnalité permet également de bloquer ou d'autoriser le trafic provenant d'une adresse IP spécifique. L'exemple suivant montre comment rejeter les connexions depuis l'adresse IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Comment activer et désactiver le mode panique dans Firewalld

Le Mode panique est un mode spécial sous pare-feu dans lequel tous les paquets entrants et sortants sont abandonnés et les connexions actives expireront une fois activées.
Vous pouvez activer ce mode dans des situations d'urgence où il existe une menace pour votre environnement réseau.

Pour interroger le mode panique, utilisez l'option --query-panic.

sudo firewall-cmd --query-panic

Pour activer le mode panique, utilisez l'option --panic-on. Vous pouvez tester s'il fonctionne à l'aide de la commande ping comme indiqué. Le paquet étant supprimé, le nom www.google.com ne peut pas être résolu, d'où l'erreur affichée.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Pour désactiver le mode panique, utilisez l'option --panic-off.

sudo firewall-cmd --panic-off

Comment verrouiller le pare-feu

N'oubliez pas que nous avons mentionné dans les principes de base de firewalld que les applications ou services locaux peuvent modifier la configuration du pare-feu s'ils s'exécutent avec les privilèges root. Vous pouvez contrôler quelles applications peuvent demander des modifications du pare-feu, en les spécifiant dans une liste blanche de verrouillage.

Cette fonctionnalité est désactivée par défaut, vous pouvez l'activer ou la désactiver avec le commutateur --lockdown-on ou --lockdown en réception.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Notez qu'il est recommandé d'activer ou de désactiver cette fonctionnalité en modifiant le fichier de configuration principal, car le pare-feu-cmd peut ne pas exister sur la liste blanche de verrouillage lorsque vous activez le verrouillage.

sudo vim /etc/firewalld/firewalld.conf

Recherchez le paramètre Lockdown et changez sa valeur de no (signifie désactivé) à oui (signifie activé).

Lockdown=yes

Pour rendre ce paramètre permanent, rechargez firewalld.

sudo firewall-cmd --reload
Résumé

Firewalld est un remplacement facile à utiliser du service iptables, qui utilise iptables comme backend. Dans cet article, nous avons montré comment installer le package pare-feu, expliqué les fonctionnalités importantes de pare-feu et expliqué comment les configurer dans les environnements d'exécution et de configuration permanente.

Si vous avez des questions ou des commentaires, n'hésitez pas à nous contacter via le formulaire de commentaires ci-dessous. Vous pouvez vous référer à la page de manuel de firewalld (man firewalld) ou à la documentation de firewalld sur le site Web du projet pour plus d'informations.