Tutoriels Linux Debian

Gérer plusieurs clés SSH de manière simple et automatique Lorsqu'on développe on utilise parfois une paire de clés SSH public/privée pour s'authentifier auprès d'un serveur distant. On utilise un système de clé publique/ clé privée couplée à un agent...

Lire la suite

Héberger son site internet sur son serveur dédié... Avant d'entrer dans le vif de ce tuto, notons que pour des raisons pratiques, sur le serveur dédié : les sites seront installés sur /home/nomdusite/. chaque site contient un répertoire logs/...

Lire la suite

Compilation du noyau sous debian ( kernel ) La compilation du noyau Debian peut être une étape nécessaire dans l'exploitation du système. La gestion des pilotes de périphériques est géré différemment sous Linux que sur Windows. Les pilotes...

Lire la suite

TCPDump ou comment sniffer le trafic TCP sous Linux... Tcpdump est un outil d'analyse réseau très répandu chez les amateurs de sécurité de l'information et de routage réseau. Tcpdump affiche les en-têtes de paquets d'une interface réseau en fonction...

Lire la suite

Les commandes top et htop La commande top La commande top permet de lister l'ensemble des processus et de ressources utilisées sur votre système linux, Unix ou BSD. [bash] top [/bash] Précisons la 3ème ligne : Options...

Lire la suite

  • Prev
  • Next

Iptables – la machine d’état ou la machine de traçage des connexions

Category : Réseau, Sécurité

La machine d’état

Dans iptables, les paquets peuvent être reliés aux connexions tracées dans quatre états différents, qui sont connus sous les noms de NEW, ESTABLISHED, RELATED et INVALID. Avec la correspondance –state, il est facile de contrôler qui, ou ce qui, est autorisé à démarrer de nouvelles sessions.

L’intégralité du traçage de connexion est effectué par l’outil conntrack (Connection Tracker) à l’intérieur du noyau. La structure conntrack peut soit être chargée comme un module, soit être interne au noyau. La plupart du temps, on a besoin de fonctions supplémentaires de traçage de connexion autres que celles proposées par défaut dans le moteur conntrack. De ce fait, des parties spécifiques de conntrack prennent en charge les protocoles TCP, UDP et ICMP. Ces modules capturent des informations spécifiques et uniques sur les paquets, afin de pouvoir tracer chaque flux de données. L’information récupérée par conntrack lui permet de connaître l’état dans lequel se trouve chaque flux actuellement.

La défragmentation des paquets est réalisée automatiquement. Elle est incluse dans conntrack et ne peut être désactivée sauf en désactivant le traçage de connexion.

Le traçage de connexion est entièrement pris en charge dans la chaîne PREROUTING, sauf pour les paquets générés en local, qui sont pris en charge dans la chaîne OUTPUT. Ceci signifie qu’iptables effectue tous les calculs d’état dans la chaîne PREROUTING. Si on envoie le premier paquet d’un flux, l’état est défini comme NEW dans la chaîne OUTPUT, et quand on reçoit un paquet de réponse, on passe à l’état ESTABLISHED, et ainsi de suite. Si le premier paquet n’est pas envoyé par nous-mêmes, l’état NEW est naturellement défini dans la chaîne PREROUTING. Ainsi, tous les changements d’état et calculs sont réalisés dans les chaînes PREROUTING et OUTPUT de la table NAT.

Les entrées de conntrack

Si vous avez activé le module ip_conntrack, vous trouverez dans le lien /proc/net/ip_conntrack une liste de toutes les entrées actuelles de la base de données de conntrack.

cat /proc/net/ip_conntrack

tcp      6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 \
     dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \
     dport=32775 [ASSURED] use=2 

