ModSecurity — это брандмауэр веб-приложений (WAF) с открытым исходным кодом, предназначенный для защиты веб-приложений от вредоносных атак. Он предназначен для защиты веб-приложений от атак 7-го уровня (уровня приложений), таких как SQL-инъекции, межсайтовый скриптинг (XSS) и многих других типов атак. В этом руководстве мы покажем вам, как установить ModSecurity в Nginx на системах Ubuntu и Debian.
Предварительные условия
Прежде чем приступить к работе, вам понадобится следующее:
- Ubuntu 16.04/18.04/20.04 или Debian 9/10
- Nginx 1.10 или выше
- Root-пользователь или права sudo
Шаг 1: Установите Nginx
Если на вашем сервере еще не установлен веб-сервер Nginx, установите Nginx с помощью следующей команды. Если Nginx уже установлен, этот шаг можно проигнорировать.
$ sudo apt install nginx
Шаг 2: Скачайте и скомпилируйте ModSecurity
Установите зависимости сборки с помощью следующей команды
$ apt-get install libtool autoconf build-essential libpcre3-dev zlib1g-dev libssl-dev libxml2-dev libgeoip-dev liblmdb-dev libyajl-dev libcurl4-openssl-dev libpcre++-dev pkgconf libxslt1-dev libgd-dev automake
Теперь вам нужно скачать ModSecurity
$ cd /usr/local/src
$ git clone --depth 100 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
$ cd ModSecurity
$ git submodule init
$ git submodule update
Теперь скомпилируйте ModSecurity и установите его на свой сервер
# Generate configure file
$ sh build.sh
# Pre compilation step. Checks for dependencies
./configure
# Compiles the source code
$ make
# Installs the Libmodsecurity to **/usr/local/modsecurity/lib/libmodsecurity.so**
$ make install
Шаг 3: Скачайте и скомпилируйте исходный код ModSecurity v3 Nginx Connector
Запустите команду «nginx -V» и узнайте версию вашего сервера Nginx. Теперь вам нужно загрузить подходящий исходный код Nginx и исходный код коннектора Nginx на ваш сервер. Используйте исходный код для создания модуля Libmodsecurity для вашего сервера Nginx. Обратитесь к следующим командам и выполните их по порядку.
$ mkdir /usr/local/src/cpg
$ cd /usr/local/src/cpg
Убедитесь, что номер versoin совпадает с версией вашего локального сервера Nginx
$ wget http://nginx.org/download/nginx-1.21.4.tar.gz
$ tar -xvzf nginx-1.21.4.tar.gz
# Download the source code for ModSecurity-nginx connector
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx
Скомпилируйте Nginx
Далее нам нужно скомпилировать Nginx с модулем ModSecurity. Мы не будем компилировать/устанавливать сам Nginx, а скомпилируем только модуль Nginx. Для этого убедитесь, что ваш пакет Nginx скомпилирован с флагом «-with-compat». Флаг -with-compat сделает модуль бинарно совместимым с существующим бинарным пакетом Nginx. Вы можете использовать следующую команду для компиляции Nginx + ModSecurity, совместимого с существующими модулями
$ cd nginx-1.21.4
$ ./configure --with-compat --with-openssl=/usr/include/openssl/ --add-dynamic-module=/usr/local/src/cpg/ModSecurity-nginx
Теперь нам нужно собрать модули и скопировать их в каталог модулей Nginx
$ make modules
$ cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/
Шаг 4: Загрузка модуля ModSecurity в Nginx
Открыть файл /etc/nginx/modules-enabled/50-mod-http-modsecurity.conf
и добавьте в него следующее содержимое.
load_module modules/ngx_http_modsecurity_module.so;
Шаг 5: Установите конфигурацию Nginx
1. Откройте . /etc/nginx/nginx.conf
и добавьте следующую строку после включения «/etc/nginx/sites-enabled/*.conf
»
include /etc/nginx/cpguard_waf_load.conf;
2. Добавьте следующее содержимое в файл /etc/nginx/cpguard_waf_load.conf
modsecurity on;
modsecurity_rules_file /etc/nginx/nginx-modsecurity.conf;
3. Добавьте следующее содержимое в файл /etc/nginx/nginx-modsecurity.conf
SecRuleEngine On
SecRequestBodyAccess On
SecDefaultAction "phase:2,deny,log,status:406"
SecRequestBodyLimitAction ProcessPartial
SecResponseBodyLimitAction ProcessPartial
SecRequestBodyLimit 13107200
SecRequestBodyNoFilesLimit 131072
SecPcreMatchLimit 250000
SecPcreMatchLimitRecursion 250000
SecCollectionTimeout 600
SecDebugLog /var/log/nginx/modsec_debug.log
SecDebugLogLevel 0
SecAuditEngine RelevantOnly
SecAuditLog /var/log/nginx/modsec_audit.log
SecUploadDir /tmp
SecTmpDir /tmp
SecDataDir /tmp
SecTmpSaveUploadedFiles on
# Include file for cPGuard WAF
Include /etc/nginx/cpguard_waf.conf
Шаг 6: Настройка параметров cPGuard WAF
После успешного выполнения описанных выше шагов вы можете использовать следующие значения параметров.
waf_server = nginx
waf_server_conf = /etc/nginx/cpguard_waf.conf
waf_server_restart_cmd = /usr/sbin/service nginx restart
waf_audit_log = /var/log/nginx/modsec_audit.log
Вот и все
У вас должен быть включен ModSecurity, а после включения cPGuard WAF ваш сервер будет защищен от веб-атак.