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