Здравствуйте, уважаемые читатели. Сегодня тема статьи: "NAXSI и ModSecurity в Nginx Ubuntu 20.04". Рассмотрим установку и базовую настройку NAXSI и ModSecurity, в Nginx на Ubuntu server 20.04.

NAXSI и ModSecurity – это дополнительные модули веб-сервера, выполняющие функции защиты веб-приложения.

В данной статье мы рассмотрим подключение NAXSI и ModSecurity, в качестве динамических модулей для веб-сервера Nginx. Данный метод подключения удобен тем, что не требуется переустановки веб-сервера, так как модули подключаются к уже работающему Nginx. Но нужно иметь ввиду, что модуль привязывается к версии Nginx, и в случае его обновления, потребуется создание нового модуля и замена им старого.

Оба модуля выполняют одну и ту же функцию. Использовать можно либо один, либо другой, но не оба одновременно.

Установка NAXSI в Nginx на Ubuntu 20.04

  • Начнём с установки NAXSI.
  • Для создания модуля, нам нужно произвести установку дополнительных пакетов.

Установка требуемых пакетов для создания динамического модуля NAXSI

# apt install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf libcurl4-openssl-dev automake pkgconf zlib1g-dev

Скачивание исходников используемой версии Nginx

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

Сборка динамического модуля NAXSI

  • Клонируем NAXSI в рабочую директорию.
# git clone https://github.com/nbs-system/naxsi.git
  • Заходим в каталог с исходниками Nginx, и производим сборку модуля.
# cd nginx-1.18.0
# ./configure --with-compat --add-dynamic-module=../naxsi/naxsi_src
# make modules
  • Копируем созданный модуль в директорию NGINX.
# cp objs/ngx_http_naxsi_module.so /etc/nginx
  • Подключаем созданный модуль в конфигурационном файле /etc/nginx/nginx.conf.
load_module /etc/nginx/ngx_http_naxsi_module.so;
подключение модуля NAXSI в конфигурационном файле NGINX

Настройка NAXSI

  • Модуль создан и подключен к веб-серверу. Но нам требуется произвести ещё некоторые дополнительные действия.
  • Копируем набор правил NAXSI, из папки с исходниками в директорию NGINX.
# cp /usr/local/src/naxsi/naxsi_config/naxsi_core.rules /etc/nginx/
  • Подключаем скопированные правила в конфигурационном файле /etc/nginx/nginx.conf.
include /etc/nginx/naxsi_core.rules;
подключение правил NAXSI в конфигурационном файле NGINX
  • Следующим шагом, создаём файл правил блокировки /etc/nginx/naxsi.rules.
# LearningMode;
SecRulesEnabled;
# SecRulesDisabled;
DeniedUrl "/error.html";
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
error_log /var/log/naxsi.log;
  • Первые три строчки отвечают за режим работы NAXSI.
  • Четвёртая строчка указывает на файл, который будет выведен в случае вредоносного запроса.
  • Следующие пять строчек, это сами правила.
  • Последняя строчка задаёт путь к файлу логов.

Файл правил блокировки нужно подключить в существующую секцию location / требуемого сайта.

location / {
        *****
        *****
        include /etc/nginx/naxsi.rules;
}
  • Создаём в корневой директории сайта, тот самый файл, который будет выведен в случае вредоносного запроса.
  • В моём случае, это будет /var/www/test.ru/site/error.html.
<html>
<head>
<title>Blocked By Security System</title>
</head>
<body>
<div style="text-align: center">
<p style="margin: 150px 50px 50px 50px; font-size:40px;">Malicious Request</p>
<p style= "font-size:120px"><font color="red">&#8416;</font></p>
<p style="margin: 50px; font-size:40px;">This Request Has Been Blocked By Security System.</p>
</div>
</body>
</html>
  • Перезапускаем веб-сервер, чтобы внесённые нами изменения применились.
# systemctl restart nginx

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

  • Для проверки работы модуля, нужно произвести вредоносный запрос.
  • Открываем браузер и вводим запрос:
http://Ваше_доменное_имя/?q="><script>alert(0)</script>
  • В ответ мы увидим созданную заглушку, а в лог-файле /var/log/naxsi.log, появится запись о событии.
