tm

   В своё время очень удивился тому, что Apache, так сказать, из коробки не может противостоять таким видам DDoS атак как SlowPOST и SlowHEADERS. Если учесть, что такого рода шалость может организовать любой школьник, то устранить этот недочёт показалось мне крайне необходимым.

   Если затронуть немного теорию, то смысл этих атак в том, что в заголовках POST присутствует поле "Content-Length", которое определяет количество данных для передачи. Как только этот заголовок принимается WEB-сервером, может начаться очень медленная передача данных. При этом отвечать на другие запросы Apache не сможет, пока данные не передадутся от одного соединения. А если их тысячи, то ждать придётся долго. Т.е. все сайты, которые живут на WEB-сервере просто станут не доступны. Что самое интересное, так это отсутствие практически любых признаков атаки. Выдать сможет только выросшее количество TCP соединений.

   Для предотвращения подобных проблем в Apache2 есть модуль reqtimeout. Смысл этого модуля в том, что он ограничивает время ожидания первого байта заголовков строки и тела запроса и устанавливает минимальную скорость для передачи данных, не взирая на настройки клиентской стороны. Для установки модуля выполняем команду

a2enmod reqtimeout

и перезапускаем Apache

service apache2 restart

 Стандартных значений вполне достаточно, что бы предотвратить падение сайтов:

nano /etc/apache2/mods-enabled/reqtimeout.conf
IfModule reqtimeout_module
RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500
</IfModule

Я не тестировал стойкость Apache при DDoS с несколькх IP адресов.

Комментарии отключены