Cet exemple contient toute l’information gérée par le module conntrack pour savoir dans quel état se trouve une connexion.

  • Le protocole : tcp.
  • Le protocole codé en décimal.
  • Après cela, on voit le temps de survie de cette entrée conntrack : 117 sec. Cette valeur est decrémentée régulièrement jusqu’à ce que l’on constate à nouveau du trafic pour cette connexion. Dès lors, cette valeur est réinitialisée à la valeur par défaut pour l’état en question.
  • L’état actuel de l’entrée conntrack : la connexion est en SYN_SENT. La valeur interne d’une connexion est légèrement différente de celles utilisées en externe avec iptables. La valeur SYN_SENT indique que cette connexion a seulement vu un paquet TCP SYN dans une direction.
  • L’adresse IP source, l’adresse IP destination, le port source (sport) et le port destination (dport).
  • Arrivé à ce niveau, on voit un mot-clé spécifique qui signale qu’aucun trafic n’a été observé en retour pour cette connexion : [UNREPLIED]
  • Enfin, on voit ce qui est attendu pour les paquets en réponse. Entre autres, l’adresse IP source et l’adresse IP destination (qui sont inversées, puisque le paquet attendu doit être dirigé dans l’autre sens). La même chose s’applique au port source et port destination de la connexion.

Les entrées du traçage de connexion peuvent prendre un ensemble de valeurs différentes, toutes spécifiées dans les en-têtes de conntrack et disponibles dans les fichiers linux /include/netfilter-ipv4/ip_conntrack*.h. Ces valeurs dépendent du sous-protocole IP qu’on utilise. Les protocoles TCP, UDP et ICMP correspondent à des valeurs fixées et spécifiées dans le fichier linux /include/netfilter-ipv4/ip_conntrack.h. Ainsi, en fonction de l’évolution de cet état, on change la valeur du temps restant avant la destruction de la connexion.

Quand une connexion a observé du trafic dans les deux directions, l’entrée de conntrack efface le fanion [UNREPLIED], et donc le réinitialise. Elle le remplace par le fanion [ASSURED], vers la fin. Il signale que cette connexion est confirmée, donc elle ne sera pas supprimée si on atteint le maximum de connexions tracées possible. En fait, les connexions estampillées [ASSURED] ne seront pas supprimées, au contraire des connexions non confirmées (sans le fanion [ASSURED]).

Le nombre maximum de connexions gérées par la table de traçage de connexion dépend d’une variable qui peut être définie à l’aide de la fonction ip-sysctl dans les noyaux récents. La valeur par défaut prise en charge varie fortement avec la quantité de mémoire disponible. Avec 128 Mo de RAM, vous pourrez avoir 8192 entrées possibles, et avec 256 Mo, ce sera 16376 entrées. Vous pouvez lire et définir vos réglages à l’aide de /proc/sys/net/ipv4/ip_conntrack_max.

Un moyen différent de faire ceci, plus efficace, est de placer la taille de la fonction de hachage pour le module ip_conntrack une fois qu’il est chargé. Dans des circonstances normales ip_conntrack_max vaut 8 x la taille de la fonction de hachage. En d’autres termes, placer cette taille à 4096 fera que ip_conntrack_max aura 32 768 entrées conntrack.

modprobe ip_conntrack hashsize=4096

cat /proc/sys/net/ipv4/ip_conntrack_max
32768


Récemment, un nouveau patch est devenu disponible dans patch-o-matic, appelé tcp-window-tracking. Il ajoute, entre autres, toutes les temporisations précitées, aux variables spéciales sysctl, ce qui signifie qu’elles peuvent être modifiées à la volée, alors que le système est toujours en fonctionnement. Par conséquent, il n’est plus necessaire de compiler le noyau à chaque changement des temporisations.
Tout ceci peut être modifié par le biais d’appels système spécifiques, disponibles dans le répertoire /proc/sys/net/ipv4/netfilter. Pour plus d’informations, regardez les variables /proc/sys/net/ipv4/netfilter/ip_ct_*.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Be Sociable, Share!

Soutenez le blog :)

Leave a Reply