NAXSI и ModSecurity в Nginx Ubuntu 20.04

Здравствуйте, уважаемые читатели. Сегодня тема статьи: "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
- Модуль создан и подключен к веб-серверу. Но нам требуется произвести ещё некоторые дополнительные действия.
- Копируем набор правил NAXSI, из папки с исходниками в директорию NGINX.
# cp /usr/local/src/naxsi/naxsi_config/naxsi_core.rules /etc/nginx/
- Подключаем скопированные правила в конфигурационном файле /etc/nginx/nginx.conf.
include /etc/nginx/naxsi_core.rules;

- Следующим шагом, создаём файл правил блокировки /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">⃠</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 завершены.
Установка 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
- Создаём директорию для файлов нужных в работе 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;

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

- Как видно на картинке, вредоносный запрос был заблокирован. Значит всё работает правильно.
- На этом установка и базовая настройка модуля ModSecurity завершены.
Сегодня мы рассмотрели тему: "NAXSI и ModSecurity в Nginx Ubuntu 20.04". Создали, подключили, и произвели базовую настройку, динамических модулей NAXSI и ModSecurity, в Nginx на Ubuntu server 20.04. Смотрите так же, видео по теме.
Надеюсь статья была вам полезна. До встречи в новых статьях.
✍
С уважением, Андрей Бондаренко.
Видео на тему "NAXSI и ModSecurity в Nginx Ubuntu 20.04":

WMZ-кошелёк = Z667041230317
«Ubuntu»