страница-заглушка NAXSI
  • На этом установка и базовая настройка модуля NAXSI завершены.

Установка ModSecurity в Nginx на Ubuntu 20.04

  • Для создания динамического модуля ModSecurity в Nginx, потребуются как и в предыдущем случае некоторые пакеты.

Установка требуемых пакетов для создания динамического модуля ModSecurity

# apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf zlib1g-dev

Сборка динамического модуля ModSecurity

  • Заходим в рабочую директорию, и клонируем исходники ModSecurity.
# cd /usr/local/src/
# 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 в качестве динамического модуля, потребуется коннектор ModSecurity-nginx.
  • Возвращаемся в рабочую директорию, и клонируем коннектор.
# cd /usr/local/src/
# git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

Скачивание исходников используемой версии Nginx

  • Модуль должен быть создан на основе версии работающего веб-сервера.
  • Узнаём версию используемого Nginx.
# nginx -v
  • Скачиваем архив исходников требуемой версии в рабочую директорию.
  • В моём случае это версия 1.18.0.
# wget http://nginx.org/download/nginx-1.18.0.tar.gz
  • Извлекаем содержимое архива, и заходим в каталог с исходниками веб-сервера.
# tar xvfz nginx-1.18.0.tar.gz
# cd /usr/local/src/nginx-1.18.0
  • Производим сборку динамического модуля ModSecurity.
# ./configure --with-http_ssl_module --with-compat --add-dynamic-module=../ModSecurity-nginx
# make modules
  • Копируем собранный модуль в директорию NGINX.
# cp objs/ngx_http_modsecurity_module.so /etc/nginx
  • Производим подключение созданного модуля в конфигурационном файле /etc/nginx/nginx.conf.
load_module /etc/nginx/ngx_http_modsecurity_module.so;
подключение модуля ModSecurity в конфигурационном файле NGINX

Настройка 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 в боевой режим:

Строчку
SecRuleEngine DetectionOnly 

Изменяем на 
SecRuleEngine On


Чтобы не возникло ошибки:

Находим и закомментируем строчку
SecUnicodeMapFile unicode.mapping 20127
  • Создаём основной файл конфигурации /etc/nginx/modsec/main.conf. В данный файл будем подключать требуемые файлы, а его в итоге подключим в конфиг веб-сервера.
  • Производим первое подключение в файле /etc/nginx/modsec/main.conf. Добавляем одну строчку.
Include /etc/nginx/modsec/modsecurity.conf

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

  • Для лучшей работы ModSecurity, настроим его на использование правил от OWASP.
  • Заходим в рабочую директорию, скачиваем архив с правилами, и извлекаем содержимое.
# 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, добавляем две строчки.
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
  • Так как не установлен модуль GeoIP, нужно удалить одно из правил OWASP. В противном случае будет выходить ошибка.
# rm /usr/local/src/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf

Подключение и проверка работы ModSecurity

  • Для подключения динамического модуля ModSecurity, в файле /etc/nginx/nginx.conf, нужно добавить две строчки.
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
подключение конфигурационного файла и активация ModSecurity в конфигурационном файле NGINX
  • Проверяем конфигурацию Nginx, и если нет ошибок, то перезапускаем его.
# nginx -t
# systemctl restart nginx
  • Для проверки работы модуля, отправляем вредоносный запрос с помощью браузера.
http://Ваше_доменное_имя/?q="><script>alert(0)</script>

  • Результат можно проверить в логе веб-сервера.
запись в логе о заблокированном ModSecurity вредоносном запросе
  • Как видно на картинке, вредоносный запрос был заблокирован. Значит всё работает правильно.
  • На этом установка и базовая настройка модуля ModSecurity завершены.

Сегодня мы рассмотрели тему: "NAXSI и ModSecurity в Nginx Ubuntu 20.04". Создали, подключили, и произвели базовую настройку, динамических модулей NAXSI и ModSecurity, в Nginx на Ubuntu server 20.04. Смотрите так же, видео по теме.

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

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


Видео на тему "NAXSI и ModSecurity в Nginx Ubuntu 20.04":