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=4096
work3:/home/blueflux#
cat /proc/sys/net/ipv4/ip_conntrack_max
32768
work3:/home/blueflux#