ModSecurity je populární, bezplatný firewall webových aplikací s otevřeným zdrojovým kódem, který se používá k ochraně webových aplikací před několika typy útoků včetně SQL injection, cross-site scripting a začlenění místních souborů. Často se používá k ochraně webových stránek, cPanelu a dalších ovládacích panelů hostingu. Zatímco ModSecurity byl primárně navržen pro webový server Apache, může také pracovat s webovým serverem Nginx.
V tomto příspěvku vám ukážeme, jak nainstalovat ModSecurity s Nginx na Rocky Linux 8.
Předpoklady
- Server se systémem Rocky Linux 8 na cloudové platformě Atlantic.Net
- Heslo uživatele root nakonfigurované na vašem serveru
Krok 1 – Vytvořte cloudový server Atlantic.Net
Nejprve se přihlaste ke svému cloudovému serveru Atlantic.Net. Vytvořte nový server a jako operační systém vyberte Rocky Linux 8 s alespoň 2 GB RAM. Připojte se ke svému cloudovému serveru přes SSH a přihlaste se pomocí přihlašovacích údajů zvýrazněných v horní části stránky.
Jakmile se přihlásíte na svůj server, spusťte následující příkaz a aktualizujte svůj základní systém nejnovějšími dostupnými balíčky.
dnf update -y
Krok 2 – Instalace požadovaných závislostí
Nejprve budete muset nainstalovat všechny požadované závislosti na vašem serveru. Všechny je můžete nainstalovat pomocí následujícího příkazu:
dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y
Dále nainstalujte úložiště EPEL a Remi pomocí následujícího příkazu:
dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
Dále nainstalujte GeoIP pomocí následujícího příkazu:
dnf --enablerepo=remi install GeoIP-devel -y
Krok 3 – Instalace ModSecurity
Nejprve si stáhněte nejnovější verzi ModSecurity pomocí následujícího příkazu:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
Dále změňte adresář na ModSecurity a nainstalujte ostatní moduly pomocí následujícího příkazu:
cd ModSecurity git submodule init git submodule update
Dále zkompilujte a nainstalujte ModSecurity pomocí následujícího příkazu:
./build.sh ./configure make make install
Krok 4 – Nainstalujte Nginx s podporou LibModsecurity
Chcete-li povolit podporu LibModsecurity v Nginx, budete muset zkompilovat Nginx s podporou LibModsecurity.
Nejprve si stáhněte konektor ModSecurity-nginx pomocí následujícího příkazu:
cd ../ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
Dále si stáhněte nejnovější stabilní verzi Nginx pomocí následujícího příkazu:
wget http://nginx.org/download/nginx-1.19.10.tar.gz
Dále rozbalte stažený soubor pomocí následujícího příkazu:
tar xzf nginx-1.19.10.tar.gz
Dále vytvořte uživatele pro Nginx pomocí následujícího příkazu:
useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx
Dále změňte adresář na zdroj Nginx a zkompilujte jej pomocí následujícího příkazu:
cd nginx-1.19.10 ./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/root/ModSecurity-nginx
Dále jej nainstalujte pomocí následujícího příkazu:
make make install
Dále zkopírujte ukázkový konfigurační soubor ModSecurity a mapovací soubor Unicode pomocí následujícího příkazu:
cp /root/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf cp /root/ModSecurity/unicode.mapping /usr/local/nginx/conf/
Dále zálohujte konfigurační soubor Nginx:
cp /usr/local/nginx/conf/nginx.conf{,.bak}
Dále upravte konfigurační soubor Nginx pomocí následujícího příkazu:
nano /usr/local/nginx/conf/nginx.conf
Odeberte všechny řádky a přidejte následující řádky:
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_kifarunix-demo.log; error_log /var/log/nginx/error_kifarunix-demo.log; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
Uložte a zavřete soubor a poté vytvořte adresář protokolu Nginx:
mkdir /var/log/nginx
Krok 5 – Vytvořte soubor služby Systemd pro Nginx
Dále budete muset vytvořit soubor služby systemd pro správu služby Nginx. Můžete jej vytvořit pomocí následujícího příkazu:
nano /etc/systemd/system/nginx.service
Přidejte následující řádky:
[Unit] Description=The nginx HTTP and reverse proxy 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
Uložte a zavřete soubor a poté vytvořte symbolický odkaz na binární Nginx pomocí následujícího příkazu:
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
Dále znovu načtěte démona systemd, aby se změny aplikovaly:
systemctl daemon-reload
Dále spusťte službu Nginx a povolte její spuštění při restartu systému:
systemctl enable --now nginx
Stav Nginx můžete zkontrolovat pomocí následujícího příkazu:
systemctl status nginx
Získáte následující výstup:
● 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 2021-11-08 09:59:48 UTC; 5s ago Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 73048 (nginx) Tasks: 2 (limit: 11411) Memory: 3.2M CGroup: /system.slice/nginx.service ├─73048 nginx: master process /usr/sbin/nginx └─73049 nginx: worker process Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server... Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.
Krok 6 – Povolte pravidlo ModSecurity Rule
Můžete jej povolit pomocí následujícího příkazu:
sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf
Povolte také protokol auditu pomocí následujícího příkazu:
sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf
Krok 7 – Nainstalujte sadu základních pravidel OWASP ModSecurity
OWASP poskytuje obecná pravidla detekce útoků pro ModSecurity. Můžete si jej stáhnout pomocí následujícího příkazu:
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs
Dále přejmenujte konfigurační soubor pravidla OWASP pomocí následujícího příkazu:
cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}
Dále definujte pravidlo OWASP v konfiguračním souboru ModSecurity:
echo -e "Include owasp-crs/crs-setup.conf\nInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf
Poté restartujte službu Nginx, aby se změny projevily:
systemctl restart nginx
Krok 8 – Ověřte ModSecurity
V tomto okamžiku je Nginx nainstalován a nakonfigurován s podporou ModSecurity. Nyní je čas to otestovat.
Spusťte následující příkazovou injekci pomocí příkazu curl:
curl localhost/index.html?exec=/bin/bash
Pokud je vše v pořádku, měla by se zobrazit chyba „403 Zakázáno“, jak je uvedeno níže:
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.19.10</center> </body> </html>
Můžete také ověřit protokol ModSecurity pro více informací:
tail -100 /var/log/nginx/modsec_audit.log
Měli byste vidět následující výstup:
---imefFQJy---D-- ---imefFQJy---E-- <html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a ---imefFQJy---F-- HTTP/1.1 403 Server: nginx/1.19.10 Date: Mon, 08 Nov 2021 10:00:55 GMT Content-Length: 154 Content-Type: text/html Connection: keep-alive ---imefFQJy---H-- ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [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/bash found within ARGS:exec: /bin/bash"] [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 "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t: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 "/index.html"] [unique_id "1636365655"] [ref ""]
Závěr
Ve výše uvedené příručce jsme vysvětlili, jak nainstalovat ModSecurity s Nginx na Rocky Linux 8. Váš webový server Nginx je nyní zabezpečen pomocí ModSecurity WAF. ModSecurity může chránit váš server před širokou škálou útoků. Začněte s hostingem VPS od Atlantic.Net ještě dnes!