'conntrack' suivi des sessions TCP privées entre VM

Nous avons une paire de machines virtuelles en tant que routeurs virtuels et BGP / TCP entre les deux routeurs virtuels (sur QEMU / KVM). Les VM possèdent chacune une interface de prise qui est connectée à un pont Linux qui n'a que les deux robinets en tant que membres.

Tout fonctionne bien, sauf que nous voyons que conntrack semble signaler les sessions TCP entre ces deux machines virtuelles. Au début, nous pensions que les sessions TCP avaient des fuites et qu'il s'agissait d'un trou de security, mais Netstat ne rapporte rien. Il semble donc que nous n'assurions pas un TCB pour cela sur le operating system hôte (ce qui est correct); phew. Le trafic hôte invité devrait être transparent pour le operating system hôte qu'il semble être; la plupart.

La raison pour laquelle ce comportement de conntrack est un problème est que si les deux VM sont réinitialisées en même time, il n'y a plus personne en cours d'exécution pour envoyer un trafic sur les sessions TCP invité pour provoquer une réinitialisation TCP; Nous obtenons donc une «fuite» de conntrack sur le operating system hôte. Au fil du time, cela s'amplifie et éventuellement le operating system hôte manque de ressources. Nous avons beaucoup de sessions BGP dans ce test. Il semble que c'est un moyen pour un operating system invité à un DoS sur un système hôte hôte …

Est-ce un comportement valable pour conntrack? Il s'agit de la VM privée à la communication VM sur un pont L2. Pourquoi Linux devrait-il snooping et save de telles sessions TCP? Est-ce un bug ou une fonctionnalité?

La plupart des approches semblent impliquer iptables pour arrêter cela; nous ne voulons pas vraiment requestr au client de le faire. D'autres suggestions?

Oui, ce comportement est attendu , même si je ne sais pas que c'est le problème que vous prévoyez. Les connections TCP et UDP sur la table conntrack expirent avec le time elles-mêmes. Vous pouvez voir les valeurs de temporisation dans /proc/sys/net/netfilter/*timeout* et ajuster ces valeurs via soit /proc ou sysctl. Notez que cela peut être différent sur les kernelx plus anciens, peut /proc/sys/net/ipv4/netfilter/ être /proc/sys/net/ipv4/netfilter/ .

Si cela ne va pas couper et vous n'êtes pas satisfait de la solution iptables -t raw -j NOTRACK, vous pouvez désactiver le traitement iptables des connections pontées en configurant

 sysctl -w net.bridge.bridge-nf-call-arptables=0 sysctl -w net.bridge.bridge-nf-call-ip6tables=0 sysctl -w net.bridge.bridge-nf-call-iptables=0 sysctl -w net.bridge.bridge-nf-filter-vlan-tagged=0 

ou en définissant les mêmes parameters dans /etc/sysctl.conf . Ceux-ci désactiveront le passage du trafic ponté vers iptables, ce qui devrait avoir pour effet de contourner conntrack.

Alternativement, vous pouvez désactiver ip_conntrack en totalité, si vous ne l'utilisez pas en noir en listant le module ou en le désactivant dans votre kernel.