Как установить ModSecurity 3 с Nginx на Ubuntu 22.04
Это руководство существует для этих версий ОС
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 15.04 (Vivid Vervet)
На этой странице
- Предпосылки
- Начало работы
- Установите ModSecurity в Ubuntu 22.04.
- Установите Nginx с поддержкой ModSecurity 3
- Настройка Nginx с помощью ModSecurity
- Установить основной набор правил ModSecurity
- Создание служебного файла Systemd для Nginx
- Подтвердить ModSecurity
- Заключение
Безопасность веб-сайтов и веб-приложений может быть сложной задачей для любого системного администратора. Существует множество инструментов с открытым исходным кодом для защиты вашего сайта от 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-атак. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.