GNU/Linux >> Tutoriels Linux >  >> Linux

Pare-feu Linux :ce que vous devez savoir sur iptables et firewalld

Cet article est extrait de mon livre, Linux in Action, et d'un deuxième projet Manning qui n'a pas encore été publié.

Le pare-feu

Un pare-feu est un ensemble de règles. Lorsqu'un paquet de données entre ou sort d'un espace réseau protégé, son contenu (en particulier, les informations sur son origine, sa cible et le protocole qu'il envisage d'utiliser) est testé par rapport aux règles du pare-feu pour voir s'il doit être autorisé à passer. Voici un exemple simple :

D'une part, iptables est un outil de gestion des règles de pare-feu sur une machine Linux.

D'autre part, firewalld est également un outil de gestion des règles de pare-feu sur une machine Linux.

Tu as un problème avec ça? Et cela gâcherait-il votre journée si je vous disais qu'il existe un autre outil, appelé nftables ?

OK, j'admets que tout ça sent un peu drôle, alors laissez-moi vous expliquer. Tout commence par Netfilter, qui contrôle l'accès vers et depuis la pile réseau au niveau du module du noyau Linux. Pendant des décennies, le principal outil de ligne de commande pour gérer les crochets Netfilter était l'ensemble de règles iptables.

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

Étant donné que la syntaxe nécessaire pour invoquer ces règles pouvait sembler un peu obscure, diverses implémentations conviviales telles que ufw et firewalld ont été introduites en tant qu'interpréteurs Netfilter de niveau supérieur. Ufw et firewalld sont cependant principalement conçus pour résoudre les types de problèmes rencontrés par les ordinateurs autonomes. La création de solutions réseau complètes nécessitera souvent le muscle supplémentaire d'iptables ou, depuis 2014, son remplacement, nftables (via l'outil de ligne de commande nft).

iptables n'est allé nulle part et est encore largement utilisé. En fait, vous devez vous attendre à rencontrer des réseaux protégés par iptables dans votre travail d'administrateur pendant de nombreuses années. Mais nftables, en s'ajoutant à l'ensemble d'outils Netfilter classique, a apporté de nouvelles fonctionnalités importantes.

À partir de maintenant, je montrerai par exemple comment firewalld et iptables résolvent des problèmes de connectivité simples.

Configurer l'accès HTTP à l'aide de firewalld

Comme vous l'avez peut-être deviné d'après son nom, firewalld fait partie de la famille systemd. Firewalld peut être installé sur les machines Debian/Ubuntu, mais il est là par défaut sur Red Hat et CentOS. Si vous avez un serveur Web comme Apache en cours d'exécution sur votre machine, vous pouvez confirmer que le pare-feu fonctionne en accédant à la racine Web de votre serveur. Si le site est inaccessible, alors firewalld fait son travail.

Vous utiliserez le firewall-cmd outil pour gérer les paramètres du pare-feu à partir de la ligne de commande. Ajout du –state l'argument renvoie l'état actuel du pare-feu :

# firewall-cmd --state
running

Par défaut, firewalld sera actif et rejettera tout le trafic entrant à quelques exceptions près, comme SSH. Cela signifie que votre site Web ne recevra pas trop de visiteurs, ce qui vous fera certainement économiser beaucoup de frais de transfert de données. Comme ce n'est probablement pas ce que vous aviez en tête pour votre serveur Web, vous voudrez ouvrir les ports HTTP et HTTPS qui, par convention, sont désignés respectivement par 80 et 443. firewalld offre deux façons de le faire. L'une est via le –add-port argument qui référence directement le numéro de port avec le protocole réseau qu'il utilisera (TCP dans ce cas). Le –permanent l'argument indique à firewalld de charger cette règle à chaque démarrage du serveur :

# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp

Le –reload l'argument appliquera ces règles à la session en cours :

# firewall-cmd --reload

Curieux de connaître les paramètres actuels de votre pare-feu ? Exécutez –list-services :

# firewall-cmd --list-services
dhcpv6-client http https ssh

En supposant que vous avez ajouté l'accès au navigateur comme décrit précédemment, les ports HTTP, HTTPS et SSH devraient maintenant tous être ouverts, ainsi que dhcpv6-client , qui permet à Linux de demander une adresse IP IPv6 à un serveur DHCP local.

Configurer un kiosque client verrouillé à l'aide d'iptables

Je suis sûr que vous avez vu des kiosques - ce sont les tablettes, les écrans tactiles et les PC de type guichet automatique dans une boîte que les aéroports, les bibliothèques et les entreprises laissent traîner, invitant les clients et les passants à parcourir le contenu. Le problème avec la plupart des kiosques est que vous ne voulez généralement pas que les utilisateurs se sentent chez eux et les traitent comme leurs propres appareils. Ils ne sont généralement pas destinés à la navigation, à la visualisation de vidéos YouTube ou au lancement d'attaques par déni de service contre le Pentagone. Donc, pour vous assurer qu'ils ne sont pas utilisés à mauvais escient, vous devez les verrouiller.

Une façon consiste à appliquer une sorte de mode kiosque, que ce soit par l'utilisation intelligente d'un gestionnaire d'affichage Linux ou au niveau du navigateur. Mais pour vous assurer que tous les trous sont bouchés, vous voudrez probablement aussi ajouter des contrôles réseau durs via un pare-feu. Dans la section suivante, je décrirai comment je le ferais en utilisant iptables.

Il y a deux choses importantes à retenir concernant l'utilisation d'iptables :L'ordre que vous donnez à vos règles est critique, et par elles-mêmes, les règles iptables ne survivront pas à un redémarrage. Je vais les aborder ici un par un.

Le projet de kiosque

Pour illustrer tout cela, imaginons que nous travaillions pour un magasin qui fait partie d'une plus grande chaîne appelée BigMart. Ils existent depuis des décennies; en fait, nos grands-parents imaginaires ont probablement grandi là-bas. Mais ces jours-ci, les gars du siège social de BigMart ne font probablement que compter les heures avant qu'Amazon ne les fasse sombrer pour de bon.

Néanmoins, le service informatique de BigMart fait de son mieux et vient de vous envoyer des appareils de kiosque compatibles WiFi que vous êtes censé installer à des endroits stratégiques de votre magasin. L'idée est qu'ils afficheront un navigateur Web connecté aux pages de produits BigMart.com, leur permettant de rechercher les caractéristiques de la marchandise, l'emplacement des allées et les niveaux de stock. Les kiosques auront également besoin d'accéder à bigmart-data.com, où de nombreuses images et vidéos sont stockées.

En plus de cela, vous voudrez autoriser les mises à jour et, si nécessaire, les téléchargements de packages. Enfin, vous souhaiterez autoriser l'accès SSH entrant uniquement à partir de votre poste de travail local et bloquer tout le monde. La figure ci-dessous illustre comment tout cela fonctionnera :

Le scénario

Voici comment tout cela s'intégrera dans un script Bash :

#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

L'anatomie de base de nos règles commence par -A , indiquant à iptables que nous voulons ajouter la règle suivante. OUTPUT signifie que cette règle doit faire partie de la chaîne OUTPUT. -p indique que cette règle ne s'appliquera qu'aux paquets utilisant le protocole TCP, où, comme -d nous dit, la destination est bigmart.com. Le -j le drapeau pointe vers ACCEPT comme action à entreprendre lorsqu'un paquet correspond à la règle. Dans cette première règle, cette action consiste à autoriser ou à accepter la demande. Mais plus bas, vous pouvez voir les demandes qui seront abandonnées ou refusées.

N'oubliez pas que l'ordre est important. Et c'est parce qu'iptables exécutera une requête au-delà de chacune de ses règles, mais seulement jusqu'à ce qu'il obtienne une correspondance. Ainsi, une requête de navigateur sortante pour, par exemple, youtube.com passera les quatre premières règles, mais lorsqu'elle arrivera à l'un ou l'autre des éléments –dport 80 ou –dport 443 règle - selon qu'il s'agit d'une requête HTTP ou HTTPS - elle sera abandonnée. iptables ne se souciera plus de vérifier car c'était une correspondance.

D'un autre côté, une demande système à ubuntu.com pour une mise à niveau logicielle sera acceptée lorsqu'elle atteindra sa règle appropriée. Ce que nous faisons ici, évidemment, c'est autoriser les requêtes HTTP ou HTTPS sortantes uniquement vers nos destinations BigMart ou Ubuntu et aucune autre.

Les deux dernières règles traiteront des requêtes SSH entrantes. Ils n'auront pas déjà été refusés par les deux règles de suppression précédentes car ils n'utilisent pas les ports 80 ou 443, mais 22. Dans ce cas, les demandes de connexion de mon poste de travail seront acceptées mais les demandes de n'importe où ailleurs seront abandonnées. Ceci est important :assurez-vous que l'adresse IP que vous utilisez pour votre règle de port 22 correspond à l'adresse de la machine que vous utilisez pour vous connecter. Si vous ne le faites pas, vous serez instantanément bloqué. Ce n'est pas grave, bien sûr, car la façon dont il est actuellement configuré, vous pouvez simplement redémarrer le serveur et les règles iptables seront toutes abandonnées. Si vous utilisez un conteneur LXC comme serveur et que vous vous connectez à partir de votre hôte LXC, utilisez l'adresse IP utilisée par votre hôte pour se connecter au conteneur, et non son adresse publique.

Vous devrez vous rappeler de mettre à jour cette règle si l'adresse IP de ma machine change un jour ; sinon, vous serez bloqué.

Jouer à la maison (espérons-le sur une machine virtuelle jetable quelconque) ? Génial. Créez votre propre scénario. Maintenant, je peux enregistrer le script, utilisez chmod pour le rendre exécutable et exécutez-le en tant que sudo . Ne vous inquiétez pas si bigmart-data.com not found erreur - bien sûr, elle n'est pas trouvée ; ça n'existe pas.

chmod +X scriptname.sh
sudo ./scriptname.sh

Vous pouvez tester votre pare-feu depuis la ligne de commande en utilisant cURL . Demander ubuntu.com fonctionne, mais manning.com échoue.

curl ubuntu.com
curl manning.com

Configurer iptables pour qu'il se charge au démarrage du système

Le Terminal Linux

  • Les 7 meilleurs émulateurs de terminaux pour Linux
  • 10 outils de ligne de commande pour l'analyse de données sous Linux
  • Télécharger maintenant :Aide-mémoire SSH
  • Aide-mémoire des commandes Linux avancées
  • Tutoriels de ligne de commande Linux

Maintenant, comment faire pour que ces règles se chargent automatiquement à chaque démarrage du kiosque ? La première étape consiste à enregistrer les règles actuelles dans un fichier .rules à l'aide de iptables-save outil. Cela créera un fichier dans le répertoire racine contenant une liste des règles. Le pipe, suivi de la commande tee, est nécessaire pour appliquer mon sudo autorité sur la deuxième partie de la chaîne :l'enregistrement réel d'un fichier dans le répertoire racine autrement restreint.

Je peux alors dire au système d'exécuter un outil connexe appelé iptables-restore à chaque démarrage. Un travail cron régulier du type que nous avons vu dans le module précédent n'aidera pas car ils sont exécutés à des heures fixes, mais nous n'avons aucune idée du moment où notre ordinateur pourrait décider de planter et de redémarrer.

Il existe de nombreuses façons de gérer ce problème. En voici un :

Sur ma machine Linux, j'installerai un programme appelé anacron qui nous donnera un fichier dans le répertoire /etc/ appelé anacrontab. Je vais modifier le fichier et ajouter ce iptables-restore commande, lui indiquant de charger les valeurs actuelles de ce fichier .rules dans iptables chaque jour (si nécessaire) une minute après un démarrage. Je vais donner au travail un identifiant (iptables-restore ) puis ajoutez la commande elle-même. Puisque vous jouez avec moi à la maison, vous devriez tester tout cela en redémarrant votre système.

sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules

J'espère que ces exemples pratiques ont illustré comment utiliser iptables et firewalld pour gérer les problèmes de connectivité sur les pare-feu basés sur Linux.


Linux
  1. Ce que les utilisateurs Linux et les empaqueteurs doivent savoir sur Podman 4.0 sur Fedora

  2. Listes de contrôle d'accès et lecteurs externes sous Linux :ce que vous devez savoir

  3. 15 choses que vous devez savoir sur la structure de répertoire Linux

  4. Ce que vous devez savoir sur IPv6

  5. Qu'est-ce qu'un VPN ? Tout ce que vous devez savoir sur les VPN

Tout ce que vous devez savoir sur Black Lab Linux

Tout ce que vous devez savoir sur la distribution Linux Mint

Tout ce que vous devez savoir sur les inodes sous Linux

Tout ce que vous devez savoir sur le lien physique sous Linux

Tout ce que vous devez savoir sur l'UID sous Linux

Tout ce que vous devez savoir sur le répertoire Linux /tmp