Nf conntrack: Unterschied zwischen den Versionen

Aus Doku-Wiki
Zur Navigation springenZur Suche springen
(Die Seite wurde neu angelegt: „=nf_conntrack: table full, dropping packet= Kategorie:Fehlermeldung“)
 
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=nf_conntrack: table full, dropping packet=
+
=Fehlermeldung=
 +
nf_conntrack: table full, dropping packet
 +
 
 +
=Fehler Beschreibung=
 +
* [http://pc-freak.net/blog/resolving-nf_conntrack-table-full-dropping-packet-flood-message-in-dmesg-linux-kernel-log/ Ausführliche Doku zum Problem nf_conntrack]
 +
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
 +
 
  
 
[[Kategorie:Fehlermeldung]]
 
[[Kategorie:Fehlermeldung]]

Aktuelle Version vom 14. November 2013, 15:30 Uhr

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