Restreindre l'accès aux services avec firewalld

LinuxBeginner
Pratiquer maintenant

Introduction

L'ouverture d'un service réseau ne constitue que la moitié de la tâche d'administration. Vous devez également contrôler le trafic autorisé par le pare-feu de l'hôte. Sur les systèmes Red Hat, firewalld gère la politique de pare-feu via des zones, des services, des ports et des règles enrichies.

Dans ce laboratoire, un petit service HTTP est préparé pour vous sur le port TCP 8088. Vous allez inspecter la zone par défaut, ouvrir le port au moment de l'exécution (runtime), rendre la règle permanente, remplacer l'ouverture large du port par une règle enrichie restreinte à une source spécifique, puis auditer l'état final du pare-feu.

Inspecter le pare-feu et la base de référence du service

Dans cette étape, vous allez inspecter l'état actuel de firewalld et le service réseau préparé. Le pare-feu doit être en cours d'exécution avant que vous ne modifiiez les règles.

La configuration initiale conserve de manière permanente l'accès SSH et l'accès au terminal de navigateur LabEx sur 3002/tcp dans la zone public. Conservez ces règles d'administration lorsque vous modifiez la politique de pare-feu de l'application.

Accédez au répertoire du projet.

cd /home/labex/project

Vérifiez que firewalld est en cours d'exécution. Dans cet environnement, utilisez sudo firewall-cmd pour les opérations de lecture et d'écriture.

sudo firewall-cmd --state

Affichez la zone par défaut.

sudo firewall-cmd --get-default-zone

Inspectez la zone active. Notez que ssh est autorisé afin que la session SSH LabEx reste accessible.

sudo firewall-cmd --list-all

Confirmez que le service web d'exercice est en cours d'exécution et à l'écoute sur le port 8088.

systemctl is-active rhcsa-fw-web.service
ss -ltn | grep ':8088'
curl -s http://127.0.0.1:8088/

Vérifiez que le port 8088/tcp n'est pas encore largement ouvert dans firewalld.

sudo firewall-cmd --query-port=8088/tcp || echo "port 8088 is not open in the zone"

Ouvrir un port au moment de l'exécution

Dans cette étape, vous allez ajouter une règle de pare-feu temporaire (runtime). Les règles runtime prennent effet immédiatement mais disparaissent après le rechargement de firewalld, à moins que vous ne les rendiez permanentes.

Ouvrez le port TCP 8088 dans la configuration runtime actuelle. Comme aucune zone n'est spécifiée, firewall-cmd applique le changement à la zone par défaut que vous avez inspectée précédemment.

sudo firewall-cmd --add-port=8088/tcp

Interrogez la règle runtime. Un résultat yes signifie que le pare-feu actif autorise actuellement le port.

sudo firewall-cmd --query-port=8088/tcp

Listez les ports runtime. Cela vous donne une vue compacte des ports ouverts manuellement dans la zone active.

sudo firewall-cmd --list-ports

Vérifiez la configuration permanente. Elle devrait toujours indiquer no car les configurations runtime et permanente sont distinctes ; une règle uniquement runtime fonctionne maintenant mais serait perdue lors du rechargement de firewalld.

sudo firewall-cmd --permanent --query-port=8088/tcp || echo "port 8088 is not permanent yet"

Rendre la règle de port permanente

Dans cette étape, vous allez ajouter le même port à la configuration permanente et recharger firewalld. Le rechargement applique la configuration permanente au pare-feu runtime.

Ajoutez la règle de port permanente. L'option --permanent écrit la règle dans la configuration de firewalld au lieu de modifier uniquement le pare-feu en cours d'exécution.

sudo firewall-cmd --permanent --add-port=8088/tcp

Rechargez firewalld. Le rechargement reconstruit le pare-feu runtime à partir de la configuration permanente, c'est pourquoi cette étape permet de tester si votre règle enregistrée survit à un rechargement.

sudo firewall-cmd --reload

Interrogez à la fois la configuration runtime et permanente. La première commande vérifie le pare-feu actif, et la seconde vérifie la configuration enregistrée.

sudo firewall-cmd --query-port=8088/tcp
sudo firewall-cmd --permanent --query-port=8088/tcp

Les deux commandes devraient renvoyer yes.

Remplacer le port ouvert par une règle enrichie

Dans cette étape, vous allez restreindre l'accès au lieu de laisser le service ouvert à toutes les sources. Une règle enrichie (rich rule) peut inclure une adresse source et un port de destination dans une seule règle.

Supprimez l'ouverture large du port permanent. Cela prépare le pare-feu pour une règle plus restrictive ; sinon, la règle enrichie serait présente, mais la règle de port large autoriserait toujours toutes les sources.

sudo firewall-cmd --permanent --remove-port=8088/tcp

Ajoutez une règle enrichie qui autorise 8088/tcp uniquement depuis le réseau de documentation 192.0.2.0/24. Les règles enrichies sont utiles lorsqu'une règle de service ou de port simple n'est pas assez spécifique, par exemple lorsque des restrictions d'adresse source sont requises.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" port port="8088" protocol="tcp" accept'

Rechargez firewalld pour appliquer le changement permanent.

sudo firewall-cmd --reload

Confirmez que le port large n'est plus ouvert. Le résultat no attendu signifie que le service n'est plus exposé par une règle de port générale.

sudo firewall-cmd --query-port=8088/tcp || echo "broad port rule removed"

Listez les règles enrichies. La sortie des règles enrichies prouve que la règle plus étroite basée sur la source a remplacé l'ouverture large.

sudo firewall-cmd --list-rich-rules

Auditer l'état final du pare-feu

Dans cette étape, vous allez auditer l'état final. La vérification finale est une habitude d'administration importante : confirmez que le service est en cours d'exécution, que SSH reste autorisé, que le port large est fermé et que la règle restreinte existe.

Listez la zone active.

sudo firewall-cmd --list-all

Listez les règles enrichies permanentes.

sudo firewall-cmd --permanent --list-rich-rules

Confirmez que SSH est toujours autorisé.

sudo firewall-cmd --query-service=ssh

Confirmez que le service lui-même répond toujours localement. L'accès via l'interface de bouclage (loopback) vérifie le processus du service ; firewalld contrôle séparément le trafic entrant de la zone.

curl -s http://127.0.0.1:8088/

Résumé

Vous avez pratiqué l'administration du pare-feu hôte avec firewalld. Vous avez inspecté la zone par défaut, confirmé qu'un service réseau était en cours d'exécution, ajouté une règle de port runtime, rendu une règle permanente, rechargé firewalld, remplacé une ouverture large par une règle enrichie restreinte à une source, et audité l'état final du pare-feu.