Установите брандмауэр веб-приложений LibModsecurity с Nginx на CentOS 8
На этой странице
- Требования
- Начало работы
- Установите необходимые репозитории и зависимости
- Загрузить и скомпилировать LibModsecurity
- Загрузите и скомпилируйте Nginx с поддержкой LibModsecurity
- Настройка Nginx с помощью ModSecurity
- Создание файла службы Systemd для Nginx.
- Настройка ModeSecurity
- Тест ModSecurity
- Заключение
LibModSecurity — это бесплатный брандмауэр веб-приложений с открытым исходным кодом, который можно использовать для защиты сервера Nginx от различных видов кибератак. Он поставляется с основным набором правил, включая SQL-инъекции, межсайтовые сценарии, трояны и многое другое. Он работает, отслеживая HTTP-трафик в режиме реального времени и борясь с уязвимостями, используя основной набор правил OWASP ModSecurity. Он может использоваться с Apache, Nginx и IIS, а также совместим с Debian, Ubuntu и CentOS.
В этом руководстве мы покажем вам, как загрузить и скомпилировать LibModSecurity с поддержкой Nginx в CentOS 8.
Требования
- Сервер под управлением CentOS 8.
- На сервере настроен пароль root.
Начиная
Перед запуском обновите сервер до последней версии, используя следующую команду:
dnf update
Как только ваш сервер будет обновлен, перезапустите его, чтобы изменения вступили в силу.
Установите необходимые репозитории и зависимости
Сначала установите репозиторий EPEL и REMI в вашей системе. Вы можете установить их с помощью следующей команды:
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Затем установите все необходимые зависимости с помощью следующей команды:
dnf install gcc-c++ flex bison yajl curl-devel zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config wget openssl openssl-devel nano
После установки всех пакетов вы можете установить другие зависимости, используя репозиторий PowerTool:
dnf --enablerepo=PowerTools install doxygen yajl-devel
Затем установите GeoIP, используя репозиторий REMI, выполнив следующую команду:
dnf --enablerepo=remi install GeoIP-devel
После установки всех пакетов можно переходить к следующему шагу.
Скачайте и скомпилируйте LibModsecurity
Во-первых, вам нужно будет загрузить исходный код LibModsecurity и скомпилировать его в своей системе. Для этого измените каталог на /opt и загрузите последнюю версию LibModsecurity из репозитория Git:
cd /opt/
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Затем измените каталог на ModSecurity и загрузите код libInjection с помощью следующей команды:
cd ModSecurity
git submodule init
git submodule update
Затем настройте безопасность LibMod с помощью следующей команды:
./build.sh
./configure
Наконец, скомпилируйте и установите LibModSecurity с помощью следующей команды:
make
make install
На данный момент в вашей системе установлен LibModsecurity. Теперь вы можете приступить к установке Nginx с поддержкой LibModsecurity.
Загрузите и скомпилируйте Nginx с поддержкой LibModsecurity
Во-первых, вам нужно будет создать системного пользователя и группу для Nginx. Вы можете создать его с помощью следующей команды:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Далее вам нужно будет скачать Nginx и скомпилировать его с поддержкой LibModsecurity.
Для этого сначала загрузите коннектор ModSecurity-nginx из репозитория Git с помощью следующей команды:
cd /opt
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Затем загрузите последнюю стабильную версию Nginx с помощью следующей команды:
wget http://nginx.org/download/nginx-1.17.6.tar.gz
После загрузки извлеките загруженный файл с помощью следующей команды:
tar -xvzf nginx-1.17.6.tar.gz
Затем измените каталог Nginx и настройте его с помощью следующей команды:
cd nginx-1.17.6
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/opt/ModSecurity-nginx
Затем установите Nginx с помощью следующей команды:
make
make install
На данный момент Nginx был установлен с поддержкой LibModsecurity. Теперь вы можете приступить к настройке Nginx.
Настройте Nginx с помощью ModSecurity
Во-первых, вам нужно будет скопировать пример файла конфигурации ModSecurity из исходного каталога Nginx в каталог конфигурации Nginx.
Вы можете скопировать их с помощью следующей команды:
cp /opt/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /opt/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Затем создайте символическую ссылку двоичного файла Nginx на путь /usr/sbin/ с помощью следующей команды:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Затем создайте каталог журнала Nginx с помощью следующей команды:
mkdir /var/log/nginx
Затем откройте файл конфигурации Nginx с помощью следующей команды:
nano /usr/local/nginx/conf/nginx.conf
Внесите следующие изменения:
user nginx; worker_processes 1; pid /run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name your-server-ip; modsecurity on; modsecurity_rules_file /usr/local/nginx/conf/modsecurity.conf; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
Сохраните и закройте файл, когда закончите. Затем проверьте Nginx на наличие синтаксической ошибки с помощью следующей команды:
nginx -t
Вы должны увидеть следующий вывод:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
На данный момент Nginx настроен. Вы можете приступить к созданию служебного файла systemd для Nginx.
Создайте файл службы Systemd для Nginx
Далее вам нужно будет создать файл systemd для управления службой Nginx. Вы можете создать его с помощью следующей команды:
nano /etc/systemd/system/nginx.service
Добавьте следующие строки:
[Unit] Description=The nginx server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=mixed PrivateTmp=true [Install] WantedBy=multi-user.target
Сохраните и закройте файл, когда закончите. Затем перезагрузите демон systemd с помощью следующей команды:
systemctl daemon-reload
Затем запустите службу Nginx и включите ее запуск после перезагрузки системы с помощью следующей команды:
systemctl start nginx
systemctl enable --now nginx
Вы должны увидеть следующий вывод:
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /etc/systemd/system/nginx.service.
Затем проверьте службу Nginx с помощью следующей команды:
systemctl status nginx
Вы должны увидеть следующий вывод:
? nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-12-30 10:20:01 EST; 41s ago Process: 17730 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 17728 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 17727 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 17732 (nginx) Tasks: 2 (limit: 6102) Memory: 5.0M CGroup: /system.slice/nginx.service ??17732 nginx: master process /usr/sbin/nginx ??17733 nginx: worker process Dec 30 10:20:00 nginx systemd[1]: Starting The nginx HTTP and reverse proxy server... Dec 30 10:20:00 nginx nginx[17728]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok Dec 30 10:20:00 nginx nginx[17728]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful Dec 30 10:20:01 nginx systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Dec 30 10:20:01 nginx systemd[1]: Started The nginx HTTP and reverse proxy server.
На данный момент Nginx запущен и работает. Теперь вы можете приступить к настройке ModSecurity.
Настроить ModeSecurity
По умолчанию ModSecurity настроен на режим только обнаружения. Поэтому вам нужно будет включить механизм правил ModSecurity. Вы можете сделать это, отредактировав файл modsecurity.conf:
nano /usr/local/nginx/conf/modsecurity.conf
Найдите следующую строку:
SecRuleEngine DetectionOnly
И замените его следующей строкой:
SecRuleEngine On
Также найдите следующую строку:
/var/log/modsec_audit.log
И замените его следующей строкой:
/var/log/nginx/modsec_audit.log
Сохраните и закройте файл, когда закончите.
Затем загрузите последнюю версию основного набора правил ModSecurity из репозитория Git, используя следующую команду:
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
После загрузки переименуйте пример файла конфигурации CRS с помощью следующей команды:
mv /usr/local/nginx/conf/owasp-crs/crs-setup.conf.example /usr/local/nginx/conf/owasp-crs/crs-setup.conf
Затем настройте ModeSecurity для использования этих правил, отредактировав файл /usr/local/nginx/conf/modsecurity.conf:
nano /usr/local/nginx/conf/modsecurity.conf
Добавьте в конец файла следующие строки:
Include owasp-crs/crs-setup.conf Include owasp-crs/rules/*.conf
Сохраните и закройте файл, когда закончите. Затем перезапустите службу Nginx, чтобы изменения вступили в силу:
systemctl restart nginx
Тестовый модБезопасность
Теперь ModSecurity установлен и настроен. Пришло время проверить, работает он или нет.
Чтобы протестировать ModSecurity против внедрения команд, откройте веб-браузер и введите URL-адрес http://localhost/index.html?exec=/bin/bash. Вы должны увидеть ошибку 403 Forbidden на следующей странице:
Чтобы протестировать ModSecurity против атаки CSS, откройте терминал и выполните следующую команду:
curl http://localhost/?q="><script>alert(1)</script>"
Вы должны получить следующий результат:
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.17.6</center> </body> </html>
Заключение
Поздравляем! вы успешно загрузили и скомпилировали LibModSecurity с помощью Nginx. Теперь ваш сервер защищен от различных атак. Для получения дополнительной информации вы можете посетить документацию ModSecurity в ModSecurity Doc.