Доброго времени суток, уважаемые читатели. Сегодня статья на тему: «Установка ModSecurity в NGINX на CentOS 7». Как можно обезопасить веб-сайт от атак, с использованием уязвимостей на уровне веб-приложения? Для данных целей можно использовать WAF – Firewall для веб-приложений.

ModSecurity – это ПО, выполняющее функции Firewall на уровне веб-приложения (защита от XSS, SQL Injection и т.д.)

  • В этой статье мы рассмотрим установку ModSecurity, в качестве динамического подключаемого модуля, для веб-сервера NGINX, в операционной системе CentOS 7. Установку будем производить, на уже работающем NGINX.
  • Готового пакета ModSecurity для NGINX не существует, поэтому нам нужно будет производить сборку из необходимых исходников.

При обновлении NGINX, нужно будет производить полную пересборку, так как модуль будет привязан к версии NGINX.

Установка необходимых пакетов

  • Прежде всего, нужно скачать необходимые для сборки пакеты.
# yum install git libcurl-devel libxml2-devel pcre-devel libtool wget make autoconf gcc-c++ openssl-devel

Компиляция ModSecurity

  • Заходим в рабочую директорию, в которой будем производить все манипуляции.
# cd /usr/local/src/
  • Клонируем исходники ModSecurity из github.
# git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
  • Переходим в папку с ModSecurity, и выполняем компиляцию.
# cd ModSecurity
# git submodule init
# git submodule update
# ./build.sh
# ./configure
# make
# make install

Клонирование коннектора

  • Так как мы не будем встраивать ModSecurity в NGINX, а будем подключать его в качестве динамического модуля, нам понадобится коннектор.
  • Возвращаемся в рабочую директорию, и клонируем коннектор с github.
# cd /usr/local/src/
# git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

Скачивание копии работающего NGINX

  • Чтобы модуль работал, нам нужно произвести сборку на основе используемого NGINX.
  • Узнаём версию используемого NGINX, и скачиваем нужный архив с официального сайта.
# nginx -v
версия NGINX
# wget http://nginx.org/download/nginx-1.16.1.tar.gz
  • Разархивируем архив, и переходим в папку с NGINX.
# tar xvfz nginx-1.16.1.tar.gz
# cd /usr/local/src/nginx-1.16.1

Сборка и подключение модуля

  • Теперь можно запускать сборку модуля.
# ./configure --with-http_ssl_module --with-compat --add-dynamic-module=../ModSecurity-nginx
# make modules
  • Копируем собранный модуль, в директорию для модулей Nginx.
# cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
  • Для подключения модуля, нужно произвести его подключение в конфигурационном файле /etc/nginx/nginx.conf.
load_module modules/ngx_http_modsecurity_module.so;
подключение модуля ModSecurity

Конфигурация ModSecurity

  • Теперь нужно настроить конфигурацию ModSecurity, для этого нужно скачать файл, с конфигурацией рекомендуемой разработчиками.
  • Создаём директорию, в которой будут находится нужные файлы для работы ModSecurity. Переходим в неё, и скачиваем рекомендуемый файл.
# mkdir /etc/nginx/modsec
# cd /etc/nginx/modsec
# wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended
  • Переименовываем скачанный файл в modsecurity.conf.
# mv modsecurity.conf-recommended modsecurity.conf
  • Чтобы установить ModSecurity в боевой режим, нужно в файле modsecurity.conf, произвести некоторые изменения:
Найти строчку
SecRuleEngine DetectionOnly

и изменить её на
SecRuleEngine On
  • Далее создаём файл /etc/nginx/modsec/main.conf, в котором будет производиться подключение всех настроек и правил, и подключаем в нём файл от разработчиков.
Include /etc/nginx/modsec/modsecurity.conf

Подключение правил от OWASP

  • По умолчанию разработчики предоставляют только базовый набор правил. Для усиления защиты, мы будем использовать подборку правил от OWASP, созданную специально для ModSecurity.
  • Заходим в рабочую директорию, скачиваем архив с правилами, и разархивируем его.
# cd /usr/local/src
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz
# tar -xzvf v3.0.0.tar.gz
  • Заходим в папку с правилами, и копируем с переименованием файл crs-setup.conf.example.
# cd /usr/local/src/owasp-modsecurity-crs-3.0.0
# cp crs-setup.conf.example crs-setup.conf
  • Возвращаемся к файлу /etc/nginx/modsec/main.conf, в котором производим подключение правил OWASP. Добавляем две строчки.
Include /usr/local/src/owasp-modsecurity-crs-3.0.0/crs-setup.conf
Include /usr/local/src/owasp-modsecurity-crs-3.0.0/rules/*.conf

Активация модуля и конфигурации

  • Теперь можно активировать модуль и конфигурацию. Добавляем в файл /etc/nginx/nginx.conf, две строчки.
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
активация модуля ModSecurity
  • Проверяем конфигурацию NGINX.
# nginx -t

Исправление возможных ошибок

  • В зависимости от конфигурации Вашего NGINX, может понадобится исправить две ошибки.
  • Первая связана с Unicode. Открываем файл /etc/nginx/modsec/modsecurity.conf, находим и закомментируем в нём строчку.
# SecUnicodeMapFile unicode.mapping 20127
исправление ошибки Unicode
  • Вторая возможная ошибка, связана с одним из файлов правил OWASP, его можно просто удалить.
# rm /usr/local/src/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf
  • Ещё раз проверяем конфигурацию NGINX, и перезапускаем его.
# nginx -t
# systemctl restart nginx

Проверка работы ModSecurity

  • ModSecurity работает в боевом режиме, по правилам безопасности от OWASP. Можно проверить его работу.
  • Открываем браузер, вводим доменное имя или ip-адрес, ставим слеш, а после него вставляем зловредный запрос, и жмём «Enter».

http://ВАШ_САЙТ.ru/?q="><script>alert(0)</script>

  • В итоге получаем 403 ошибку, означающую, что доступ запрещён. В логах NGINX, появляется запись о блокировке ModSecurity вредоносного запроса.
  • ModSecurity отработал как положено.
 запись о блокировке ModSecurity

Сегодня мы рассмотрели тему: «Установка ModSecurity в NGINX на CentOS 7». Произвели установку ModSecurity, в качестве динамического модуля в NGINX на CentOS 7. Смотрите также видео по теме.

Надеюсь статья была вам полезна. До встречи в новых статьях.

С уважением, Андрей Бондаренко.


Видео на тему «Установка ModSecurity в NGINX на CentOS 7»: