Как лучше защитить себя от «медленной» атаки DOS на веб-сервер Apache?

32

Недавно сценарий под названием «slowloris» привлек внимание. Основная концепция того, что делает slowloris, - это не новая атака, но, учитывая недавнее внимание, я заметил небольшое увеличение количества атак на некоторые из наших веб-сайтов Apache.

На данный момент нет никакой 100% защиты от этого.

Лучшее решение, которое мы определили (на данный момент) - это увеличить MaxClients.

Это, конечно, не более чем повышает требования к компьютеру злоумышленника и фактически не защищает сервер на 100%.

В другом отчете указывается, что использование обратного прокси-сервера (такого как Perlbal) перед сервером Apache может помочь предотвратить атаку.

Использование mod_evasive для ограничения количества соединений с одного хоста и использование mod_security для запрета запросов, которые выглядят так, как будто они были сделаны slowloris, покажутся лучшей защитой на данный момент.

Кто-нибудь на ServerFault испытывал подобные атаки? Если да, какие меры вы предприняли для его защиты / предотвращения?

ПРИМЕЧАНИЕ. Этот вопрос относится к серверам Apache, поскольку, насколько я понимаю, серверы Windows IIS не затрагиваются.

KPWINC
источник

Ответы:

22

Я испытал такое нападение ... в середине лета (23 июня), где вы должны быть в сельской местности и пить пиво:>

Я поставил свой Apache за Varnish , который не только защищал от slowloris, но и несколько ускорял веб-запросы.

Также iptablesмне помогли:

iptables -I INPUT -p tcp --dport 80 \
         -m connlimit --connlimit-above 20 --connlimit-mask 40 -j DROP

Это правило ограничивает один хост до 20 подключений к порту 80, что не должно влиять на не злонамеренного пользователя, но сделает медленный доступ невозможным с одного хоста.

Кристапу
источник
4
+1 за правило iptables.
Тим
1
Просто один на один. «Из коробки», лак не кэширует страницы, если он получил куки. Вам нужно сделать несколько пользовательских настроек, чтобы обойти это. Примеры доступны на их сайте и их легко реализовать.
Дэвид
Varnish вполне программируемый, поэтому вы можете настроить его, чтобы увидеть, что происходит, и справиться с ним. Тем не менее, я думаю, что, поставив прокси перед apache, вы просто перенесете проблему с веб-сервера на прокси. Проблема все еще там, просто в другом месте. Соединения / порты все еще будут использованы. Я бы начал с перечисленного правила iptables (или эквивалента для вашего брандмауэра), а затем посмотрел на прокси.
Дэвид
1
проблема с атакой sloworis ограничена многопоточной моделью apache (и несколькими другими веб-серверами, использующими аналогичную модель). Лак должен пережить это.
Cian
3

Если все ваши модули Apache являются поточно-ориентированными, slowloris можно победить, просто переключившись на MPM событий или рабочих. ссылка: здесь

Киан
источник
0

Сейчас кажется, что больше ничего нельзя сделать, чтобы ограничить максимальное число одновременных соединений на ip на сервере.

максвелл
источник
0

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

Dentrasi
источник
0

Брандмауэр на основе iptable должен защищать вас от нескольких подключений от 1 ip.


источник
0

Если это кому-то еще поможет, иногда вы можете решить эту проблему с помощью Apache 2.2.15 или новее с помощью следующей конфигурации:

LoadModule reqtimeout_module modules/mod_reqtimeout.so
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

Более подробная информация здесь: https://httpd.apache.org/docs/2.2/mod/mod_reqtimeout.html.

MrCarrot
источник