🌐 Защита Apache от брутфорса и DDoS с помощью модулей Mod_Security и Mod_evasive — Information Security Squad
🌐 Защита Apache от брутфорса и DDoS с помощью модулей Mod_Security и Mod_evasive

Для тех из вас, кто занимается хостингом, или если вы размещаете свои собственные серверы и открываете их для всех пользователей Интернета, защита ваших систем от злоумышленников должна быть первоочередной задачей.

mod_security (механизм обнаружения и предотвращения вторжений с открытым исходным кодом для веб-приложений, который легко интегрируется с веб-сервером) и mod_evasive — два очень важных инструмента, которые можно использовать для защиты веб-сервера от перебора паролей или (D) DoS-атак.

mod_evasive, как следует из его названия, обеспечивает уклоняющиеся возможности во время атаки, выступая в роли зонтика, который защищает веб-серверы от таких угроз.

В этой статье мы обсудим, как установить, настроить и использовать их вместе с Apache на RHEL / CentOS 8 и 7, а также с Fedora.

Кроме того, мы смоделируем атаки, чтобы убедиться, что сервер реагирует соответствующим образом.

Вам также нужно будет настроить iptables в качестве внешнего интерфейса брандмауэра по умолчанию вместо firewalld, если вы используете RHEL / CentOS 8/7 или Fedora.
Мы делаем это для того, чтобы использовать один и тот же инструмент как в RHEL / CentOS 8/7, так и в Fedora.

Шаг 1. Установка брандмауэра Iptables на RHEL / CentOS 8/7 и Fedora

Для начала остановите и отключите firewalld:

# systemctl stop firewalld
# systemctl disable firewalld

Затем установите пакет iptables-services перед включением iptables:

# yum update && yum install iptables-services
# systemctl enable iptables
# systemctl start iptables
# systemctl status iptables

Шаг 2: Установка Mod_Security и Mod_evasive

Помимо установки LAMP, вам также нужно включить репозиторий EPEL в RHEL / CentOS 8/7, чтобы установить оба пакета.

Пользователям Fedora не нужно включать репо, потому что epel уже является частью проекта Fedora.

# yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
# dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
# dnf --enablerepo=raven-extras install mod_evasive

Когда установка будет завершена, вы найдете файлы конфигурации для обоих инструментов в /etc/httpd/conf.d.

# ls -l /etc/httpd/conf.d
Теперь, чтобы объединить эти два модуля с Apache и загрузить их при запуске, убедитесь, что следующие строки появляются в разделе верхнего уровня mod_evasive.conf и mod_security.conf соответственно:
LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

Обратите внимание, что modules/mod_security2.so и modules/mod_evasive24.so являются относительными путями  каталога /etc/httpd.

Вы можете проверить это (и изменить его, если необходимо), перечислив содержимое каталога /etc/httpd/modules:

# cd /etc/httpd/modules
# pwd
# ls -l | grep -Ei '(evasive|security)'

Затем перезапустите Apache и убедитесь, что он загружает mod_evasive и mod_security:

# systemctl restart httpd
Создайте дамп списка загруженных статических и общих модулей.
# httpd -M | grep -Ei '(evasive|security)'

Шаг 3: Установка основного набора правил и настройка Mod_Security

В двух словах, Core Rule Set (aka CRS) предоставляет веб-серверу инструкции о том, как вести себя в определенных условиях.

Фирма-разработчик mod_security предоставляет бесплатный CRS под названием OWASP (Open Web Application Security Project) ModSecurity CRS, который можно загрузить и установить следующим образом.

1. Загрузите OWASP CRS в каталог, созданный для этой цели.

# mkdir /etc/httpd/crs-itsecforu
# cd /etc/httpd/crs-itsecforu
# wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master
2. Распакуйте файл CRS и измените имя каталога по вашему желанию.
# tar xzf master
# mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs
3. Теперь пришло время настроить mod_security.
Скопируйте файл примера с правилами (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) в другой файл без расширения .example:
# cd owasp-modsecurity-crs/
# cp crs-setup.conf.example crs-setup.conf

