Пошаговое руководство по установке и настройке NAXSI Nginx WAF на Ubuntu 18.04 LTS
13:48, 30.07.2026
Межсетевые экраны веб-приложений (WAF) являются важнейшими инструментами для защиты веб-сайтов и веб-приложений от широкого спектра угроз. NAXSI (Nginx Anti XSS & SQL Injection) — это модуль WAF с открытым исходным кодом, который можно интегрировать в Nginx для добавления дополнительного уровня безопасности.
В этом руководстве мы расскажем, как установить брандмауэр Naxsi на сервере Ubuntu 18.04, настроить его и проверить его эффективность.
Системные требования
Прежде чем приступить к работе, убедитесь, что ваша система соответствует следующим требованиям:
- Операционная система: Ubuntu 18.04 LTS.
- Права пользователя: Root или пользователь с sudo правами.
- Подключение к Интернету: Требуется для загрузки пакетов и исходных файлов.
Начальная настройка
Исходя из нашего опыта, мы рекомендуем обновить систему перед установкой NAXSI Nginx WAF на сервере с Ubuntu 18.04. Вы можете обновить пакеты системы с помощью следующей команды:
apt-get update -y apt-get upgrade -yПерезапустите сервер, чтобы изменения вступили в силу.
Для компиляции Nginx из исходного кода также потребуются определенные зависимости. Установите необходимые зависимости с помощью команды:
apt-get install build-essential daemon libxml2-dev libxslt1-dev libgd-dev libgeoip-dev make libpcre3-dev libssl-dev unzip -yТеперь пакет Naxsi будет доступен в стандартном репозитории Ubuntu 18.04.
Сборка Nginx с интеграцией Naxsi
Далее вам нужно скомпилировать Nginx с поддержкой Naxsi.
Загрузите исходный код Nginx с помощью команды:
wget http://nginx.org/download/nginx-1.16.1.tar.gzРаспакуйте загруженный файл:
tar -xvzf nginx-1.16.1.tar.gzЗатем загрузите исходный код Naxsi с помощью следующей команды:
wget https://github.com/nbs-system/naxsi/archive/master.zipРазархивируйте загруженный файл с помощью следующей команды:
unzip master.zipДалее, перейдите в каталог с исходным кодом Nginx:
cd nginx-1.16.1/Необходимо настроить Nginx с поддержкой Naxsi с помощью этой команды:
./configure --conf-path=/etc/nginx/nginx.conf --add-module=../naxsi-master/naxsi_src/ --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --without-http_uwsgi_module --without-http_scgi_module --prefix=/usrСкомпилируйте Nginx с помощью:
makeУстановите Nginx:
make installПоследний шаг — создание каталогов для библиотек динамических данных Nginx. Создайте их с помощью этой команды:
mkdir /var/lib/nginx/body mkdir /var/lib/nginx/fastcgiТеперь Nginx настроен с поддержкой Naxsi.
Настройка правил Naxsi
На этом этапе необходимо скопировать основные правила Naxsi в каталог конфигурации Nginx. Скопируйте их из исходного кода Naxsi:
cp /root/naxsi-master/naxsi_config/naxsi_core.rules /etc/nginx/Создайте файл naxsi.rules в каталоге /etc/nginx/:
nano /etc/nginx/naxsi.rulesУкажите действия, которые сервер должен выполнять, если URL-запрос не соответствует основным правилам:
SecRulesEnabled;
DeniedUrl "/RequestDenied";
## Проверка правил Naxsi
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
Это позволит проверить URL-адреса и заблокировать их при необходимости.
Сохраните и закройте файл.
Настройка Nginx для работы с Naxsi
Чтобы Nginx работал с Naxsi, необходимо настроить файл конфигурации Nginx по умолчанию с поддержкой Naxsi. Для этого отредактируйте конфигурационные файлы Nginx и Naxsi.
Откройте файл конфигурации Nginx по умолчанию:
nano /etc/nginx/nginx.conf
Вставьте следующие строки:
user www-data;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
include /etc/nginx/naxsi_core.rules;
include /etc/nginx/conf.d/.conf;
include /etc/nginx/sites-enabled/;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
include /etc/nginx/naxsi.rules;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Сохраните и закройте файл.
Проверьте, нет ли синтаксических ошибок в Nginx, с помощью следующей команды:
nginx -tЕсли ошибок нет, вы должны увидеть следующий вывод:
nginx: синтаксис конфигурационного файла /etc/nginx/nginx.conf в порядке nginx: конфигурационный файл /etc/nginx/nginx.conf прошел успешно
Настройка файла службы systemd для Nginx
Для управления службой Nginx необходимо создать файл службы Nginx для systemd.
nano /lib/systemd/system/nginx.serviceДобавьте следующие строки:
[Unit]
Description=Высокопроизводительный веб-сервер и сервер обратного прокси Documentation=man:nginx(8)
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Сохраните и закройте файл.
Перезагрузите демон systemd:
systemctl daemon-reloadЗатем запустите службу Nginx и включите её автозапуск после перезагрузки системы:
systemctl start nginx systemctl enable nginxВы можете проверить состояние службы Nginx с помощью следующей команды:
systemctl status nginxВы также можете проверить Nginx с загруженными модулями с помощью этой команды:
nginx -V
Тестирование брандмауэра Naxsi
Мы настроили брандмауэр Naxsi. Теперь нам нужно протестировать сервер Nginx на предмет атак и проверить, насколько эффективно Naxsi справляется с ними.
Перейдите на удалённую систему, откройте браузер и введите следующий URL: http://your-server-ip/?a=<. Naxsi должен заблокировать ваш доступ и не позволить вам пройти дальше.
Затем проверьте журнал ошибок Nginx:
tail -f /var/log/nginx/error.logВ журнале вы должны увидеть, что ваш запрос был заблокирован Naxsi:
26.01.2020 15:59:08 [error] 14907#0: 13 NAXSI_FMT: ip=103.250.161.100&server=208.117.84.142&uri=/&vers=0.56&total_processed=11&total_blocked=7&config=block&cscore0=$XSS&score0=8&zone0=ARGS&id0=1302&var_name0=a, клиент: 103.250.161.100, сервер: localhost, запрос: "GET /?a=%3C HTTP/1.1", хост: "208.117.84.142"Вы также можете проверить Naxsi на защиту от XSS-атак. Зайдите на удалённую систему, откройте браузер и введите ссылку: http://your-server-ip/?q="><script>alert(1)</script>. Naxsi должен заблокировать ваш дальнейший доступ.
Проверьте журнал ошибок Nginx с помощью следующей команды:
tail -f /var/log/nginx/error.logВ журнале вы должны увидеть, что ваш запрос был заблокирован Naxsi:
26.01.2020 15:53:26 [error] 14907#0: 7 NAXSI_FMT: ip=103.250.161.100&server=208.117.84.142&uri=/&vers=0.56&total_processed=7&total_blocked=4&config=block&cscore0=$SQL&score0=8&cscore1=$XSS&score1=8&zone0=ARGS&id0=1001&var_name0=q, клиент: 103.250.161.100, сервер: localhost, запрос: "GET /?q=%22%3E%3Cscript%3Ealert(1)%3C/script%3E HTTP/1.1", хост: "208.117.84.142"
Заключительные замечания
Установка и настройка брандмауэра Naxsi в Ubuntu 18.04 может значительно повысить безопасность ваших веб-приложений. Следуя данному руководству, вы получите надёжный WAF на базе Nginx, защищающий от распространённых атак, таких как XSS и SQL-инъекции. Не забудьте настроить правила Naxsi в соответствии с конкретными потребностями вашего приложения и регулярно обновлять как Nginx, так и Naxsi для обеспечения оптимальной безопасности.