Как я блокировал атакующих Apache с помощью ipfw

Пяток лет назад довелось администрировать один высоко нагруженный веб сервер. Нагрузка была не из за посещаемости, а из за постоянной атаки конкурентами. Ниже делюсь одним из вспомогательных способов борьбы с подлецами.

Итак алгоритм такой:
В лог файле apache2 мы наблюдаем множество ошибок 408. Атака заключалась в том, что к серверу обращались огромным количеством сессий, тем самым ставя службу в ступор (речь идет о ресурсах, количестве процессов, нагрузке ЦП).
Я не сомневаюсь что есть миллион способов более грамотного решения проблемы, но я на тот момент очень эффективно решил проблему следующим образом:

1. Парсим лог apache2 на предмет 408 ошибки, ловим IP адреса плохих парней, и складываем их в файл.
2. Загружаем этот файл в запрещающую таблицу фаервола ipfw2.

cat /var/log/some-good-site.com-ssl-access.log | grep "408 -" | awk '{print $1}' | sort | uniq >> /etc/fw_black_list
cat /etc/fw_black_list | awk '{ if ($1!="") {system("/sbin/ipfw table 1 add "$1"")} }'

Как часто это делать — решайте сами. Например по расписанию через cron.
Я делал это часто, потому что уваливали сервер очень плотно. Этот рецепт сработал, и я решил написать, вдруг это поможет и вам. Если есть более интересные и грамотные решения, пишите. Буду рад подискутировать на эту тему.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *