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

в 19:43, , рубрики: Apache, apache2, modsecurity, метки: ,

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

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

Установка пакетов
Поскольку защищаемый сервер установлен на Ubuntu, установка необходимых модулей для Apache выполняется одной командой:

sudo apt-get install libapache2-mod-evasive libapache-mod-security libxml2-dev

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

По своей сути, mod_security — это opensource программный фаервол, защищающий вебсервер, разрабатываемый 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

Email необходимо заменить на адрес получателя информации об обнаруженной атаке (для отправки писем понадобится sendmail/postfix).
На этом настройка mod_evasive завершена.

Настройка mod_security
Для работы mod_security использует набор правил.
Скачать свежие правила можно со странички на SourceForge.
В скачанном архиве Вы обнаружите несколько папок. Нас интересуют базовые правила, находящиеся в папке base_rules.
Создадим папку для правил, скопируем их из скачанного с sf и распакованного файла.

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

Данный конфиг подключит только что скопированные нами правила, а кроме того — установит лимит на количество потоков на каждый отдельный IP, которые могут находиться в режиме SERVER_BUSY_WRITE, что предотвратит возможность выполнения атак типа Slow Loris/SlowHttp.

Для 32-битной версии Ubuntu настройка на этом заканчивается.
В x64 нужно произвести еще одно действ — в файле /etc/apache2/mods-enabled/mod-security.load нужно заменить путь, по которому расположена подключаемая библиотека с /usr/lib/ на /usr/lib/x86_64-linux-gnu/.

Убедимся, что модули подключены:

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 адресов.

Автор: engvard

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js