Pull to refresh

Защита веб-сервера Apache от атаки медленного чтения, а так же некоторых других направленных атак

Reading time3 min
Views47K
Приветствую.
Хочу поделиться опытом защиты веб-сервера Apache от атаки медленного чтения. О том, что это за атака можно почитать тут (английский), а так же тут (русский).

Рассмотренный способ позволяет обезопасить работу сервера с помощью расширений mod_evasive и mod_security, а главное — требует менее получаса времени на реализацию. Настройка производилась на Ubuntu версии 12.04 + Apache 2.2. Настройка для других версий веб-сервера, а так же для других операционных систем отличается, в основном, особенностями установки программных пакетов и, собственно, версиями устанавливаемых программ и модулей для них.



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

Пакет mod_evasive обеспечит защиту от DDOS flood-атак прикладного уровня, в то время как mod_security обеспечит защиту от направленных атак, в том числе и атаки медленного чтения.

По своей сути, mod_security — это программный фаервол с открытым кодом, защищающий вебсервер, и разрабатываемый Trustwave SpiderLabs.

Настройка mod_evasive
Для работы модуля понадобится папка для сохранения логов с правами для записи Apache (предполагается, что веб-сервер запущен от пользователя www-data):
sudo mkdir /var/log/mod_evasive
sudo chown www-data:www-data /var/log/mod_evasive/


Создадим файл с настройками:
sudo 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 и распакованного файла.
sudo mkdir /etc/apache2/mod_security_rules
sudo mv base_rules/* /etc/apache2/mod_security_rules
sudo chown -R root:root /etc/apache2/mod_security_rules

Создадим файл конфигурации для mod_security с таким содержимым:
sudo 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 на путь к библиотеке в Вашей системе.

Убедимся, что модули подключены:
sudo a2enmod mod-evasive
sudo 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 решений.
Слабым местом может стать распределенная атака, производимая с множества разных IP адресов.
Tags:
Hubs:
Total votes 15: ↑14 and ↓1+13
Comments16

Articles