Un pare-feu est une méthode de surveillance et de filtrage du trafic réseau entrant et sortant. Il fonctionne en définissant un ensemble de règles de sécurité qui déterminent s’il faut autoriser ou bloquer un trafic spécifique. Un pare-feu correctement configuré est l’un des aspects les plus importants de la sécurité globale du système.
CentOS 8 est livré avec un démon de pare-feu nommé firewalld. C’est une solution complète avec une interface D-Bus qui vous permet de gérer dynamiquement le pare-feu du système.
Dans ce tutoriel, nous allons parler de la configuration et de la gestion du pare-feu sur CentOS 8. Nous expliquerons également les concepts de base de FirewallD.
- Prérequis #
- Concepts de base de Firewalld #
- Zones Firewalld #
- Services de pare-feu #
- Paramètres d’exécution et permanents de Firewalld #
- Activation de FirewallD#
- Zones Firewalld #
- Modification de la cible de zone #
- Affectation d’une interface à une zone différente #
- Modification de la zone par défaut #
- Créer de nouvelles Zones #
- Services Firewalld #
- Création d’un nouveau service FirewallD #
- Ouvrir des ports et des adresses IP Source #
- Ouverture d’une IP source #
- Ouverture d’un port source #
- Ports de transfert #
- Transférer le trafic d’un port à un autre sur l’adresse IP #
- Transférer le trafic vers une autre adresse IP #
- Transférer le trafic vers un autre serveur sur un port différent #
- Conclusion #
Prérequis #
Pour configurer le service de pare-feu, vous devez être connecté en tant que root ou utilisateur avec les privilèges sudo.
Concepts de base de Firewalld #
firewalld utilise les concepts de zones et de services. En fonction des zones et des services que vous configurerez, vous pouvez contrôler le trafic autorisé ou bloqué vers et depuis le système.
Firewalld peut être configuré et géré à l’aide de l’utilitaire de ligne de commande firewall-cmd
.
Dans CentOS 8, iptables est remplacé par nftables comme backend de pare-feu par défaut pour le démon firewalld.
Zones Firewalld #
Les zones sont des ensembles prédéfinis de règles qui spécifient le niveau de confiance des réseaux auxquels votre ordinateur est connecté. Vous pouvez affecter des interfaces réseau et des sources à une zone.
Voici les zones fournies par FirewallD ordonnées en fonction du niveau de confiance de la zone de non confiance à confiance:
- chute: Toutes les connexions entrantes sont supprimées sans aucune notification. Seules les connexions sortantes sont autorisées.Bloc
- : Toutes les connexions entrantes sont rejetées avec un message
icmp-host-prohibited
pourIPv4
eticmp6-adm-prohibited
pour IPv6n. Seules les connexions sortantes sont autorisées. - public: Pour une utilisation dans des espaces publics non fiables. Vous ne faites pas confiance aux autres ordinateurs du réseau, mais vous pouvez autoriser les connexions entrantes sélectionnées.
- externe : Pour une utilisation sur des réseaux externes avec le masquage NAT activé lorsque votre système agit comme une passerelle ou un routeur. Seules les connexions entrantes sélectionnées sont autorisées.
- interne: Pour une utilisation sur des réseaux internes lorsque votre système agit comme une passerelle ou un routeur. Les autres systèmes du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
- dmz : Utilisé pour les ordinateurs situés dans votre zone démilitarisée qui ont un accès limité au reste de votre réseau. Seules les connexions entrantes sélectionnées sont autorisées.
- travail: Utilisé pour les machines de travail. Les autres ordinateurs du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
- accueil: Utilisé pour les machines domestiques. Les autres ordinateurs du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
- approuvé : Toutes les connexions réseau sont acceptées. Faites confiance à tous les ordinateurs du réseau.
Services de pare-feu #
Les services Firewalld sont des règles prédéfinies qui s’appliquent dans une zone et définissent les paramètres nécessaires pour autoriser le trafic entrant pour un service spécifique. Les services vous permettent d’effectuer facilement plusieurs tâches en une seule étape.
Par exemple, le service peut contenir des définitions sur l’ouverture de ports, le transfert de trafic, etc.
Paramètres d’exécution et permanents de Firewalld #
Firewalld utilise deux ensembles de configuration séparés, l’exécution et la configuration permanente.
La configuration d’exécution est la configuration en cours d’exécution réelle et ne persiste pas au redémarrage. Lorsque le démon firewalld démarre, il charge la configuration permanente, qui devient la configuration d’exécution.
Par défaut, lorsque vous apportez des modifications à la configuration de Firewalld à l’aide de l’utilitaire firewall-cmd
, les modifications sont appliquées à la configuration d’exécution. Pour rendre les modifications permanentes, ajoutez l’option --permanent
à la commande.
Pour appliquer les modifications dans les deux ensembles de configuration, vous pouvez utiliser l’une des deux méthodes suivantes:
-
Modifiez la configuration d’exécution et rendez-la permanente:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
Modifiez la configuration permanente et rechargez le démon firewalld:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
Activation de FirewallD#
Sur CentOS 8, firewalld est installé et activé par défaut. Si, pour une raison quelconque, il n’est pas installé sur votre système, vous pouvez installer et démarrer le démon en tapant:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
Vous pouvez vérifier l’état du service de pare-feu avec:
sudo firewall-cmd --state
Si le pare-feu est activé, la commande doit imprimer running
. Sinon, vous verrez not running
.
Zones Firewalld #
Si vous ne l’avez pas modifiée, la zone par défaut est définie sur public
et toutes les interfaces réseau sont affectées à cette zone.
La zone par défaut est celle qui est utilisée pour tout ce qui n’est pas explicitement affecté à une autre zone.
Vous pouvez voir la zone par défaut en tapant:
sudo firewall-cmd --get-default-zone
public
Pour obtenir une liste de toutes les zones disponibles, tapez:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Pour voir les zones actives et les interfaces réseau qui leur sont affectées:
sudo firewall-cmd --get-active-zones
La sortie ci-dessous montre que les interfaces eth0
et eth1
sont affectées à la zone public
:
public interfaces: eth0 eth1
Vous pouvez imprimer les paramètres de configuration de zone avec:
sudo firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
De la sortie ci-dessus, nous pouvons voir que la zone publique est active et utilise la cible par défaut, qui est REJECT
. La sortie montre également que la zone est utilisée par les interfaces eth0
et eth1
et permet le trafic client DHCP et SSH.
Si vous souhaitez vérifier les configurations de toutes les zones disponibles, tapez:
sudo firewall-cmd --list-all-zones
La commande imprime une liste énorme avec les paramètres de toutes les zones disponibles.
Modification de la cible de zone #
La cible définit le comportement par défaut de la zone pour le trafic entrant qui n’est pas spécifié. Il peut être défini sur l’une des options suivantes: default
, ACCEPT
, REJECT
, et DROP
.
Pour définir la cible de la zone, spécifiez la zone avec l’option --zone
et la cible avec l’option --set-target
.
Par exemple, pour changer la cible de la zone public
en DROP
, vous devez exécuter:
sudo firewall-cmd --zone=public --set-target=DROP
Affectation d’une interface à une zone différente #
Vous pouvez créer des ensembles spécifiques de règles pour différentes zones et leur attribuer différentes interfaces. Ceci est particulièrement utile lorsque vous avez plusieurs interfaces sur votre machine.
Pour affecter une interface à une zone différente, spécifiez la zone avec l’option --zone
et l’interface avec l’option --change-interface
.
Par exemple, la commande suivante affecte l’interface eth1
à la zone work
:
sudo firewall-cmd --zone=work --change-interface=eth1
Vérifiez les modifications en tapant:
sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0
Modification de la zone par défaut #
Pour modifier la zone par défaut, utilisez l’option --set-default-zone
suivie du nom de la zone que vous souhaitez définir par défaut.
Par exemple, pour changer la zone par défaut en home
, vous devez exécuter la commande suivante:
sudo firewall-cmd --set-default-zone=home
Vérifiez les modifications avec:
sudo firewall-cmd --get-default-zone
home
Créer de nouvelles Zones #
Firewalld vous permet également de créer vos propres zones. Ceci est pratique lorsque vous souhaitez créer des règles par application.
Dans l’exemple suivant, nous allons créer une nouvelle zone nommée memcached
, ouvrir le port 11211
et autoriser l’accès uniquement à partir de l’adresse IP 192.168.100.30
:
-
Créer la zone:
sudo firewall-cmd --new-zone=memcached --permanent
-
Ajouter les règles à la zone:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
Rechargez le démon firewalld pour activer les modifications:
sudo firewall-cmd --reload
Services Firewalld #
Avec Firewalld, vous pouvez autoriser le trafic pour des ports et/ou des sources spécifiques en fonction de règles prédéfinies appelées services.
Pour obtenir une liste de tous les types de services disponibles par défaut:
sudo firewall-cmd --get-services
Vous pouvez trouver plus d’informations sur chaque service en ouvrant l’associé.fichier xml dans le répertoire /usr/lib/firewalld/services
. Par exemple, le service HTTP est défini comme suit :
<?xml version="1.0" encoding="utf-8"?><service> <short>WWW (HTTP)</short> <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description> <port protocol="tcp" port="80"/></service>
Pour autoriser le trafic HTTP entrant (port 80) pour les interfaces dans la zone publique, uniquement pour le type de session en cours (configuration d’exécution):
sudo firewall-cmd --zone=public --add-service=http
--zone
. Pour vérifier que le service a été ajouté avec succès, utilisez l’option --list-services
:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Pour garder le port 80 ouvert après un redémarrage, exécutez à nouveau la même commande avec l’option --permanent
, ou exécutez:
sudo firewall-cmd --runtime-to-permanent
Utilisez l’option --list-services
avec l’option --permanent
pour vérifier vos modifications:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
La syntaxe pour supprimer un service est la même que lors de l’ajout d’un service. Utilisez simplement --remove-service
au lieu de l’indicateur --add-service
:
sudo firewall-cmd --zone=public --remove-service=http --permanent
La commande ci-dessus supprime le service http
de la configuration permanente de la zone publique.
Création d’un nouveau service FirewallD #
Comme nous l’avons déjà mentionné, les services par défaut sont stockés dans le répertoire /usr/lib/firewalld/services
. La façon la plus simple de créer un nouveau service consiste à copier un fichier de service existant dans le répertoire /etc/firewalld/services
, qui est l’emplacement des services créés par l’utilisateur et à modifier les paramètres du fichier.
Par exemple, pour créer une définition de service pour le serveur multimédia Plex, vous pouvez utiliser le fichier de service SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
Ouvrez le fichier plexmediaserver.xml
nouvellement créé et modifiez le nom court et la description du service dans les balises <short>
et <description>
. La balise la plus importante que vous devez modifier est la balise port
, qui définit le numéro de port et le protocole que vous souhaitez ouvrir.
Dans l’exemple suivant, nous ouvrons les ports 1900
UDP et 32400
TCP.
<?xml version="1.0" encoding="utf-8"?><service version="1.0"><short>plexmediaserver</short><description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description><port protocol="udp" port="1900"/><port protocol="tcp" port="32400"/></service>
Enregistrez le fichier et rechargez le service FirewallD:
sudo firewall-cmd --reload
Vous pouvez désormais utiliser le service plexmediaserver
dans vos zones comme tout autre service.
Ouvrir des ports et des adresses IP Source #
Firewalld vous permet également d’activer rapidement tout le trafic à partir d’une adresse IP de confiance ou sur un port spécifique sans créer de définition de service.
Ouverture d’une IP source #
Pour autoriser tout le trafic entrant à partir d’une adresse IP (ou d’une plage) spécifique, spécifiez la zone avec l’option --zone
et l’IP source avec l’option --add-source
.
Par exemple, pour autoriser tout le trafic entrant de 192.168.1.10 dans la zone public
, exécutez:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
Rendre la nouvelle règle persistante:
sudo firewall-cmd --runtime-to-permanent
Vérifiez les modifications à l’aide de la commande suivante:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
La syntaxe pour supprimer une adresse IP source est la même que lors de l’ajout d’une adresse IP. Utilisez simplement --remove-source
au lieu de l’option --add-source
:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
Ouverture d’un port source #
Pour autoriser tout le trafic entrant sur un port donné, spécifiez la zone avec l’option --zone
et le port et le protocole avec l’option --add-port
.
Par exemple, pour ouvrir le port 8080
dans la zone publique de la session en cours, vous exécutez:
sudo firewall-cmd --zone=public --add-port=8080/tcp
Le protocole peut être soit tcp
, udp
, sctp
, ou dccp
.
Vérifier les modifications:
sudo firewall-cmd --zone=public --list-ports
8080
Pour garder le port ouvert après un redémarrage, ajoutez la règle aux paramètres permanents en exécutant la même commande à l’aide de l’indicateur --permanent
ou en exécutant:
sudo firewall-cmd --runtime-to-permanent
La syntaxe pour supprimer un port est la même que lors de l’ajout d’un port. Utilisez simplement --remove-port
au lieu de l’option --add-port
.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
Ports de transfert #
Pour transférer le trafic d’un port à un autre port, activez d’abord le masquage de la zone souhaitée à l’aide de l’option --add-masquerade
. Par exemple, pour activer le masquage pour la zone external
, tapez:
sudo firewall-cmd --zone=external --add-masquerade
Transférer le trafic d’un port à un autre sur l’adresse IP #
Dans l’exemple suivant, nous transférons le trafic du port 80
au port 8080
sur le même serveur:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
Transférer le trafic vers une autre adresse IP #
Dans l’exemple suivant, nous transférons le trafic du port 80
au port 80
sur un serveur avec IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
Transférer le trafic vers un autre serveur sur un port différent #
Dans l’exemple suivant, nous transférons le trafic du port 80
au port 8080
sur un serveur avec IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
Pour rendre la règle forward persistante, utilisez:
sudo firewall-cmd --runtime-to-permanent
Conclusion #
Vous avez appris à configurer et à gérer le service firewalld sur votre système CentOS 8.
Assurez-vous d’autoriser toutes les connexions entrantes nécessaires au bon fonctionnement de votre système, tout en limitant toutes les connexions inutiles.