FirewallD est un système de pare-feu principalement utilisé sur les systèmes Fedora et Red Hat Enterprise Linux et toutes les distributions dérivées de cette dernière comme Rocky Linux, Alma Linux, Springdale Linux et Oracle Linux. On le trouve également sur d’autres distributions comme OpenSUSE. C’est un frontal à iptables
qui comporte une série d’avantages par rapport à la gestion « classique » d’un pare-feu avec un script shell fait maison.
- FirewallD a un comportement dynamique, ce qui veut dire qu’un changement « à chaud » de la configuration n’entraîne pas nécessairement un rechargement intégral de l’ensemble des règles du pare-feu avec toutes les perturbations que cela entraîne.
- Il est plus confortable à manipuler qu’une litanie de règles
iptables
. - Les règles prédéfinies sont probablement plus saines que ce que l’on pourra concocter avec un script fait maison.
FirewallD est très bien documenté dans la littérature imprimée et un peu partout sur le web. Je ne vais donc pas réinventer la roue et vous concocter un cours magistral sur FirewallD. Au lieu de cela, je vais reprendre les trois cas pratiques présentés dans mon article sur NetworkManager et procéder à la configuration de base du pare-feu pour chacun d’entre eux :
Note pour les chipoteurs : le terme « serveur LAN » est une distinction purement pragmatique qui désigne une machine telle qu’on la trouve dans le local de serveurs d’une école, d’une mairie ou d’une PME, par opposition à un serveur dédié installé dans un datacenter.
Qu’est-ce que j’entends concrètement par « configuration de base » ?
- Associer les interfaces réseau aux zones appropriées. Une zone est une collection de règles de pare-feu associées à un certain contexte. FirewallD fournit toute une série de zones prédéfinies.
- Supprimer quelques services prédéfinis comme
cockpit
,dhcpv6-client
,mdns
ousamba-client
. - Autoriser le seul service SSH comme point de départ. L’ouverture et/ou la redirection des ports sera traitée au fur et à mesure dans les articles sur les services correspondants.
FirewallD sur un serveur LAN
Le serveur dispose d’une interface réseau enp3s0
associée à la zone public
:
# nmcli con show NAME UUID TYPE DEVICE LAN 7be5ccc4-a7c8-4c43-abf6-f4882edf70d3 ethernet enp3s0 # firewall-cmd --get-active-zones public interfaces: enp3s0
Je définis la zone appropriée internal
pour l’interface :
# firewall-cmd --permanent --zone=internal --change-interface=enp3s0 # firewall-cmd --set-default-zone=internal
Théoriquement, rien ne m’empêcherait de conserver la zone public
par défaut. C’est juste une question de pratique personnelle. Pour ma part, je réserve la zone public
aux machines disposant d’une ouverture frontale sur Internet.
Je supprime quelques services prédéfinis :
# firewall-cmd --permanent --remove-service=cockpit # firewall-cmd --permanent --remove-service=dhcpv6-client # firewall-cmd --permanent --remove-service=mdns # firewall-cmd --permanent --remove-service=samba-client # firewall-cmd --reload
FirewallD sur un routeur
Le serveur dispose de deux interfaces enp2s0
(WAN
) et enp3s1
(LAN
) associées à la zone public
:
# nmcli con show NAME UUID TYPE DEVICE WAN a46043b5-c71d-3795-9548-96e5c136f942 ethernet enp2s0 LAN 9667c35b-5f84-4de8-9300-f4144a6db1c6 ethernet enp3s1 # firewall-cmd --get-active-zones public interfaces: enp2s0 enp3s1
Dans un premier temps, j’associe la zone external
à l’interface enp2s0
:
# firewall-cmd --permanent --zone=external --change-interface=enp2s0
Ensuite, j’associe la zone internal
à l’interface enp3s1
:
# firewall-cmd --permanent --zone=internal --change-interface=enp3s1
Je définis la zone internal
comme zone par défaut :
# firewall-cmd --set-default-zone=internal
J’active le relais des paquets :
# firewall-cmd --permanent --add-masquerade
Je supprime quelques services prédéfinis :
# firewall-cmd --permanent --remove-service=cockpit # firewall-cmd --permanent --remove-service=dhcpv6-client # firewall-cmd --permanent --remove-service=mdns # firewall-cmd --permanent --remove-service=samba-client # firewall-cmd --reload
Je redémarre le serveur et je vérifie successivement la configuration des zones :
# firewall-cmd --list-all --zone=internal # firewall-cmd --list-all --zone=external
FirewallD sur un serveur dédié
Le serveur dispose d’une interface réseau eth0
associée à la zone public
:
# nmcli con show NAME UUID TYPE DEVICE WAN f1f2025e-dbed-3596-b314-371972966e30 ethernet eth0 # firewall-cmd --get-active-zones public interfaces: eth0
J’inscris la zone explicitement dans la configuration de l’interface réseau :
# echo "ZONE=public" >> /etc/sysconfig/network-scripts/ifcfg-eth0
J’affiche la configuration de la zone :
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Je supprime cockpit
et dhcpv6-client
pour ne garder que le seul service ssh
:
# firewall-cmd --permanent --remove-service=cockpit # firewall-cmd --permanent --remove-service=dhcpv6-client success # firewall-cmd --reload success
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.
0 commentaire