Смотрим
dmesg, чисто в профилактических целях, обнаруживаем массу сообщений вида:
nf_conntrack: table full, dropping packet.
Из названия видно кто является источником данного косяка — фаервол
iptables , если конкретно показывать пальцем, то
nf_conntrack. Один из модулей
netfilter, отслеживающий состояния соединений и классифицирующий пакеты, этим соединениям, принадлежащие. Например данный модуль netfilter определяет такие состояния как:
- NEW — syn пакеты, устанавливающие соединение;
- ESTABLISHED — пакеты, принадлежащие уже установленным соединениям;
- RELATED — пакеты на создание нового соединения, на основании уже существующего ( пассивный FTP );
- INVALID — означает что принадлежность пакета к какому-либо типу соединения не установлена;
Например, пара правил штатного фаервола в
Linux —
iptables, использующие данный модуль:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP
означают — пропускать уже установленные сетевые соединения и соединения инициированные уже установленными соединениями, дропать все что не подпадает под эти категории пакетов и пропускать не более 20 пакетов с флагами
FIN,SYN,RST,ACK SYN в момент времени с одного IP адреса.
Все свои данные
nf_conntrack хранит в таблицах, а вышеупомянутое сообщение говорит о том что эти таблицы переполнены.
Смотрим что у нас там по дэфолту:
debian:/# sysctl -a | grep conntrack_max
net.netfilter.nf_conntrack_max = 65536
net.nf_conntrack_max = 65536
Видимо маловато, немного поправим настройки ядра linux:
debian: /# echo "net.netfilter.nf_conntrack_max=1048576" >> /etc/sysctl.conf # Увеличили размер таблиц в 8 раз
debian: /# sysctl -p # Загружаем настройки ядра linux
Проверяем:
debian:/# sysctl -a | grep conntrack_max
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
Проблема с
iptables должна исчезнуть.