Что такое SlowLoris
У вас случалось такое, когда на сервере нагрузки нет, свободной памяти достаточно, и при этом ваш сайт не открывается?
Если при этом на статусной страничке апача все треды в состоянии R (reading), весьма вероятно, что вы находитесь под атакой SlowLoris.
SlowLoris означает, что злоумышленники открывают множество коннектов к серверу, однако не посылают много-много запросов, а, наоборот, посылают один и медленно-медленно. В таком случае серверу не остается ничего другого, кроме как ждать, когда же вы запрос наконец придёт. А он всё не приходит и не приходит.
В результате все треды (или потоки) апача заняты тем, что ждут, когда же всё-таки запрос придёт.
Nginx перед или вместо Апача
Nginx атаке SlowLoris практически не подвержен. Конечно, у него есть лимит открытых соединений, который по дефолту довольно маленький, однако его можно увеличивать практически безболезненно для системы. Не забывая, конечно, при этом увеличивать значение worker_rlimit_nofile.
Однако иногда бывает, что по каким-то причинам Нжинкс перед Апачем не поставить. Делать нечего, надо отбиваться другими силами.
Так и как бороться?
Я для этой цели написал небольшой скрипт, который делает следующее:
- Выбираем из /server-status список PID’ов процессов апача, которые заняты чтением (reading).
- Из вывода netstat смотрим, с каких IP идут коннекты
- Баним эти IP
#!/bin/bash date >> /tmp/banned lynx -dump localhost/server-status | grep reading | awk '{if ($6 > 10 ) print $2}' > /tmp/processes for pid in `cat /tmp/processes`; do IP=`netstat -ntp | grep EST| grep $pid | awk '{print $5}' | cut -d: -f1`; echo $IP >> /tmp/banned iptables -t raw -I PREROUTING -s $IP -j DROP 2>/dev/null done
И запускаем этот скрипт по крону раз в сколько-то минут.
Для его работы необходим lynx, который можно установить командой:
$ sudo aptitude install lynx
Не забудьте включить mod_status у апача. В моём случае он отвечает на localhost/server-status.
Автор: AlexWinner
Дата публикации: 2013-12-12T12:25:00.001-08:00