Netfilter permet de faire du filtrage stateful (en gros, il est capable de mémoriser les connexions en cours pour les laisser passer), mais comme rien n'est illimité en Informatique, cette mémoire est parfois pleine : le noyau n'est plus capable de mémoriser les connexions en cours et jette des paquets en conséquence. Ce qui donne la chose suivante dans les logs :
kernel: ip_conntrack: table full, dropping packet.
Cette limitation de taille est encore plus forte sur sur mon Linksys WRT54G (tournant sous OpenWRT) car il dispose de très peu de mémoire.
Plusieurs solutions existent pour contourner le problème :
-
Augmenter la taille allouée pour cette table. Cette solution, bien
qu'efficace, ne fait que repousser le problème (la limite), mais
surtout, nécessite la recompilation d'
iptables. - Si j'atteins cette limite aussi vite, cela est dû au fait de mon renouvellement de mon bail IP quotidien qui implique donc que, fatalement, une connexion Internet ne pourra jamais dépasser 24h. Or, Netfilter n'est pas au courant de cela et par défaut, le timeout pour "oublier" une connexion est de cinq jours (432 000 secondes).
La solution est donc de raccourcir ce timeout à une journée en
manipulant /proc :
# echo $((24*3600)) > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established