Защита Apache от DDOS

Майор

Premium
Premium
Регистрация
04.09.14
Сообщения
2.904
Реакции
1.993
Баллы
113
Веб-сайт
dnrschool-145.ru
Чтобы не обмануть кого-то, сразу скажу, что автор не я. Статься взята с 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 решений.
Слабым местом может стать.... А не скажу я, что может стать слабым местом))))) Догадайтесь сами

 

Майор

Premium
Premium
Регистрация
04.09.14
Сообщения
2.904
Реакции
1.993
Баллы
113
Веб-сайт
dnrschool-145.ru
от себя добавлю, что если на сервере установлен nginx, то данный мануал читать не нужно)))) Если nginx правильно настроен, то об этом можно забыть)))
 
Сверху Снизу