ModSecurity – это широко используемый и уважаемый брандмауэр веб-приложений (waf) для веб-серверов с открытым исходным кодом.
Его можно использовать как с Apache, так и с NGINX, чтобы обеспечить защиту от ряда HTTP-атак (таких как SQL-инъекции и межсайтовый скриптинг XSS) на веб-приложения, таких как WordPress и Nextcloud и прочих.
Другими словами, этот модуль следует считать обязательным!
ModSecurity не может быть включен в NGINX, установленным с помощью apt-get, поэтому вы должны собрать его вручную.
Далее я покажу процесс добавления этой функции безопасности на ваши веб-серверы NGINX.
- Работающий сервер Ubuntu
- Пользователь с привилегиями sudo
Как установить необходимые зависимости
Первое, что нужно сделать, это установить необходимые зависимости.
Это можно сделать с помощью одной команды:
sudo apt-get install -y git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-dev libxml2-dev libcurl4-openssl-dev automake pkgconf zlib1g-dev -y
Если у вас уже установлен NGINX (из стандартных репозиториев), удалите его командой:
sudo apt-get purge nginx -y
Удалите все оставшиеся зависимости с помощью команды:
sudo apt-get autoremove -y
Далее мы можем перейти к ModSecurity.
Как собрать ModSecurity
Мы должны скомпилировать ModSecurity вручную.
Сначала перейдите в каталог src с помощью команды:
cd /usr/src
Затем клонируйте последнюю версию ModSecurity с помощью команды:
git clone -b nginx_refactoring https://github.com/SpiderLabs/ModSecurity.git
Перейдите во вновь созданный каталог с помощью команды:
cd ModSecurity
Настройте ModSecurity с помощью скрипта автогенерации следующим образом:
./autogen.sh./configure --enable-standalone-module --disable-mlogc
Установите ModSecurity с помощью команд:
make
sudo make install
Как собрать NGINX
К сожалению, мы не можем использовать установку NGINX из стандартных репозиториев, потому что она должна быть скомпилирована с поддержкой waf.
Вернитесь в каталог src с помощью команды:
Скачайте последнюю версию NGINX; в настоящее время это 1.18.0
http://nginx.org/en/download.html
но убедитесь, что вы выбрали последнюю версию и измените команду соответствующим образом!
Команда для загрузки исходного кода:
wget http://nginx.org/download/nginx-1.18.0.tar.gz
Распакуйте сжатый файл с помощью команды:
tar xvzf nginx-1.18.0.tar.gz
Перейдите во вновь созданный каталог с помощью команды:
cd nginx-1.18.0
Настройте NGINX с поддержкой ModSecurity с помощью команды:
./configure --user=www-data --group=www-data --add-module=/usr/src/ModSecurity/nginx/modsecurity --with-http_ssl_module
Наконец, установите NGINX с помощью команд:
make
sudo make install
Как настроить NGINX
Теперь нам нужно изменить файл конфигурации NGINX по умолчанию, чтобы он знал, под каким пользователем запускаться, с помощью команды:
sed -i "s/#user nobody;/user www-data www-data;/" /usr/local/nginx/conf/nginx.conf
Затем нам нужно настроить NGINX, чтобы он знал, что нужно использовать ModSecurity.
Откройте файл конфигурации NGINX с помощью команды:
sudo nano /usr/local/nginx/conf/nginx.conf
В этом файле замените следующий раздел:
location / {
root html;
index index.html index.htm;
}
На
location / {
ModSecurityEnabled on;
ModSecurityConfig modsec_includes.conf;
root html;
index index.html index.htm;
}
Включите основные правила OWASP, создав файл правил с помощью команды:
sudo nano /usr/local/nginx/conf/modsec_includes.conf
В этот файл вставьте следующее:
include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/*.conf
Сохраните и закройте файл.
Импортируйте необходимые файлы конфигурации ModSecurity с помощью следующих двух команд:
sudo cp /usr/src/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
sudo cp /usr/src/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Включите опцию SecRuleEngine в файле modsecurity.conf, введя следующую команду:
sudo sed -i "s/SecRuleEngine DetectionOnly/SecRuleEngine On/" /usr/local/nginx/conf/modsecurity.conf
Теперь мы можем добавить основной набор правил OWASP ModSecurity, выполнив следующие семь команд:
cd /usr/local/nginx/conf
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
sudo cd owasp-modsecurity-crs
sudo mv crs-setup.conf.example crs-setup.conf
sudo cd rules
sudo mv REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
sudo mv RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
Как создать файл запуска systemd для NGINX
Чтобы мы могли управлять NGINX, мы должны создать файл запуска systemd. Создайте файл с помощью команды:
sudo nano /lib/systemd/system/nginx.service
В файл вставьте следующее:
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
KillStop=/usr/local/nginx/sbin/nginx -s stop
KillMode=process
Restart=on-failure
RestartSec=42s
PrivateTmp=true
LimitNOFILE=200000
[Install]
WantedBy=multi-user.target
Сохраните и закройте файл.
Запустите NGINX командой:
sudo systemctl start nginx
Включите запуск веб-сервера при загрузке с помощью команды:
sudo systemctl enable nginx
Как протестировать ModSecurity
Наконец-то мы можем протестировать нашу настройку ModSecurity.
Для этого мы будем использовать tail для отслеживания журнала ошибок NGINX с помощью команды:
sudo tail -f /usr/local/nginx/logs/error.log
После этого откройте веб-браузер и вбейте: http://SERVER/?param=”>
Где SERVER – это IP-адрес или домен вашего сервера NGINX.
Вернувшись в команду tail, вы должны увидеть несколько ошибок Permission Denied Errors !
Поздравляем, теперь у вас есть ModSecurity, работающий с последней версией NGINX на Ubuntu!