GNU/Linux >> Znalost Linux >  >> Linux

Jak nainstalovat ModSecurity s Nginx na Rocky Linux 8

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!


Linux
  1. Jak nainstalovat Varnish 7 pro Nginx na Rocky Linux 8

  2. Jak nainstalovat Gulp.js na Rocky Linux 8

  3. Jak nainstalovat Fail2ban s Firewalld na Rocky Linux 8

  1. Jak nainstalovat Apache Tomcat 10 s Nginx na Rocky Linux 8

  2. Jak nainstalovat Joomla s Nginx na Rocky Linux

  3. Jak nainstalovat Rust Programming Language na Rocky Linux 8

  1. Jak nainstalovat Nginx s ModSecurity na Ubuntu 15.04

  2. Jak nainstalovat phpMyAdmin s Nginx na Linux Mint 19 / Linux Mint 18

  3. Jak nainstalovat Bludit CMS s NGINX na Ubuntu 20.04