GNU/Linux >> Tutoriels Linux >  >> Linux

Sécurisez votre réseau Linux avec firewall-cmd

Les pare-feu sont un élément essentiel de la sécurité du réseau, il est donc important pour un administrateur système de se familiariser avec leur fonctionnement. Si vous comprenez les pare-feu, vous pouvez sécuriser votre réseau en faisant des choix intelligents concernant le trafic que vous autorisez à entrer et à sortir.

Parce que « pare-feu » est un nom si excitant, les gens imaginent souvent une bataille complexe de néons de style Tron se déroulant à la périphérie d'un réseau, avec des paquets de données malveillantes incendiées pour protéger la forteresse technologique de vos utilisateurs. En réalité, un pare-feu n'est qu'un logiciel contrôlant le trafic réseau entrant et sortant.

Ports

Un pare-feu est capable de gérer ce trafic en surveillant les ports réseau. Dans le monde des pare-feu, le terme port ne fait pas référence à une connexion physique telle qu'un port USB, VGA ou HDMI. Aux fins des pare-feu, un port est une construction artificielle créée par le système d'exploitation pour représenter un chemin vers un type spécifique de données. Ce système aurait pu s'appeler n'importe quoi, comme "contacts", "connexions", ou même "pingouins", mais ses créateurs ont utilisé des "ports", et c'est le nom que nous utilisons encore aujourd'hui. Le fait est qu'il n'y a rien de spécial dans aucun port; ils ne sont qu'un moyen de désigner une adresse où le transfert de données a lieu.

Il existe un certain nombre de ports bien connus, mais même ceux-ci ne sont que des conventions. Par exemple, vous savez peut-être que le trafic HTTP se produit sur le port 80, le trafic HTTPS utilise le port 443, FTP utilise le port 21 et SSH utilise le port 22. Lorsque votre ordinateur transmet des données à un autre ordinateur, il ajoute un préfixe aux données pour indiquer quel port auquel il souhaite accéder. Si le port du côté récepteur accepte des données du même protocole que les données que vous envoyez, alors les données sont échangées avec succès.

Vous pouvez voir ce processus en action en allant sur n'importe quel site Web. Ouvrez un navigateur Web et accédez à example.com:80 , ce qui amène votre ordinateur à envoyer une requête HTTP au port 80 de l'ordinateur qui dessert le site Web example.com. Vous recevez une page Web en retour. Cependant, les navigateurs Web ne vous obligent pas à entrer le port auquel vous souhaitez accéder chaque fois que vous naviguez vers une URL, car il est supposé que le trafic HTTP accède au port 80 ou 443.

Vous pouvez tester ce processus à l'aide d'un navigateur Web basé sur un terminal :

$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

En utilisant la même notation, vous pouvez forcer le rejet en accédant à un site Web utilisant un port non standard. Accédez à un port arbitraire, example.com:79 par exemple. Votre demande de page Web est refusée :

$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable

La corrélation entre les ports et les protocoles ne sont que des conventions convenues mutuellement par un groupe de normalisation et une base d'utilisateurs. Ces paramètres peuvent être modifiés sur des ordinateurs individuels. En fait, à l'époque des pionniers de l'informatique, de nombreuses personnes pensaient que le simple fait de changer le numéro de port des services populaires apaiserait une attaque. Aujourd'hui, les attaques sont beaucoup plus sophistiquées. Il ne sert à rien de surprendre un analyseur de ports automatisé en modifiant le port sur lequel un service écoute.

Au lieu de cela, un pare-feu régit l'activité autorisée sur un port donné.

[ Téléchargement gratuit :Aide-mémoire sur les commandes Linux avancées. ]

L'interface firewall-cmd

Votre infrastructure peut avoir un serveur dans un rack dans le seul but d'exécuter un pare-feu, ou vous pouvez avoir un pare-feu intégré dans le routeur (ou le modem) agissant comme votre principale passerelle vers Internet. Vous avez probablement aussi un pare-feu en cours d'exécution sur votre poste de travail personnel ou votre ordinateur portable. Tous ces firewalls ont leur propre interface de configuration. Cet article couvre le firewall-cmd commande terminal trouvée sur la plupart des distributions Linux.

Firewall-cmd est un outil frontal pour gérer le firewalld démon, qui s'interface avec le framework netfilter du noyau Linux. Cette pile n'est probablement pas présente sur les modems intégrés courants dans les petites et moyennes entreprises, mais elle est activée ou disponible pour toute distribution Linux qui utilise systemd .

Sans pare-feu actif, firewall-cmd n'a rien à contrôler, donc la première étape est de s'assurer que firewalld est en cours d'exécution : 

$ sudo systemctl enable --now firewalld

Cette commande démarre le démon de pare-feu et le configure pour qu'il se charge automatiquement au redémarrage.

Bloquer (presque) tout

Le conseil courant lors de la configuration d'un pare-feu est de tout bloquer d'abord, puis d'ouvrir les ports dont vous savez que vous avez réellement besoin. Cela signifie que vous devez savoir ce dont vous avez besoin, cependant, et parfois comprendre cela est le travail d'un après-midi à lui tout seul.

Si votre organisation exécute son propre service DNS ou de mise en cache DNS, par exemple, vous devez vous rappeler de débloquer le port (généralement 53) qui gère la communication DNS. Si vous comptez sur SSH pour configurer vos serveurs à distance, vous ne devez pas bloquer ce port. Vous devez tenir compte de chaque service exécuté sur votre infrastructure et vous devez comprendre si ce service est uniquement interne ou s'il doit interagir avec le monde extérieur.

Dans le cas d'un logiciel propriétaire, il peut y avoir des appels vers le monde extérieur dont vous n'êtes même pas conscient. Si certaines applications réagissent mal à un pare-feu strict récemment mis en place, vous devrez peut-être faire de l'ingénierie inverse (ou parler à la ligne d'assistance de l'application) pour découvrir quel type de trafic elle essaie de créer et pourquoi. Dans le monde open source, ce problème est moins courant, mais il n'est pas hors du champ des possibles, en particulier dans le cas de piles logicielles complexes (par exemple, aujourd'hui, même les lecteurs multimédias font des appels sur Internet, ne serait-ce que pour récupérer des pochettes d'album ou une liste de morceaux).

Firewall-cmd utilise des zones en tant que préréglages, vous offrant des valeurs par défaut saines parmi lesquelles choisir. Cela vous évite d'avoir à créer un pare-feu à partir de zéro. Les zones s'appliquent à une interface réseau, donc sur un serveur avec deux interfaces Ethernet, vous pouvez avoir une zone régissant une interface Ethernet et une zone différente régissant l'autre.

Il vaut la peine de prendre le temps de se familiariser avec les zones fournies sur votre système. Pour voir toutes les zones disponibles, utilisez :

$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Pour voir ce qui est débloqué dans une zone spécifique :

$ sudo firewall-cmd --zone work --list-all
work
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Utilisez l'une des zones existantes comme point de départ pour vos propres règles de pare-feu ou créez simplement les vôtres.

Créer une zone

Pour créer une nouvelle zone, utilisez le --new-zone option.

Tous firewall-cmd les actions ne persistent que jusqu'au redémarrage du pare-feu ou de l'ordinateur qui l'exécute. Tout ce que vous voulez être permanent doit être accompagné du --permanent drapeau.

Par exemple, créez une nouvelle zone permanente appelée corp , puis rechargez les règles du pare-feu pour que votre nouvelle zone s'active :

$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload

Avant d'attribuer une interface réseau à cette nouvelle zone, ajoutez le ssh service afin que vous puissiez y accéder à distance. Utilisez le --permanent option pour que cet ajout persiste lors des redémarrages :

$ sudo firewall-cmd --zone corp --add-service ssh --permanent

Votre nouvelle zone, appelée corp , est désormais actif, rejette tout sauf le trafic SSH et n'est affecté à aucune interface réseau spécifique. Pour faire corp la zone active et par défaut de l'interface réseau que vous souhaitez protéger (ens3 dans cet exemple), utilisez le --change-interface choix :

$ firewall-cmd --change-interface ens3 \
  --zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success

En faisant corp la zone par défaut, toutes les futures commandes sont appliquées à corp sauf si --zone L'option spécifie une zone différente. Si vous souhaitez définir corp car la valeur par défaut dépend si vous envisagez de faire de cette zone votre nouvelle zone principale. Si c'est le cas, ce qui suit fait le travail :

$ sudo firewall-cmd --set-default corp

Pour afficher les zones actuellement affectées à chaque interface, utilisez le --get-active-zones choix :

$ sudo firewall-cmd --get-active-zones``
corp
  interfaces: ens3
work
  interfaces: ens4

Ajouter et supprimer des services

Maintenant que vous avez tout bloqué sauf SSH, vous pouvez ouvrir les ports sur lesquels repose votre réseau. Le moyen simple et rapide d'autoriser le trafic à travers votre pare-feu consiste à ajouter un service prédéfini.

La liste des services prédéfinis disponibles est longue. Pour le voir, utilisez :

$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp 
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]

Supposons que vous ayez besoin d'exécuter un serveur Web. Tout d'abord, vous devez installer le serveur Web que vous souhaitez utiliser (le httpd package sur RHEL ou Fedora, apache2 sur Ubuntu et Debian). Pour cet exemple, nous utiliserons httpd :

$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd 

Ensuite, testez votre serveur Web localement :

$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>

Ensuite, essayez de vous connecter à votre serveur Web à partir d'un navigateur externe. La connexion échoue, démontrant que le pare-feu est efficace :

$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds

Débloquer un service

Pour autoriser le trafic HTTP via votre pare-feu, ajoutez le http service :

$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload

Ensuite, testez depuis une source extérieure :

$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>

Maintenant que vous savez comment ajouter un service, en supprimer un est assez intuitif :

$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload

Ajouter et supprimer des ports

Parfois, un service prédéfini n'existe pas, ou il suppose des valeurs par défaut qui ne correspondent pas à votre réseau. Au lieu d'ajouter un service, vous pouvez ajouter un numéro de port et un type de protocole directement avec --add-port .

Par exemple, si vous devez ajouter le port non standard 1622 pour SSH à votre zone personnalisée (si votre zone personnalisée n'est pas la zone par défaut pour vos commandes, ajoutez le --zone option):

$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload

Pour supprimer ce port, utilisez --remove-port :

$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload

Murs de feu

Vous pouvez faire beaucoup plus avec firewall-cmd , telles que la définition de vos propres services, le blocage ICMP et la définition des sources de trafic entrant autorisé. La meilleure façon d'apprendre est d'expérimenter, alors installez Red Hat Enterprise Linux ou Fedora dans les boîtiers GNOME, et expérimentez en façonnant le trafic à travers toutes les options firewall-cmd fournit.


Linux
  1. Comment sécuriser vos services de messagerie Linux avec SSL/TLS

  2. Premiers pas avec les pare-feux Linux

  3. Créez un jumeau maléfique de votre réseau avec Fluxion sur Kali Linux

  4. Sécurisez votre serveur Linux avec Fail2Ban [Guide du débutant]

  5. 6 outils open source indispensables pour sécuriser votre serveur Linux

Renforcez Linux avec des pare-feu

Protégez votre confidentialité en ligne avec ces distributions Linux

Comment sécuriser les serveurs Linux avec SE Linux

Network Manager sur Linux avec des exemples

Comment sécuriser un pare-feu Linux avec les règles IPTables

5 meilleures pratiques de sécurité Linux SSH pour sécuriser vos systèmes