nf_conntrack: table full, dropping packet

При данной записи в логах ядра nf_conntrack: table full, dropping packet, происходит переполнение таблицы conntrack и новые соединения не будут обрабатываться, а просто отбросятся. Одной из причин может быть DDOS атака, когда зомби-машина пытается генерировать значительное количество запросов и открывает много соединений, тем самым исчерпывая лимит на количество соединений.


Смотрим значение по умолчанию:

sysctl -a | grep conntrack_max

Вывод должен быть примерно следующим:

net.netfilter.nf_conntrack_max = 65536
net.nf_conntrack_max = 65536

Для решения проблемы в данной ситуации необходимо увеличить количество возможных записей в таблице. Увеличить значение можно через файл /etc/sysctl.conf необходимо добавить или изменить записи:

net.netfilter.nf_conntrack_max = 1048576

Внимание:В дистрибутивах со старыми ядрами, ниже 2.6, параметры задающие максимальное количество записей в conntrack таблице называются net.ipv4.netfilter.ip_conntrack_max


Для применения изменений необходимо выполнить команду:

sysctl -p

Если установить большое значение при малом количестве оперативной памяти , то могут возникнуть проблемы с переполнением памяти, в логах будет сообщение о нехватке оперативной памяти:

kernel: Out of Memory:

Также можно изменить и другие параметры:

net.netfilter.nf_conntrack_tcp_timeout_established = 86400

который не даст держать открытым соединение без подтверждения более суток.

Посмотреть сколько в данный момент записей в conntrack таблице можно командой:

cat /proc/net/nf_conntrack | wc -l

Можно установить пакет conntrack-tools и с его помощью собирать статистику:

conntrack -L

Данным скриптом можно проверять и вводить 15 ip-адресов у которых наибольшее количество соединений в данный момент.

conntrack -L |awk '{if ($5 ~ /src/) print $5; else if ($4 ~ /src/) print $4}' | sed "s/src=/ /g" | sort | uniq -c | sort -n | tail -n15

Комментарии (1)

  1. Sergey:
    авг 17, 2016 at 12:01

    лучше смотреть так сколько в данный момент записей в conntrack таблице
    sysctl net.ipv4.netfilter.ip_conntrack_count , чем cat /proc/net/nf_conntrack | wc -l

    Ответить