и укажите Apache использовать этот файл вместе с модулем, вставив следующие строки в основной файл конфигурации веб-сервера /etc/httpd/conf/httpd.conf.

Если вы решили распаковать архив в другой каталог, вам нужно будет отредактировать пути:

<IfModule security2_module>
        Include crs-itsecforu/owasp-modsecurity-crs/crs-setup.conf
        Include crs-itsecforu/owasp-modsecurity-crs/rules/*.conf
</IfModule>

Наконец, рекомендуется создать наш собственный файл конфигурации в каталоге /etc/httpd/modsecurity.d, в который мы поместим наши настраиваемые директивы (в следующем примере мы назовем его itsecforu.conf) вместо прямой модификации файлов CRS. , это позволит упростить обновление CRS по мере выпуска новых версий.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

Шаг 4: Настройка Mod_Evasive

mod_evasive настраивается с использованием директив в /etc/httpd/conf.d/mod_evasive.conf.

Поскольку нет никаких правил обновления во время обновления пакета, нам не нужен отдельный файл для добавления настраиваемых директив, в отличие от mod_security.

В файле mod_evasive.conf по умолчанию включены следующие директивы (обратите внимание, что в этом файле много комментариев, поэтому мы удалили их, чтобы выделить директивы конфигурации):

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

Пояснения к директивам:


  • DOSHashTableSize: эта директива указывает размер хеш-таблицы, которая используется для отслеживания активности для каждого IP-адреса. Увеличение этого числа обеспечит более быстрый поиск сайтов, которые клиент посещал в прошлом, но может повлиять на общую производительность, если оно установлено слишком высоким.
  • DOSPageCount: законное число идентичных запросов к определенному URI (например, любому файлу, обслуживаемому Apache), которые могут быть сделаны посетителем в течение интервала DOSPageInterval.
  • DOSSiteCount: аналогично DOSPageCount, но относится к общему количеству запросов, которые могут быть отправлены всему сайту за интервал DOSSiteInterval.
  • DOSBlockingPeriod: если посетитель превышает ограничения, установленные DOSSPageCount или DOSSiteCount, его IP-адрес источника будет занесен в черный список в течение периода времени DOSBlockingPeriod. Во время DOSBlockingPeriod любые запросы с этого IP-адреса будут сталкиваться с ошибкой 403 Forbidden.

Не стесняйтесь экспериментировать с этими значениями, чтобы ваш веб-сервер мог обрабатывать необходимый объем и тип трафика.

Только небольшое предостережение: если эти значения не установлены правильно, вы рискуете в конечном итоге блокировать законных посетителей.

Вы также можете рассмотреть другие полезные директивы:

  • DOSEmailNotify
  • DOSSystemCommand

Шаг 4: Имитация DDoS-атак на Apache

Есть несколько инструментов, которые вы можете использовать для имитации внешней атаки на ваш сервер.

Вы можете просто найти их в Google  по запросу «инструменты для симуляции ddos-атак».

Обратите внимание, что вы и только вы будете нести ответственность за результаты вашей симуляции.

Даже не думайте о запуске симулированной атаки на сервер, который не размещен в вашей собственной сети.


Если вы хотите сделать то же самое с VPS, который размещен кем-то другим, вам необходимо соответствующим образом предупредить вашего хостинг-провайдера или попросить разрешения для такого трафика, проходящего через их сети.

itsecforu.ru никоим образом не несет ответственности за ваши действия!

Кроме того, запуск симулированной DoS-атаки только с одного хоста не представляет реальной атаки.

Чтобы имитировать такое, вам нужно настроить таргетинг на сервер из нескольких клиентов одновременно.

Наша тестовая среда состоит из сервера CentOS 7 [IP 192.168.0.17] и хоста Windows, с которого мы начнем атаку [IP 192.168.0.103]:

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *