Gestion du Pare-feu Firewalld sous CentOS 7
Le pare-feu est un composant essentiel pour la sécurité de tout système Linux. Sur CentOS 7, firewalld est le service de pare-feu par défaut, offrant une gestion dynamique des règles. Ce guide vous expliquera comment configurer et administrer les règles de votre pare-feu.
- Démarrage et Gestion du Service Firewalld
Pour administrer le pare-feu, il est généralement nécessaire d'opérer avec les privilèges de l'utilisateur root.
1.1 Accès au compte Root
Pour passer à l'utilisateur root depuis un compte standard, utilisez la commande suivante :
[utilisateur@localhost ~]$ su root
Mot de passe :
[root@localhost home]# cd ~
[root@localhost ~]#
1.2 Vérification de l'état du service
Avant toute modification, il est recommandé de vérifier l'état actuel du service firewalld :
systemctl status firewalld
Vous pouvez également interroger l'état opérationnel du pare-feu avec firewall-cmd :
firewall-cmd --state
1.3 Contrôle du service Firewalld
Voici les commandes pour gérer le cycle de vie du service firewalld :
- Démarrer le pare-feu :
systemctl start firewalld
- Redémarrer ou recharger les configurations du pare-feu :
systemctl restart firewalld
systemctl reload firewalld
La commande reload est préférée car elle applique les nouvelles règles sans interrompre les connexions existantes.
- Arrêter le pare-feu :
systemctl stop firewalld
- Activer le démarrage automatique au boot :
systemctl enable firewalld.service
- Vérifier si le démarrage automatique est activé :
systemctl is-enabled firewalld.service
- Gestion des Ports et Services
Après avoir activé le pare-feu, certains services peuvent devenir inaccessibles si leurs ports ne sont pas explicitement ouverts.
2.1 Visualisation des ports et règles actuelles
Pour lister les ports actuellement ouverts par firewalld ou pour obtenir un aperçu détaillé de toutes les règles :
- Lister les ports ouverts :
firewall-cmd --list-ports
- Afficher toutes les règles du pare-feu pour la zone par défaut :
firewall-cmd --list-all
- Afficher les protocoles pris en charge :
firewall-cmd --list-protocols
2.2 Ouverture, fermeture et interrogation des ports
Les modifications de ports peuvent être temporaires (jusqu'au prochain redémarrage du pare-feu) ou permanentes. Pour rendre une règle permanente, l'option --permanent est nécessaire, suivie d'un rechargement du pare-feu.
Exemple : Configuration du port 80 (HTTP)
- Vérifier si un port est déjà ouvert :
firewall-cmd --query-port=80/tcp
- Ajouter un port (HTTP et HTTPS) de manière permanente :
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --add-port=8080/tcp # Ceci est temporaire sans --permanent
Après des modifications permanentes, il faut recharger le pare-feu pour les appliquer :
firewall-cmd --reload
Notez que systemctl restart firewalld peut aussi être utilisé, mais reload est préférable pour éviter l'interruption des connexions.
- Supprimer un port :
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
- Restriction d'Accès par Adresse IP (Règles riches)
Les "règles riches" (rich rules) de firewalld offrent une flexibilité avancée pour définir des politiques de filtrage basées sur des adrseses IP, des ports et des services spécifiques.
3.1 Autoriser/Bloquer une IP pour tout le trafic
- Permettre à une adresse IP spécifique d'accéder à tous les services :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.43.100" accept"
firewall-cmd --reload
- Bloquer une adresse IP spécifique :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.43.100" drop"
firewall-cmd --reload
3.2 Limiter l'accès IP à des ports spécifiques
Vous pouvez définir des règles pour autoriser une adresse IP ou une plage d'adresses à accéder à des ports précis.
- Autorisre une IP (8.8.8.8) à se connecter au port 80 (HTTP) :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="8.8.8.8" port protocol="tcp" port="80" accept"
- Autoriser une IP (10.168.186.25) à se connecter au port 22 (SSH) :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.168.186.25" port protocol="tcp" port="22" accept"
- Autoriser plusieurs IPs pour un port spécifique (ex: 3306 pour MySQL) :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.168.186.25,10.168.186.211" port protocol="tcp" port="3306" accept"
- Autoriser un sous-réseau entier pour un port (ex: 22 pour SSH) :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.168.186.0/24" port protocol="tcp" port="22" accept"
N'oubliez pas de recharger le pare-feu après avoir ajouté des règles riches :
firewall-cmd --reload
3.3 Contrôler l'accès basé sur le protocole
- Bloquer le protocole ICMP (empêche les pings) :
firewall-cmd --permanent --add-rich-rule="rule protocol value="icmp" drop"
- Autoriser une adresse spécifique à utiliser ICMP malgré un blocage général :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="120.12.23.136" protocol value="icmp" accept"
firewall-cmd --reload
3.4 Autoriser l'accès à un service par IP
Plutôt que des ports, vous pouvez spécifier des servicse connus de firewalld (ex: ssh, http, https).
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.168.186.25" service name="ssh" accept"
firewall-cmd --reload
3.5 Suppression des règles de pare-feu
- Supprimer une règle riche spécifique :
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="10.168.186.25" service name="ssh" accept"
Notez que la règle à supprimer doit être exactement la même que celle qui a été ajoutée.
- Supprimer un service de la liste des services autorisés (pour la zone par défaut) :
sudo firewall-cmd --permanent --remove-service=ssh
- Supprimer une règle bloquant ICMP :
firewall-cmd --permanent --remove-rich-rule="rule protocol value="icmp" drop"
N'oubliez pas de recharger le pare-feu après toute suppression pour que les changements prennent effet :
firewall-cmd --reload
3.6 Inspection des règles dans le fichier de configuration
Les configurations permanentes de firewalld sont stockées dans des fichiers XML, généralement sous /etc/firewalld/zones/. Pour la zone publique, vous pouvez les consulter :
cat /etc/firewalld/zones/public.xml
3.7 Commandes Utiles pour la Gestion des Règles Riches
- Recharger les configurations du pare-feu :
firewall-cmd --reload
- Ajouter une IP à une "liste blanche" pour un port spécifique :
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="8.8.8.8" port protocol="tcp" port="80" accept"
- Afficher toutes les règles riches configurées :
firewall-cmd --list-rich-rules
- Supprimer une règle riche :
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="8.8.8.8" port port="80" protocol="tcp" accept"
Toujours suivre les suppressions par un firewall-cmd --reload.
- Gestion des Services Connus de Firewalld
firewalld maintient une liste de services prédéfinis (comme SSH, HTTP, HTTPS) qui simplifient la gestion des règles. Vous pouvez les lister, les ajouter ou les supprimer facilement.
4.1 Afficher tous les services pris en charge
firewall-cmd --get-services
4.2 Ajouter, supprimer et interroger un service
- Ajouter un service (temporaire) :
firewall-cmd --add-service=http
- Supprimer un service (temporaire) :
firewall-cmd --remove-service=http
- Interroger l'état d'un service :
firewall-cmd --query-service=http
Pour rendre ces modifications permanentes, ajoutez --permanent et rechargez le pare-feu.