Поиск по сайту:

Установите брандмауэр веб-приложений LibModsecurity с Nginx на CentOS 8


На этой странице

  1. Требования
  2. Начало работы
  3. Установите необходимые репозитории и зависимости
  4. Загрузить и скомпилировать LibModsecurity
  5. Загрузите и скомпилируйте Nginx с поддержкой LibModsecurity
  6. Настройка Nginx с помощью ModSecurity
  7. Создание файла службы Systemd для Nginx.
  8. Настройка ModeSecurity
  9. Тест ModSecurity
  10. Заключение

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.