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

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


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 15.04 (Vivid Vervet)

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

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

Безопасность веб-сайтов и веб-приложений может быть сложной задачей для любого системного администратора. Существует множество инструментов с открытым исходным кодом для защиты вашего сайта от 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, минимум ложных срабатываний.

Сначала загрузите набор правил 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».

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.20.2</center>
</body>
</html>

Вы также можете проверить журнал 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-атак. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.