Comment configurer FirewallD dans les systèmes basés sur RHEL
Net-filter, comme nous le savons tous, c’est un pare-feu sous Linux. Firewalld est un démon dynamique pour gérer les pare-feu avec prise en charge des zones réseau. Dans la version précédente, RHEL et CentOS, nous utilisions iptables comme démon pour le cadre de filtrage de paquets.
Dans les nouvelles versions des distributions basées sur RHEL telles que Fedora, Rocky Linux, CentOS Stream, AlmaLinux et openSUSE, l’interface iptables est remplacée par firewalld.
Il est recommandé de commencer à utiliser Firewalld au lieu d’iptables, car cela pourrait cesser à l’avenir. Cependant, iptables est toujours pris en charge et peut être installé avec la commande yum. Nous ne pouvons pas garder Firewalld et iptables dans le même système, ce qui peut conduire à des conflits.
Dans iptables, nous avions l’habitude de configurer comme INPUT, OUTPUT & FORWARD CHAINS mais ici dans Firewalld, le concept utilise des Zones. Par défaut, différentes zones sont disponibles dans firewalld, qui seront abordées dans cet article.
Les zones de base sont la zone publique et la zone privée. Pour contourner ces zones, nous devons ajouter l’interface avec la prise en charge de la zone spécifiée, puis nous pouvons ajouter les services à firewalld.
Par défaut, il y a beaucoup de services disponibles, l’une des meilleures caractéristiques de firewalld est qu’il est livré avec des services prédéfinis et nous pouvons prendre ces services comme exemple pour ajouter nos services en les copiant simplement.
Firewalld fonctionne également très bien avec les ponts IPv4, IPv6 et Ethernet. Nous pouvons avoir une configuration d’exécution et permanente distincte dans firewalld.
Commençons par comment travailler avec des zones et créer nos propres services et une utilisation beaucoup plus excitante de firewalld sous Linux.
Notre environnement de test
Operating System : Red Hat Enterprise Linux release 9.0 (Plow)
IP Address : 192.168.0.159
Host-name : tecmint-rhel9
Étape 1 : Installation de Firewalld dans les systèmes basés sur RHEL
1. Le package Firewalld est installé par défaut dans RHEL, Fedora, Rocky Linux, CentOS Stream, AlmaLinux et openSUSE. Si ce n’est pas le cas, vous pouvez l’installer à l’aide de la commande yum suivante.
# yum install firewalld -y
2. Une fois le paquet firewalld installé, il est temps de vérifier si le service iptables est en cours d’exécution ou non, s’il est en cours d’exécution, vous devez arrêter et masquer (ne plus utiliser) le service iptables avec les commandes ci-dessous.
# systemctl status iptables
systemctl stop iptables
systemctl mask iptables
Étape 2 : Comprendre les composants Firewalld (zones et règles)
3. Avant de passer à la configuration de firewalld, j’aimerais aborder chaque zone. Par défaut, certaines zones sont disponibles. Nous devons attribuer l’interface à la zone. Une zone définit la zone qui a été approuvée ou refusée au niveau de l’interface pour obtenir une connexion. Une zone peut contenir des services et des ports.
Ici, nous allons décrire chaque zone disponible dans Firewalld.
- Zone de dépôt : Tous les paquets entrants sont abandonnés si nous utilisons une zone de dépôt. C’est la même chose que nous utilisons pour ajouter iptables -j drop. Si nous utilisons la règle d’abandon, cela signifie qu’il n’y a pas de réponse, seules les connexions réseau sortantes seront disponibles.
- Zone de bloc : la zone de bloc refusera que les connexions réseau entrantes soient rejetées avec un icmp-host-interdit. Seules les connexions établies au sein du serveur seront autorisées.
- Zone publique : Pour accepter les connexions sélectionnées, nous pouvons définir des règles dans la zone publique. Cela ne permettra qu’au port spécifique de s’ouvrir dans notre serveur, d’autres connexions seront abandonnées.
- Zone externe : Cette zone agira comme des options de routeur avec le masquage est activé, les autres connexions seront abandonnées et n’accepteront pas, et seules les connexions spécifiées seront autorisées.
- Zone DMZ : Si nous devons autoriser l’accès à certains services au public, vous pouvez le définir dans la zone DMZ. Cela aussi a la particularité que seules les connexions entrantes sélectionnées sont acceptées.
- Zone de travail : Dans cette zone, nous ne pouvons définir que les réseaux internes, c’est-à-dire que le trafic du réseau privé est autorisé.
- Zone d’accueil : Cette zone est spécialement utilisée dans les zones d’accueil, nous pouvons utiliser cette zone pour faire confiance aux autres ordinateurs sur les réseaux afin de ne pas endommager votre ordinateur comme dans chaque zone. Cela n’autorise également que les connexions entrantes sélectionnées.
- Zone interne : Celle-ci est similaire à la zone de travail avec les connexions autorisées sélectionnées.
- Zone de confiance : Si nous définissons la zone de confiance, tout le trafic est accepté.
Maintenant que vous avez une meilleure idée des zones, découvrons maintenant les zones disponibles et les zones par défaut, et listons toutes les zones à l’aide des commandes suivantes.
Liste des zones pare-feu
# firewall-cmd --get-zones
Liste des zones par défaut du pare-feu
# firewall-cmd --get-default-zone
Répertorier toutes les zones Firewalld
# firewall-cmd --list-all-zones
Remarque : Le résultat de la commande ci-dessus ne tiendra pas dans une seule page car cela listera toutes les zones telles que block, dmz, drop, external, home, internal, public, trusted et work. Si les zones ont des règles riches, les services ou les ports activés seront également répertoriés avec ces informations de zone respectives.
Étape 3 : Définition de la zone Firewalld par défaut
4. Si vous souhaitez définir la zone par défaut comme zone interne, externe, drop, travail ou toute autre zone, vous pouvez utiliser la commande ci-dessous pour définir la zone par défaut. Ici, nous utilisons la zone « interne » par défaut.
# firewall-cmd --set-default-zone=internal
5. Après avoir défini la zone, vérifiez la zone par défaut à l’aide de la commande ci-dessous.
# firewall-cmd --get-default-zone
6. Ici, notre interface est enp0s3, si nous devons vérifier la zone dans laquelle l’interface est délimitée, nous pouvons utiliser la commande ci-dessous.
# firewall-cmd --get-zone-of-interface=enp0s3
7. Une autre caractéristique intéressante de firewalld est que 'icmptype' est l’un des types icmp pris en charge par firewalld. Pour obtenir la liste des types icmp pris en charge, nous pouvons utiliser la commande ci-dessous.
# firewall-cmd --get-icmptypes
Étape 4 : Création de vos propres services dans Firewalld
8. Les services sont un ensemble de règles avec des ports et des options qui est utilisé par Firewalld. Les services activés seront automatiquement chargés lorsque le service Firewalld sera opérationnel.
Par défaut, de nombreux services sont disponibles, pour obtenir la liste de tous les services disponibles, utilisez la commande suivante.
# firewall-cmd --get-services
9. Pour obtenir la liste de tous les services disponibles par défaut, allez dans le répertoire suivant, vous obtiendrez ici la liste des services.
# cd /usr/lib/firewalld/services/
10. Pour créer votre propre service, vous devez le définir à l’emplacement suivant. Par exemple, ici, je veux ajouter un service pour le port RTMP 1935, faites d’abord une copie de l’un des services.
# cd /etc/firewalld/services/
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
Ensuite, accédez à l’emplacement où notre fichier de service a été copié, puis renommez le fichier « ssh.xml » en « rtmp.xml comme indiqué dans l’image ci-dessous.
# cd /etc/firewalld/services/
mv ssh.xml rtmp.xml
ls -l rtmp.xml
11. Ensuite, ouvrez et modifiez le fichier en tant qu’en-tête, description, protocole et numéro de port, que nous devons utiliser pour le service RTMP, comme indiqué dans l’image ci-dessous.
12. Pour activer ces modifications, redémarrez le service firewalld ou rechargez les paramètres.
# firewall-cmd --reload
13. Pour confirmer si un service est ajouté ou non, exécutez la commande ci-dessous pour obtenir la liste des services disponibles.
# firewall-cmd --get-services
Étape 5 : Attribution des services aux zones Firewalld
14. Ici, nous allons voir comment gérer le pare-feu à l’aide de la commande firewall-cmd. Pour connaître l’état actuel du firewall et de toutes les zones actives, tapez la commande suivante.
# firewall-cmd --state
firewall-cmd --get-active-zones
15. Pour obtenir la zone publique pour l’interface enp0s3, il s’agit de l’interface par défaut, qui est définie dans le fichier /etc/firewalld/firewalld.conf comme DefaultZone=public.
Pour répertorier tous les services disponibles dans cette zone d’interface par défaut.
# firewall-cmd --get-service
Étape 6 : Ajout de services aux zones Firewalld
16. Dans les exemples ci-dessus, nous avons vu comment créer nos propres services en créant le service rtmp, ici nous verrons comment ajouter le service rtmp à la zone également.
# firewall-cmd --add-service=rtmp
17. Pour supprimer la zone ajoutée, tapez.
# firewall-cmd --zone=public --remove-service=rtmp
L’étape ci-dessus n’était qu’une période temporaire. Pour le rendre permanent, nous devons exécuter la commande ci-dessous avec l’option –permanent.
# firewall-cmd --add-service=rtmp --permanent
firewall-cmd --reload
18. Définissez des règles pour la plage de sources réseau et ouvrez l’un des ports. Par exemple, si vous souhaitez ouvrir une plage de réseaux, par exemple « 192.168.0.0/24 » et le port « 1935 », utilisez les commandes suivantes.
# firewall-cmd --permanent --add-source=192.168.0.0/24
firewall-cmd --permanent --add-port=1935/tcp
Assurez-vous de recharger le service firewalld après avoir ajouté ou supprimé des services ou des ports.
# firewall-cmd --reload
firewall-cmd --list-all
Étape 7 : Ajout de règles enrichies Firewalld pour la plage réseau
19. Si je souhaite autoriser des services tels que http, https, vnc-server et PostgreSQL, j’utilise les règles suivantes. Tout d’abord, ajoutez la règle et rendez-la permanente, rechargez les règles et vérifiez l’état.
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept' --permanent
Maintenant, la plage de réseau 192.168.0.0/24 peut utiliser le service ci-dessus à partir de mon serveur. L’option –permanent peut être utilisée dans toutes les règles, mais nous devons définir la règle et vérifier avec l’accès du client, après quoi nous devons la rendre permanente.
20. Après avoir ajouté les règles ci-dessus, n’oubliez pas de recharger les règles du pare-feu et de répertorier les règles en utilisant :
# firewall-cmd --reload
firewall-cmd --list-all
Pour en savoir plus sur Firewalld.
# man firewalld
Ça y est, nous avons vu comment mettre en place un net-filtre à l’aide de Firewalld dans les distributions basées sur RHEL telles que Fedora, Rocky Linux, CentOS Stream, AlmaLinux et openSUSE.
Conclusion
Net-filter est le cadre d’un pare-feu pour chaque distribution Linux. Dans toutes les éditions de RHEL et CentOS, nous utilisions iptables, mais dans les versions plus récentes, ils ont introduit Firewalld. Il est plus facile de comprendre et d’utiliser firewalld. J’espère que vous avez apprécié l’article.
















