Nf conntrack

Aus Doku-Wiki
Zur Navigation springenZur Suche springen

Fehlermeldung

nf_conntrack: table full, dropping packet

Fehler Beschreibung

Diese Meldung wurde bei mir durch eine IPtables Regel verursacht. Kann aber auch durch DDOS Attacken verursacht werden.

iptables -A log_rule -m limit --limit 5/min -j LOG --log-prefix "ACCEPT Forward LIMIT "

Durch die --limit Anweisung muss sich der Kernel die Verbindungen merken. Wenn nun ein hoher Durchsatz auf dem Server dazu kommt, werden die Kernel-Tables gefüllt bis sie den MAX Wert überschreiten.

Werte ermitteln

  • ip_conntrack_max
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max
  • Aktuellen nf_conntrack_count
/sbin/sysctl net.netfilter.nf_conntrack_count

Wenn der Wert ip_conntrack_max zu klein gewählt ist, kann man diesen erhöhen. Dabei gibt es noch einen zweiten Wert, der dann verändert werden sollte:

  • Kernel Inhalte
/sbin/sysctl -a|grep -i nf_conntrack_max
  • NAT Verbindungen
/sbin/lsmod | egrep 'ip_tables|conntrack'
  • Geladene Kernelmodule die nf_conntrackt nutzen
/sbin/lsmod | egrep 'ip_tables|conntrack'
  • nf_conntrack Default Werte
sysctl -a | grep conntrack | grep timeout

Lösung

Entweder verwendet man die IPtables Rules nicht mehr, oder man erhöht die entsprechenden Werte und/oder verringert die Timeouts.

Werte temporär anpassen

  • ip_conntrack_max erhöhen
sysctl -w net.netfilter.nf_conntrack_max=131072
  • hashsize anpassen

Der Hashsize sollte 1/4 des nf_conntrack_max betragen

echo 32768 > /sys/module/nf_conntrack/parameters/hashsize

Werte permanent anpassen

  • ip_conntrack_max
vi /etc/sysctl.conf  // Am Ende einfügen
net.netfilter.nf_conntrack_count = 131072
  • hashsize
vi /etc/rc.local
echo 32768 > /sys/module/nf_conntrack/parameters/hashsize

Weitere Werte anpassen

  • Am Ende der Datei /etc/sysctl.conf einfügen
net.ipv4.netfilter.ip_conntrack_generic_timeout = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 54000