Aller au contenu

Chapitre 4 : Mise en Place de Pare-feu

Tout au long de ce chapitre, vous devez être l'utilisateur root ou pouvoir utiliser sudo pour obtenir les privilèges nécessaires.

Comme pour tout serveur, vous devez vous assurer qu’il est protégé du monde extérieur et sur votre réseau local. Votre serveur en exemple ne dispose que d'une interface LAN, mais il est possible d'avoir deux interfaces, chacune faisant face à vos réseaux LAN et WAN.

Configuration du pare-feu – firewalld

Pour les règles firewalld, vous devez utiliser cette procédure de base ou être familier avec ces concepts. Un réseau LAN de 192.168.1.0/24 et un pont nommé incusbr0 sont prérequis pour notre exemple. Pour plus de clarté, vous pouvez avoir plusieurs interfaces sur votre serveur Incus, dont une faisant face à votre WAN. Vous allez créer également une zone pour les réseaux pontés et locaux. Il s'agit d'un simple souci de clarté de la zone. Les autres noms de zone ne s'appliquent pas. Cette procédure suppose que vous connaissez déjà les bases de firewalld.

firewall-cmd --new-zone=bridge --permanent

Vous devez relancer le pare-feu après avoir ajouté une zone :

firewall-cmd --reload

Vous devrez autoriser tout le trafic en provenance du pont. Ajoutez simplement l'interface et changez la cible de default à ACCEPT :

Avertissement

    Changer la cible d'une zone `firewalld` *doit* être fait avec l'option `--permanent`, nous pourrions donc aussi bien entrer cet indicateur dans nos autres commandes et renoncer à l'option `--runtime-to-permanent`.

Remarque

    Si vous devez créer une zone dans laquelle vous souhaitez autoriser tous les accès à l'interface ou à la source, mais ne souhaitez pas avoir à spécifier de protocoles ou de services, vous devez alors modifier la cible de `default` à `ACCEPT`. Il en va de même pour `DROP` et `REJECT` pour un bloc IP particulier pour lequel vous avez des zones personnalisées. La zone `drop` s'en chargera pour vous tant que vous n'utilisez pas de zone personnalisée.
firewall-cmd --zone=bridge --add-interface=incusbr0 --permanent
firewall-cmd --zone=bridge --set-target=ACCEPT --permanent

En supposant qu'il n'y ait aucune erreur et que tout fonctionne correctement, effectuez un rechargement du pare-feu :

firewall-cmd --reload

Si vous listez vos règles maintenant avec firewall-cmd --zone=bridge --list-all, vous obtiendrez le résultat suivant:

bridge (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: incusbr0
  sources:
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Notez que vous devez également autoriser votre interface locale. Là encore, les zones incluses ne sont pas nommées de manière appropriée. Créez une zone et utilisez la plage d'adresses IP source pour l'interface locale afin de vous assurer que vous y avez accès :

firewall-cmd --new-zone=local --permanent
firewall-cmd --reload

Ajoutez les IP source pour l'interface locale, et changez la cible en « ACCEPT » :

firewall-cmd --zone=local --add-source=127.0.0.1/8 --permanent
firewall-cmd --zone=local --set-target=ACCEPT --permanent
firewall-cmd --reload

Continuez en faisant une liste de la zone local pour vous assurer que vos règles sont bien là avec firewall-cmd --zone=local --list all qui affichera :

local (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 127.0.0.1/8
  services:
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Vous souhaitez autoriser SSH à partir de notre réseau de confiance. Pour ce faire, autorisez les adresses IP sources à utiliser la zone trusted intégrée. Par défaut, la cible de cette zone est ACCEPT.

firewall-cmd --zone=trusted --add-source=192.168.1.0/24

Ajouter le service à la zone :

firewall-cmd --zone=trusted --add-service=ssh

Si tout fonctionne correctement, changez le statut de vos règles vers permanent et rechargez les règles du pare-feu :

firewall-cmd --runtime-to-permanent
firewall-cmd --reload

La liste de votre zone trusted affichera :

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.1.0/24
  services: ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

La zone public est activée par défaut et SSH est autorisé. Pour des raisons de sécurité, vous ne souhaitez pas que SSH soit autorisé pour la zone public. Assurez-vous que vos zones sont correctes et que l'accès au serveur se fait par l'une des IP du réseau local (dans le cas de notre exemple). Vous risquez de vous bloquer sur le serveur si vous ne vérifiez pas cela avant de continuer. Lorsque vous êtes sûr d'avoir accès à l'interface correcte, supprimez SSH de la zone « public » :

firewall-cmd --zone=public --remove-service=ssh

Testez l'accès et assurez-vous que vous n'êtes pas bloqué. Si ce n'est pas le cas, déplacez vos règles vers le niveau permanent, rechargez, et listez la zone « public » pour assurer la suppression de SSH :

firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all

Il peut y avoir d'autres interfaces sur votre serveur à prendre en compte. Vous pouvez utiliser des zones intégrées le cas échéant, mais si les noms ne vous semblent pas adéquats, vous pouvez ajouter les zones nécessaires. N'oubliez pas que si vous n'avez pas de services ou de protocoles que vous devez autoriser ou rejeter spécifiquement, vous devrez modifier la zone cible. Vous pouvez le faire si l'utilisation d'interfaces fonctionne, comme avec le pont. Si vous avez besoin d’un accès plus granulaire aux services, utilisez plutôt les adresses IP sources.

Author: Steven Spencer

Contributors: Ezequiel Bruni, Ganna Zhyrnova