Rappel TCP/IP

Iptables est un outil d'apprentissage très puissant. Parmi d'autres choses, vous devez avoir une très bonne compréhension du protocole TCP/IP.

Ce chapitre a pour but d'expliquer ce que vous << devez savoir >> sur TCP/IP avant de commencer à utiliser iptables. Les choses que nous allons aborder concernent les protocoles IP, TCP, UDP et ICMP, leurs en-têtes, et l'utilisation générale de chacun des ces protocoles et comment ils sont corrélés entre eux. Iptables fonctionne au niveau des couches Internet et transport, et à cause de ça, ce chapitre mettra l'accent sur ces couches.

Iptables peut aussi fonctionner sur des couches plus hautes, comme la couche application. Cependant, il n'a pas été conçu pour ça, et ne devrait pas être utilisé pour ce genre d'usage. J'en parlerai d'avantage dans le chapitre Introduction au filtrage IP.

Couches TCP/IP

Comme déja établi, TCP/IP est multi-couches. Ceci indique que nous avons une fonctionnalité sur un niveau, et une autre à un autre niveau, etc. La raison pour laquelle nous avons toutes ces couches est très simple.

La raison principale est que l'architecture globale est très extensible. Nous pouvons ajouter de nouvelles fonctionnalités aux couches application, par exemple, sans avoir a réimplémenter l'ensemble du code TCP/IP, ou inclure une pile TCP/IP complète dans l'application. Ainsi il est inutile de réécrire chaque programme chaque fois que nous installons une nouvelle carte d'interface réseau. Chaque couche devrait avoir une connaissance minimum des autres, pour qu'elles restent séparées.

Note

Quand nous parlons de code TCP/IP lequel est intégré dans le noyau, nous parlons souvent de pile TCP/IP. La pile TCP/IP indique toutes les sous-couches utilisées, depuis la couche réseau jusqu'à la couche application.

Il existe deux architectures de base lorsque nous parlons de couches. Une des deux est le modèle OSI (Open System Interconnect) et consiste en 7 couches. Nous les verrons superficiellement ici, nous nous intéresserons plus particulièrement aux couches TCP/IP. Cependant, sur un plan historique il est intéressant de le connaître, en particulier si vous travaillez avec plusieurs types de réseaux différents. Voir la liste dans le OSI Reference Model.

Note

Il existe certaines discussions au sujet de ces modèles, mais il semble que le modèle OSI reste le modèle de référence. Ceci peut dépendre de l'endroit où vous vivez, cependant, dans la plupart des pays européens et aux États-Unis on parle généralement de modèle OSI par défaut avec les techniciens et les vendeurs.

Cependant, dans ce document, nous nous référerons principalement au modèle TCP/IP, sauf si notation contraire.

  1. Couche Application

  2. Couche Présentation

  3. Couche Session

  4. Couche Transport

  5. Couche Réseau

  6. Couche Liaison

  7. Couche Physique

Un paquet que nous envoyons, parcourt du sommet à la base cette liste, chaque couche ajoutant ses propres en-têtes au paquet, ce que nous appelons la phase d'encapsulation. Lorsque le paquet rejoint sa destination il parcourt en sens inverse la liste et les en-têtes sont supprimés du paquet, un à un, chaque en-tête donnant à l'hôte de destination toute l'information nécessaire jusqu'à ce que le paquet joigne l'application ou le programme pour lequel il était destiné.

Le second et plus intéressant standard est le protocole TCP/IP, comme indiqué dans la liste. Il n'y a pas d'accord universel en ce qui concerne le nombre de couches dans l'architecture TCP/IP. Cependant, on considère généralement qu'il y a de 3 à 5 couches disponibles, nous en verrons 4 pour simplifier.

  1. Couche Application

  2. Couche Transport

  3. Couche Internet

  4. Couche Réseau

Comme vous pouvez le voir, l'architecture du protocole TCP/IP est très proche du modèle OSI. De même qu'avec le modèle OSI, nous ajoutons et soustrayons les en-têtes pour chaque couche.

Par exemple, utilisons une des analogies les plus communes pour les machines modernes en réseau, la lettre par courrier postal. Chaque chose est effectuée par étape, identique en TCP/IP.

Vous désirez envoyer une lettre à quelqu'un en lui demandant comment il va, et qu'est-ce qu'il fait. Pour celà, vous devez poser des questions. Les questions seront situées à l'intérieur de la couche Application.

Après ceci vous écrirez les questions sur une feuille de papier que vous mettrez dans une enveloppe sur laquelle vous écrirez l'adresse de destination. Peut-être quelque chose comme :

Attn: John Doe
      

C'est l'équivalent de la couche Transport en TCP/IP.

À ce niveau nous écrivons l'adresse sur l'enveloppe, comme ceci :

V. Andersgardsgatan 2
41715 Gothenburg
      

Ça se passe dans l'analogie comme dans la couche Internet. La couche Internet contient les informations indiquant comment joindre le destinataire, ou l'hôte, dans un réseau TCP/IP. De la même façon qu'une enveloppe avec une adresse. C'est, en d'autres termes, l'équivalent de l'adresse IP (ex. IP 192.168.0.4).

L'étape finale est de poster l'enveloppe dans une boîte aux lettres. Ce qui équivaut à peu près à envoyer un paquet dans la couche Réseau. La couche Réseau contient les fonctions et les routines pour accéder au réseau physique par lequel le paquet sera transporté.

Quand finalement nous recevons la lettre, nous la retirerons de l'enveloppe (décapsulation). La lettre que nous recevons peut parfois demander une réponse ou non. Dans certains cas il peut y avoir une réponse du destinataire, alors le destinataire devient expéditeur, et l'expéditeur devient destinataire.

Note

Il est très important de comprendre qu'Iptables est spécifiquement construit pour travailler à l'intérieur des en-têtes des couches Internet et Transport. Il est possible de créer quelques filtres très basiques avec Iptables dans les couches Application et Réseau, mais il n'a pas été conçu pour cela, ni approprié.

Par exemple, si nous utilisons une correspondance de chaîne et l'apparions pour une chaîne spécifique dans le paquet, disons get /index.html. Ceci fonctionnera ? Normalement oui. Cependant, si la taille du paquet est très petite, cela ne marchera pas. La raison en est que Iptables est construit pour fonctionner sur une base par paquet, qui indique que si la chaîne est divisée en plusieurs paquets séparés, Iptables ne verra pas l'ensemble de la chaîne. Pour cette raison, il est mieux d'utiliser un proxy pour faire le filtrage au niveau de la couche Application. Nous verrons ces problèmes en détail plus tard dans Introduction au filtrage IP.

Étant donné que Iptables et Netfilter opèrent principalement sur les couches Internet et Transport, ce sont les couches sur lesquelles nous insisterons le plus dans ce chapitre. Sous la couche Internet, nous verrons presque exclusivement le protocole IP. Il existe quelques ajouts à ceci, comme, par exemple, le protocole GRE, mais ils sont très rares. À cause de tous ces facteurs nous nous concentrerons sur le protocole IP de la couche Internet, et TCP, UDP, ICMP de la couche Transport.

Note

Le protocole ICMP est actuellement une sorte de mélange entre les deux couches. Il fonctionne dans la couche Internet, mais il possède exactement les mêmes en-têtes que le protocole IP, mais aussi quelques en-têtes supplémentaires. Nous verrons ceci plus en détail plus loin dans Caractéristiques ICMP.