Thématiques principales

mercredi 18 septembre 2019

Reseau: IpTables, bases


On s'éloigne un peu des précédents articles aujourd’hui en introduisant une nouvelle thématique: le réseau.

Le réseau? mais pourquoi? Simplement parce que dans la conception logicielle, la prise en compte de la composante environnementale dans laquelle le logiciel évolue est essentiel.

Cela va conditionner l’architecture, les technologies, les langages choisis et les contraintes s’appliquant à son exploitation.

Et le réseau est ce sur quoi va reposer l’essentiel de l’infrastructure système.

Par contre, je ne commencerai pas par les fondamentaux. On y viendra mais la on va tout de suite passer à un outil spécifique de la gestion réseau: Iptables.

IpTables [iptables-basics] [iptables-doc] est un outils de gestion des flux réseaux de la machine linux sur laquelle il est installé.

Par gestion, cela signifie qu’il permet d’autoriser ou d’interdire certains flux, entrant ou sortant sur certains type d’interfaces ou protocoles ou selon la provenance ou la destination. Il permet aussi de router ces même flux de façon à élaborer des politiques de gestions de l’information.



Comme vous vous en doutez donc, l’une des premières utilisation de cet outil est donc d’en faire un firewall en filtrant les flux mais il est aussi possible d’un faire un routeur logiciel permettant de déployer des flux au travers d’une architecture réseau spécifique.

Mais avant d’entrer dans le vif d’une utilisation sans explications sur Iptables.

Fondamentaux

Iptable se base sur 3 concepts structuraux principaux, les tables, les chaînes, et les règles.

Les tables implémentent les chaînes contenant à leur tour les règles (faisant référence à leur tour à potentiellement d’autres chaînes ou une règle simple de gestion).

L'exécution des règles va alors s'opérer selon d’une part la source du paquet et d’autre part selon un ordre prédéfini entre les tables et ce qu’elles implémenté comme chaînes [iptables-chains].

On compte 5 types de chaînes:

  • PREROUTING cette chaîne est exécutée lors de la réception d’un paquet elle sera ensuite poussé dans la chaînes INPUT ou/et FORWARD
  • INPUT Cette chaîne permet le traitement d’un paquet avant que celui ci ne soit servi à un processus local
  • FORWARD cette chaîne est exécutée lorsqu’un paquet n’est que routé par la machine sans qu’il soit utilisé par celle ci
  • OUTPUT cette chaîne est exécutée lorsqu’un processus local émet un paquet
  • POSTROUTING cette chaîne permet le traitement des paquets sortant de la machine.



Les tables vont alors implémenter ces différentes chaînes selon un certain ordre et choix (toutes les chaînes n'étant pas forcément implémenté) amenant alors donner un rôle fonctionnel différents à chacune des tables. ainsi par défaut, les tables constituant iptables sont :

  • filter c’est la table par défaut, elle implémente INPUT, OUTPUT et FORWARD et a pour vocation de gérer les entrées sorties de la machine et donc de servir de firewall en filtrant les paquets entrant, sortant ou ceux re-émis.
  • nat : permet de faire de l'altération de paquets dans le but de faire de la translation d’adresse. elle implémente POSTROUTING, PREROUTING et OUTPUT
  • mangle : table de traitement des paquets afin d’en changer des propriétés comme par exemple la Qos. On ne traitera pas de ce genre d’utilisation, elle implémente toutes les chaînes par défaut.
  • raw table de configuration spécifique des paquets en les modifiants au plus près de leur émission, implémente donc logiquement PREROUTING et OUTPUT
  • security permet de gérer du filtrage basé sur des règles de controle d’acces (MAC) implémenté par module de sécurité linux. On n’en parlera pas.

Généralement lorsqu’il s’agit de réaliser une configuration iptables, on s’appuiera sur la table par défaut, c’est à dire filter.

Pour y accéder, il suffit d’utiliser l'argument -t en précisant la table souhaité. Ne pas le préciser revient à utiliser la table par défaut c’est à dire filter.

iptables -L -n -v --line-numbers

équivalent à

iptables -t filter -L -n -v --line-numbers

Les paramètres -L, -n, -v, servent respectivement à:
  • demander la liste des règles de la table (pour simplifier leur suppression avec -D)
  • écrire les adresses sous la forme numérique et non verbalement
  • verbosité de la réponse

Ainsi on obtient la liste des règles associées à chacune des chaînes de la table.

Avant d’aller plus loin voici quelques autres paramètres pratiques qui vont nous permettre de manipuler [iptables-cmd]:

  • les chaînes:
    • -N newChain: création d’une nouvelle chaîne nommée “newChain”
    • -X chain: supprime la chaîne “chain” (celle ci ne devant pas être une parmis les standards)
    • -L chain: liste les règles de la chaîne “chain”
    • -F chain: vide la chaine “chain” de toutes ses règles
    • -P chain ACCEPT|DROP : change la politique finale de la chaine “chain” pour accepter ou rejeter les paquets si aucune règle ne les a pris en charge.
    • -E : renommer une chaîne
  • les règles
    • -A chain rule-spec: ajout d’une règle à la chaîne “chain” à la suite des règles existantes
    • -I chain num rule-spec: insertion d’une règle à la chaîne “chain” à l’index num
    • -D chain rule-spec|num : suppression dans la chaîne “chain” la règle suivante (identifié par sa spécification ou son numéro)
    • -R : replace une règle par une nouvelle.

Ensuite, pour définir les règles, il faudra user de différents paramètres permettant de discriminer les informations comme le protocole, les interfaces entrantes ou sortantes, les ip sources ou de destinations, où encore les ports (entrant ou sortant également) etc... Tout en gardant en tête que l’on ne pourra pas écrire n’importe quelle règles dans n’importe quelle table.

Voila ceci clos une première partie sur iptables, nous n’avons pas fait d’exemple mais nous y viendrons.

Références

[iptables-cmd] https://www.ionos.fr/digitalguide/serveur/outils/tutoriel-iptables-des-regles-pour-les-paquets-de-donnees/
[iptables-basics] https://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d'exploitation_GNU-Linux/Protection_avec_iptables
[iptables-doc] https://help.ubuntu.com/community/IptablesHowTo
[iptables-chains] https://www.booleanworld.com/depth-guide-iptables-linux-firewall/

Aucun commentaire:

Enregistrer un commentaire