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)
Sergey:
авг 17, 2016 at 12:01
лучше смотреть так сколько в данный момент записей в conntrack таблице
sysctl net.ipv4.netfilter.ip_conntrack_count , чем cat /proc/net/nf_conntrack | wc -l