Pare-feuFirewallD 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 :

AstuceNote 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 » ?

  1. 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.
  2. Supprimer quelques services prédéfinis comme cockpit, dhcpv6-client, mdns ou samba-client.
  3. 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

AstuceThé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

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *