Comment fonctionne le pare-feu Iptables

De Get Docs
Aller à :navigation, rechercher

Introduction

La mise en place d'un bon pare-feu est une étape essentielle à franchir pour sécuriser tout système d'exploitation moderne. La plupart des distributions Linux sont livrées avec quelques outils de pare-feu différents que nous pouvons utiliser pour configurer nos pare-feu. Dans ce guide, nous couvrirons le pare-feu iptables.

Iptables est un pare-feu standard inclus dans la plupart des distributions Linux par défaut (une variante moderne appelée nftables commencera à le remplacer). Il s'agit en fait d'un frontal des crochets netfilter au niveau du noyau qui peuvent manipuler la pile réseau Linux. Cela fonctionne en comparant chaque paquet qui traverse l'interface réseau à un ensemble de règles pour décider quoi faire.

Dans ce guide, nous verrons comment fonctionne iptables. Dans le prochain article de la série, nous vous montrerons comment configurer un ensemble de règles de base pour protéger votre serveur Ubuntu 14.04.

Comment fonctionne Iptables

Avant de commencer à discuter des commandes réelles nécessaires pour contrôler iptables et créer une politique de pare-feu, passons en revue la terminologie et discutons du fonctionnement d'iptables.

Le pare-feu iptables fonctionne en comparant le trafic réseau à un ensemble de règles. Les règles définissent les caractéristiques qu'un paquet doit avoir pour correspondre à la règle et l'action qui doit être entreprise pour les paquets correspondants.

Il existe de nombreuses options pour déterminer quels paquets correspondent à une règle spécifique. Vous pouvez faire correspondre le type de protocole de paquet, l'adresse ou le port source ou de destination, l'interface utilisée, sa relation avec les paquets précédents, etc.

Lorsque le modèle défini correspond, l'action qui a lieu est appelée cible. Une cible peut être une décision politique finale pour le paquet, telle que l'acceptation ou l'abandon. Il peut également s'agir de déplacer le paquet vers une chaîne différente pour le traitement, ou simplement de consigner la rencontre. Il existe de nombreuses options.

Ces règles sont organisées en groupes appelés chaînes. Une chaîne est un ensemble de règles par rapport auxquelles un paquet est vérifié séquentiellement. Lorsque le paquet correspond à l'une des règles, il exécute l'action associée et n'est pas vérifié par rapport aux règles restantes de la chaîne.

Un utilisateur peut créer des chaînes selon ses besoins. Il y a trois chaînes définies par défaut. Ils sont:

  • INPUT : cette chaîne gère tous les paquets qui sont adressés à votre serveur.
  • OUTPUT : cette chaîne contient des règles pour le trafic créé par votre serveur.
  • FORWARD : Cette chaîne est utilisée pour traiter le trafic destiné à d'autres serveurs qui ne sont pas créés sur votre serveur. Cette chaîne est essentiellement un moyen de configurer votre serveur pour acheminer les requêtes vers d'autres machines.

Chaque chaîne peut contenir zéro ou plusieurs règles et possède une politique par défaut. La politique détermine ce qui se passe lorsqu'un paquet traverse toutes les règles de la chaîne et ne correspond à aucune règle. Vous pouvez soit supprimer le paquet, soit l'accepter si aucune règle ne correspond.

Grâce à un module qui peut être chargé via des règles, iptables peut également suivre les connexions. Cela signifie que vous pouvez créer des règles qui définissent ce qu'il advient d'un paquet en fonction de sa relation avec les paquets précédents. Nous appelons cette capacité "suivi d'état", "suivi de connexion" ou configuration de la "machine d'état".

Pour ce guide, nous allons principalement couvrir la configuration de la chaîne INPUT, car elle contient l'ensemble des règles qui nous aideront à refuser le trafic indésirable dirigé vers notre serveur.

IPv4 contre IPv6

Le pare-feu netfilter inclus dans le noyau Linux sépare complètement le trafic IPv4 et IPv6. De même, les outils utilisés pour manipuler les tables contenant les ensembles de règles de pare-feu sont également distincts. Si IPv6 est activé sur votre serveur, vous devrez configurer les deux tables pour traiter le trafic auquel votre serveur est soumis.

La commande habituelle iptables est utilisée pour manipuler le tableau contenant les règles qui régissent le trafic IPv4. Pour le trafic IPv6, une commande associée appelée ip6tables est utilisée. C'est un point important à internaliser, car cela signifie que toutes les règles que vous définissez avec iptables n'auront aucun effet sur les paquets utilisant la version 6 du protocole.

La syntaxe entre ces commandes jumelles est la même, donc la création d'un ensemble de règles pour chacune de ces tables n'est pas trop écrasante. N'oubliez pas de modifier les deux tables chaque fois que vous apportez une modification. La commande iptables établira les règles qui s'appliquent au trafic IPv4, et la commande ip6tables établira les règles qui s'appliquent au trafic IPv6.

Vous devez vous assurer d'utiliser les adresses IPv6 appropriées de votre serveur pour élaborer les règles ip6tables.

Choses à garder à l'esprit

Maintenant que nous savons comment iptables dirige les paquets qui passent par son interface (dirigez le paquet vers la chaîne appropriée, vérifiez-le par rapport à chaque règle jusqu'à ce qu'il y en ait une, émettez la politique par défaut de la chaîne si aucune correspondance n'est trouvée), nous pouvons commencer à voir certains pièges dont il faut être conscient lorsque nous élaborons des règles.

Tout d'abord, nous devons nous assurer que nous avons des règles pour maintenir les connexions actuelles actives si nous implémentons une politique de suppression par défaut. Ceci est particulièrement important si vous êtes connecté à votre serveur via SSH. Si vous implémentez accidentellement une règle ou une politique qui interrompt votre connexion actuelle, vous pouvez toujours vous connecter à votre VPS DigitalOcean en utilisant la console Web, qui fournit un accès hors bande.

Une autre chose à garder à l'esprit est que l'ordre des règles dans chaque chaîne est important . Un paquet ne doit pas rencontrer une règle plus générale à laquelle il correspond s'il est censé correspondre à une règle plus spécifique.

Pour cette raison, les règles proches du sommet d'une chaîne doivent avoir un niveau de spécificité plus élevé que les règles situées en bas. Vous devez d'abord faire correspondre des cas spécifiques, puis fournir des règles plus générales pour correspondre à des modèles plus larges. Si un paquet passe par toute la chaîne (ne correspond à aucune règle), il atteindra la règle générale plus , la politique par défaut.

Pour cette raison, la politique par défaut d'une chaîne dicte très fortement les types de règles qui seront incluses dans la chaîne. Une chaîne avec la politique par défaut ACCEPT contiendra des règles qui rejettent explicitement les paquets. Une chaîne qui par défaut est DROP contiendra des exceptions pour les paquets qui doivent être spécifiquement acceptés.

Conclusion

À ce stade, le moyen le plus simple d'apprendre comment fonctionne iptables est de l'utiliser pour implémenter votre propre pare-feu.

Dans le prochain guide, nous montrerons comment créer un pare-feu iptables de base sur Ubuntu 14.04. Cela verrouillera votre serveur à l'exception des quelques services que vous souhaitez autoriser.

Par Justin Ellingwood