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-флуды.