Как установить ModSecurity 3 с Nginx на Ubuntu 22.04

Безопасность веб-сайтов и веб-приложений может быть сложной задачей для любого системного администратора. Существует множество инструментов с открытым исходным кодом, которые позволяют защитить ваш веб-сайт от DDoS-атак. ModSecurity — это бесплатный брандмауэр веб-приложений (WAF) с открытым исходным кодом, который защищает ваш веб-сайт от нескольких типов атак, включая межсайтовый скриптинг (XSS), SQL-инъекции, перехват сеансов и многое другое.

В этом руководстве я покажу вам, как установить ModSecurity с Nginx в Ubuntu 22.04.

Необходимые условия

  • Сервер под управлением Ubuntu 22.04.
  • На сервере настроен пароль root.

Начало работы

Сначала рекомендуется обновить все пакеты программного обеспечения до последней версии. Вы можете обновить их все, выполнив следующую команду:

apt update -y
apt upgrade -y

После обновления всех пакетов установите другие необходимые пакеты с помощью следующей команды:

apt install g++ flex bison curl apache2-dev doxygen libyajl-dev ssdeep liblua5.2-dev libgeoip-dev libtool dh-autoreconf libcurl4-gnutls-dev libxml2 libpcre++-dev libxml2-dev git liblmdb-dev libpkgconf3 lmdb-doc pkgconf zlib1g-dev libssl-dev -y

После этого можно переходить к следующему шагу.

Установка ModSecurity в Ubuntu 22.04

По умолчанию пакет ModSecurity не входит в стандартный репозиторий Ubuntu. Поэтому вам нужно будет скомпилировать его из исходного кода.

Сначала загрузите последнюю версию ModSecurity с помощью следующей команды:

wget https://github.com/SpiderLabs/ModSecurity/releases/download/v3.0.8/modsecurity-v3.0.8.tar.gz

После завершения загрузки извлеките загруженный файл с помощью следующей команды:

tar -xvzf modsecurity-v3.0.8.tar.gz

Затем перейдите в извлеченный каталог и настройте его с помощью следующей команды:

cd modsecurity-v3.0.8
./build.sh
./configure

Затем установите его с помощью следующей команды:

make
make install

Установите Nginx с поддержкой ModSecurity 3

Затем вам нужно будет установить Nginx с поддержкой ModSecurity. Сначала загрузите коннектор ModSecurity-nginx с помощью следующей команды:

cd ~
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Затем загрузите исходный код Nginx с помощью следующей команды:

wget https://nginx.org/download/nginx-1.20.2.tar.gz

Затем извлеките исходный код Nginx с помощью следующей команды:

tar xzf nginx-1.20.2.tar.gz

Затем создайте пользователя для Nginx с помощью следующей команды:

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

Затем перейдите в каталог с исходным кодом Nginx и настройте его с помощью следующей команды:

cd nginx-1.20.2
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

Затем установите его с помощью следующей команды:

make
make modules
make install

Затем создайте символическую ссылку Nginx с помощью следующей команды:

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

Затем проверьте версию Nginx с помощью следующей команды:

nginx -V

Вы получите версию Nginx в следующем выводе:

nginx version: nginx/1.20.2
built by gcc 11.2.0 (Ubuntu 11.2.0-19ubuntu1) 
built with OpenSSL 3.0.2 15 Mar 2022
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --with-pcre-jit --with-debug --with-compat --with-http_ssl_module --with-http_realip_module --add-dynamic-module=/root/ModSecurity-nginx --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log

После этого можно приступить к настройке Nginx с ModSecurity.

Настройте Nginx с ModSecurity

Затем скопируйте примеры файлов конфигурации с помощью следующей команды:

cp ~/modsecurity-v3.0.8/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp ~/modsecurity-v3.0.8/unicode.mapping /usr/local/nginx/conf/

Затем создайте резервную копию файла конфигурации Nginx:

cp /usr/local/nginx/conf/nginx.conf{,.bak}

Затем отредактируйте файл конфигурации Nginx:

nano /usr/local/nginx/conf/nginx.conf

Удалите строки по умолчанию и добавьте следующие строки:

load_module modules/ngx_http_modsecurity_module.so;
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  nginx.example.com;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access_example.log;
        error_log  /var/log/nginx/error_example.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Сохраните и закройте файл, затем включите ModSecurity с помощью следующей команды:

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf

После этого можно перейти к следующему шагу.

Установите набор основных правил ModSecurity

Набор основных правил OWASP ModSecurity предоставляет набор правил для обнаружения и защиты от широкого спектра атак, включая OWASP Top Ten, с минимальным количеством ложных срабатываний.

Сначала загрузите набор правил OWASP с помощью следующей команды:

cd
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Затем переименуйте файл crs-setup.conf.example в crs-setup.conf:

cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

Затем определите правила с помощью следующей команды:

echo -e "Include owasp-crs/crs-setup.conf
Include owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf

Затем проверьте 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

После этого можете перейти к следующему шагу.

Создайте файл службы Systemd для Nginx

Далее вам нужно будет создать файл службы systemd для управления службой Nginx. Это позволит вам запускать и останавливать службу Nginx через системы. Вы можете создать его с помощью следующей команды:

nano /etc/systemd/system/nginx.service

Добавьте следующие строки:

[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/local/nginx/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Сохраните и закройте файл, затем перезагрузите демон systemd, чтобы применить изменения:

systemctl daemon-reload

Затем запустите и включите Nginx с помощью следующей команды:

systemctl start nginx
systemctl enable nginx

Вы можете проверить статус Nginx с помощью следующей команды:

systemctl status nginx

Вы должны увидеть следующий вывод:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/etc/systemd/system/nginx.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-11 15:40:39 UTC; 6s ago
       Docs: man:nginx(8)
    Process: 68438 ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 68439 ExecStart=/usr/local/nginx/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 68440 (nginx)
      Tasks: 2 (limit: 4579)
     Memory: 20.0M
        CPU: 293ms
     CGroup: /system.slice/nginx.service
             ??68440 "nginx: master process /usr/local/nginx/sbin/nginx -g daemon on; master_process on;"
             ??68441 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >

Oct 11 15:40:38 ubuntu2204 systemd[1]: Starting A high performance web server and a reverse proxy server...
Oct 11 15:40:39 ubuntu2204 systemd[1]: Started A high performance web server and a reverse proxy server.

После завершения вы можете перейти к следующему шагу.

Проверьте ModSecurity

После установки и настройки Modsecurity с Nginx. Пришло время протестировать его. Запустите следующую команду, чтобы протестировать Modsecurity на вставку команд:

curl localhost?doc=/bin/ls

Если все в порядке, вы получите сообщение «403 Forbidden».



nginx/1.20.2


Вы также можете проверить журнал Modesecurity с помощью следующей команды:

tail /var/log/modsec_audit.log

Вы должны увидеть журнал ModSecurity в следующем выводе:

ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:doc' (Value: `/bin/ls' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/ls found within ARGS:doc: /bin/ls"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.0.1"] [uri "/"] [unique_id "166550286018.572845"] [ref "o1,6v10,7t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/"] [unique_id "166550286018.572845"] [ref ""]

---IcTYGSZl---I--

---IcTYGSZl---J--

---IcTYGSZl---Z--

Заключение

Поздравляем! Вы успешно установили ModSecurity с Nginx на Ubuntu 22.04. Теперь вы можете внедрить ModSecurity в свою производственную среду для защиты от DDoS-атак.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *