Защита Apache от DDOS

Майор

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
2.850
Реакции
1.954
Баллы
113
Чтобы не обмануть кого-то, сразу скажу, что автор не я. Статься взята с http://habrahabr.ru/post/145215/
Здесь затронута тема защиты веб-сервера Apache от атаки медленного чтения, а так же некоторых других направленных атак.
Рассмотренный способ позволяет обезопасить работу сервера с помощью расширений mod_evasive и mod_security, а главное — требует менее получаса времени на реализацию. Настройка производилась на Ubuntu версии 12.04 + Apache 2.2. Настройка для других версий веб-сервера, а так же для других операционных систем отличается, в основном, особенностями установки программных пакетов и, собственно, версиями устанавливаемых программ и модулей для них.

Орфография и пунктуация автора сохранены. От себя добавлю, что в debian команды аналогичные. И предполагается, что установка и настройка производятся от имени root

Установка пакетов
Поскольку защищаемый сервер установлен на Ubuntu, установка необходимых модулей для Apache выполняется одной командой:
Код:
apt-get install libapache2-mod-evasive libapache-mod-security
Пакет mod_evasive обеспечит защиту от DDOS flood-атак прикладного уровня, в то время как mod_security обеспечит защиту от направленных атак, в том числе и атаки медленного чтения.

По своей сути, mod_security — это программный фаервол с открытым кодом, защищающий вебсервер, и разрабатываемый Trustwave SpiderLabs.
Настройка mod_evasive
Для работы модуля понадобится папка для сохранения логов с правами для записи Apache (предполагается, что веб-сервер запущен от пользователя www-data):
Код:
mkdir /var/log/mod_evasive
chown www-data:www-data /var/log/mod_evasive/
Создадим файл с настройками:


Код:
nano /etc/apache2/conf.d/modevasive
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 90
DOSLogDir /var/log/mod_evasive
DOSEmailNotify EMAIL@DOMAIN.com
DOSWhitelist 127.0.0.1
</ifmodule>
Email необходимо заменить на адрес получателя информации об обнаруженной атаке (для отправки писем понадобится sendmail/postfix).
На этом настройка mod_evasive завершена.

Настройка mod_security
Поскольку mod_security — это фаервол, для работы ему необходим набор правил.
Скачать свежую версию правил можно со странички на SourceForge. Кроме того, есть возможность настроить автоматическое обновление правил, более подробно это описано тут.
В скачанном архиве Вы обнаружите несколько папок. Нас интересуют базовые правила, находящиеся в папке base_rules.
Создадим папку для правил, скопируем их из скачанного с SourceForge и распакованного файла.
Код:
mkdir /etc/apache2/mod_security_rules
mv base_rules/* /etc/apache2/mod_security_rules
chown -R root:root /etc/apache2/mod_security_rules
Создадим файл конфигурации для mod_security с таким содержимым:


Код:
nano /etc/apache2/conf.d/modsecurity
<ifmodule mod_security2.c>
Include mod_security_rules/*.conf
SecWriteStateLimit 100
</ifmodule>
Данный конфиг подключит только что скопированные нами правила, а кроме того — установит лимит на количество потоков на каждый отдельный IP, которые могут находиться в режиме SERVER_BUSY_WRITE, что предотвратит возможность выполнения атак типа Slow Loris/SlowHttp.

Для 32-битной версии Ubuntu настройка на этом заканчивается.
В x64 существует баг с modsecurity, связанный с отличием путей к библиотекам, из-за которого не подключается libxml. Для исправления первым делом нужно определить, где находится Ваша библиотека libxml2.so.2:
Код:
locate libxml2.so.2
Возможны 2 варианта: /usr/lib/x86_64-linux-gnu/libxml2.so.2 или /usr/lib/i386-linux-gnu/libxml2.so.2. Далее необходимо отредактировать файл /etc/apache2/mods-enabled/mod-security.load, заменив путь, по которому расположена подключаемая библиотека с /usr/lib/libxml2.so.2 на путь к библиотеке в Вашей системе.
Убедимся, что модули подключены:


Код:
a2enmod mod-evasive
a2enmod mod-security
и перезапустим Apache для применения конфигов:
Код:
service apache2 restart

Тестирование
Для тестирования используем утилиту slowhttptest. Об ее настройке и установке можно прочитать на страницах проекта, поэтому перейдем сразу к применению:
Код:
slowhttptest -c 65539 -B -g -o my_server_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u DOMAIN.COM -x 10 -p 3
Если верить выводу программы, то уже на пятой секунде сервер становится недоступен:
Код:
Sat Jun 2 16:41:37 2012:slow HTTP test status on 5th second:
initializing: 0
pending: 564
connected: 217
error: 0
closed: 0
service available: NO
А вот, что записал в логи Apache:
Код:
tail /var/log/apache2/error.log
[Sat Jun 02 16:41:38 2012] [warn] ModSecurity: Access denied with code 400. Too many threads [101] of 100 allowed in WRITE state from xxx.xxx.xxx.xxx - Possible DoS Consumption Attack [Rejected]
Таким образом, сервер более не подвержен атаке медленного чтения и временно блокирует по IP адресу пользователей, производящих атаку.

Основные преимущества такого способа защиты: простота и скорость настройки, использование OpenSource решений.
Слабым местом может стать.... А не скажу я, что может стать слабым местом))))) Догадайтесь сами

 

Майор

Администратор
Команда форума
Регистрация
04.09.14
Сообщения
2.850
Реакции
1.954
Баллы
113
от себя добавлю, что если на сервере установлен nginx, то данный мануал читать не нужно)))) Если nginx правильно настроен, то об этом можно забыть)))
 
Сверху Снизу