В своё время очень удивился тому, что Apache, так сказать, из коробки не может противостоять таким видам DDoS атак как SlowPOST и SlowHEADERS. Если учесть, что такого рода шалость может организовать любой школьник, то устранить этот недочёт показалось мне крайне необходимым.
Если затронуть немного теорию, то смысл этих атак в том, что в заголовках POST присутствует поле "Content-Length", которое определяет количество данных для передачи. Как только этот заголовок принимается WEB-сервером, может начаться очень медленная передача данных. При этом отвечать на другие запросы Apache не сможет, пока данные не передадутся от одного соединения. А если их тысячи, то ждать придётся долго. Т.е. все сайты, которые живут на WEB-сервере просто станут не доступны. Что самое интересное, так это отсутствие практически любых признаков атаки. Выдать сможет только выросшее количество TCP соединений.
Для предотвращения подобных проблем в Apache2 есть модуль reqtimeout. Смысл этого модуля в том, что он ограничивает время ожидания первого байта заголовков строки и тела запроса и устанавливает минимальную скорость для передачи данных, не взирая на настройки клиентской стороны. Для установки модуля выполняем команду
a2enmod reqtimeout
и перезапускаем Apache
service apache2 restart
Стандартных значений вполне достаточно, что бы предотвратить падение сайтов:
RequestReadTimeout header=20-40,minrate=500
RequestReadTimeout body=10,minrate=500
</IfModule
Я не тестировал стойкость Apache при DDoS с несколькх IP адресов.