dmesg SYN флуд на 80 sysctl -p

Я получаю Synflood на порт 80 моего сервера, и я не могу остановить его. сначала я заполнил таблицы, затем отключил iptables, чтобы узнать, что это синфлуд

netstat -n | grep :80 |wc -l
#returns 1300 - 2000 
netstat -n | grep :80 | grep SYN |wc -l
#returns around 250

IP-адреса приходят отовсюду, поэтому я полагаю, что они подделаны. когда я добавляю другие правила iptable, он либо ничего не делает, либо просто сбрасывает все соединения, даже нормальные

это мой sysctl -p

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

Что я могу сделать? я нахожусь на 1and1, и я не думаю, что они поместят в перехват TCP для меня, который, как я слышал, является лучшим решением. какое действительно лучшее решение?

2 ответа

Вам просто нужно включить syncookies, и я видел, что вы уже сделали это:

sysctl -w net.ipv4.tcp_syncookies=1

Затем вы можете настроить стек ОС TCP/IP для быстрого освобождения системных ресурсов на неиспользуемых / закрытых сокетах.

Мои настройки:

# tunning tcp stack
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=1800
sysctl -w net.ipv4.tcp_window_scaling=0
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_timestamps=0

sysctl -w net.ipv4.ip_conntrack_max=524288
sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

# buffering
sysctl -w net.core.wmem_default=229376
sysctl -w net.core.wmem_max=229376

Вы также можете настроить Apache, особенно отключив KeepAlive и установив меньшее значение Timeout:

Timeout 5
KeepAlive Off

При работе с большим количеством соединений полезно использовать веб-серверы, такие как Nginx, Lighttpd, ... они запускают один отдельный процесс и выделяют лишь небольшое количество памяти для каждого соединения, Apache выделяет один процесс для каждого соединения.

Убедитесь, что пакеты имеют отличительную особенность, например, все они имеют одинаковый размер.

Обычно с помощью скриптовых потоков SYN они отправляют "пустой" пакет только с заголовком и без полезной нагрузки. В итоге получается 40-байтовый пакет (если я правильно помню).

Если это так, вы можете просто удалить все это с помощью iptables, поскольку никакие "нормальные" пакеты не выглядят так.

Да, и будьте готовы к потоку бесполезных советов от людей, которые на самом деле не понимают, как на самом деле работают SYN-флуды.

Другие вопросы по тегам