Examinons rapidement le contenu d'une donnée d'entrée de conntrack et
lisons-la dans /proc/net/ip_conntrack. Ce lien contient
une liste de toutes les entrées actuelles de la base de données de
conntrack. Si vous avez chargé le module
ip_conntrack, faites un cat
de /proc/net/ip_conntrack pour obtenir quelque-chose
comme ceci :
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. Tout d'abord, il y a le
protocole, ici tcp. Ensuite, encore le protocole mais codé en décimal. Après
cela, on voit combien de temps doit survivre cette entrée de conntrack. La
valeur à cet instant est de 117 secondes, elle est decrémentée
régulièrement jusqu'à ce qu'on voit à nouveau du trafic pour cette
connexion. Cette valeur est alors réinitialisée à la valeur par défaut pour
l'état en question à cet instant donné. Ensuite vient l'état actuel de cette
entrée. Dans le cas présenté ci-dessus, on visualise une connexion qui est
dans l'état 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. Puis, on voit
l'adresse IP source, l'adresse IP
destination, le port source et le
port destination. Arrivé à ce niveau, on voit un
mot-clé spécifique qui signale qu'aucun trafic n'a été observé en retour
pour cette connexion. 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. Ces valeurs nous intéressent
particulièrement.
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. Ceci sera
analysé plus en détails lors de l'analyse de chaque protocole ;
cependant, ils ne seront pas employés intensivement dans ce chapitre,
puisqu'ils ne sont pas utilisés en dehors du fonctionnement interne de
conntrack. Ainsi, en fonction de l'évolution de cet état, on change la
valeur du temps restant avant la destruction de la connexion.
|
Note |
|---|---|
|
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 ne devient plus indispensable de recompiler le noyau à chaque changement dans les temporisations.
Tout ceci peut être modifié par le biais d'appels système spécifiques,
disponibles dans le répertoire
|
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
égale 8 * la taille de la fonction de hachage. En d'autres termes, placer
cette taille à 4096 fera que ip_conntrack_max aura 32768 entrées conntrack.
Un exemple de ce qui pourrait être :
work3:/home/blueflux#modprobe ip_conntrack hashsize=4096work3:/home/blueflux#cat /proc/sys/net/ipv4/ip_conntrack_max32768work3:/home/blueflux#
Vous êtes ici :