ModSecurity ist eine Open-Source-Web Application Firewall (WAF) für Apache Nginx und IIS-Webserver. Diese Application-Layer-Firewall wurde von Trustwaves SpiderLabs entwickelt und unter der Apache-Lizenz 2.0 veröffentlicht. ModSecurity schützt Websites vor Hackern, indem es eine Reihe von Regeln für reguläre Ausdrücke verwendet, um allgemein bekannte Exploits herauszufiltern, es ermöglicht die Überwachung des HTTP-Verkehrs, Protokollierung, Echtzeitanalyse und Angriffserkennung. Es stehen mehr als 16.000 Regeln zur Verfügung, um Angriffe wie SQL-Injection, Cross-Site-Scripting (XSS), Local File Inclusion, Remote File Inclusion und anwendungsspezifische Regeln für viele Webanwendungen wie Wordpress, Joomla, Drupal usw. zu erkennen.
In diesem Tutorial zeige ich Ihnen, wie Sie mod_security für den schnellen Nginx-Webserver installieren. Ich werde ModSecurity als eigenständiges Modul konfigurieren und dann Nginx aus den Quellen erstellen, um ModSecurity einzubinden.
Voraussetzungen
- Ein Ubuntu 15.04 Server, ich verwende hier die IP 192.168.1.106.
- Root-Berechtigungen
Was wir in diesem Tutorial tun werden:
- Aktualisieren Sie das Ubuntu 15.04-System und -Repository.
- Installieren Sie die erforderlichen Abhängigkeiten, um Nginx und ModSecurity zu erstellen.
- ModSecurity und Nginx herunterladen.
- Installieren Sie ModSecurity und Nginx.
- Nginx konfigurieren.
- ModSecurity konfigurieren.
- Konfigurieren Sie OWASP Core Rule Set (CRS).
- Testen.
Alle folgenden Befehle müssen als root ausgeführt werden. Ausführen:
sudo -i
Root-Benutzer auf Ihrem Server zu werden.
1. System und Repository aktualisieren
Bevor Sie mit der Installation aller Abhängigkeiten beginnen, aktualisieren Sie bitte Ihr System:
apt-get update
apt-get upgrade
2. Installieren Sie die Build-Abhängigkeiten
Installieren Sie alle Pakete, die zum Kompilieren von Nginx und ModSecurity erforderlich sind, mit dem folgenden apt-Befehl:
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Laden Sie ModSecurity und Nginx herunter
Wechseln Sie in das Verzeichnis "/usr/src/" , klonen Sie dann das ModSecurity-Repository von Github:
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Laden Sie Nginx mit dem Befehl wget herunter, ich werde hier die stabile Nginx-Version 1.8 verwenden. Wenn Sie eine andere Version verwenden möchten, gehen Sie bitte zur Nginx-Downloadseite, um eine Liste aller verfügbaren Versionen zu erhalten.
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Installieren Sie ModSecurity und Nginx
Jetzt ist es an der Zeit, ModSecurity zu installieren, gehen Sie bitte in das Verzeichnis /usr/src/modsecurity:
cd /usr/src/modsecurity/
Und kompilieren Sie ModSecurity als eigenständiges Modul auf Ihrem Server, damit wir es in Nginx einbinden können:
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Gehen Sie nun in das nginx-Verzeichnis, kompilieren Sie Nginx und binden Sie das ModSecurity-Modul ein:
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
Der Befehl configure erklärt:
Nginx wird unter dem Benutzer und der Gruppe "www-data" ausgeführt , und wir aktivieren das debug, ipv6 und ssl Module. Und schließlich binden wir das ModSecurity-Modul in Nginx ein.
Installieren Sie jetzt Nginx:
make
make install
Wenn der Befehl make install abgeschlossen ist, können Sie sehen, dass Nginx im Verzeichnis "/usr/local/nginx" installiert ist Verzeichnis:
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 Oct 3 07:21 conf/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 html/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 logs/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 sbin/
5. Konfigurieren Sie Nginx
Bearbeiten Sie die nginx-Konfigurationsdatei mit vi/vim und konfigurieren Sie nginx so, dass es unter dem Benutzer "www-data" ausgeführt wird .
cd /usr/local/nginx/
vi conf/nginx.conf
Kommentieren Sie in der ersten Zeile die Zeile „user“ aus und ändern Sie den Benutzer in www-data:
user www-data;
Speichern und beenden.
Erstellen Sie einen Symlink für die nginx-Binärdatei, damit wir den Befehl "nginx" verwenden können per direkt.
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Als nächstes erstellen wir ein systemd-Skript für Nginx, das zum Starten / Stoppen des Nginx-Daemons verwendet wird. Gehen Sie bitte in das Verzeichnis "/lib/systemd/system/" und erstellen Sie eine neue Datei "nginx.service" mit vi:
cd /lib/systemd/system/
vi nginx.service
Fügen Sie das folgende Skript ein:
[Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload KillStop=/usr/local/nginx/sbin/nginx -s stop KillMode=process Restart=on-failure RestartSec=42s PrivateTmp=true LimitNOFILE=200000 [Install] WantedBy=multi-user.target
Speichern und beenden.
Laden Sie nun den systemd-Daemon neu, damit systemd unsere neue Nginx-Dienstdatei lädt.
systemctl daemon-reload
Testen Sie die nginx-Konfiguration und starten Sie nginx mit dem systemctl-Befehl:
nginx -t
systemctl start nginx
6. Konfigurieren Sie ModSecurity
Kopieren Sie die ModSecurity-Konfigurationsdatei in das nginx-Verzeichnis und nennen Sie sie "modsecurity.conf" :
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Öffnen Sie die Datei modsecurity.conf mit dem vi-Editor:
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Ändern Sie in Zeile 7 "DetectionOnly" auf "ein" .
SecRuleEngine On
Erhöhen Sie in Zeile 38 den Wert von "SecRequestBodyLimit " bis "100000000".
SecRequestBodyLimit 100000000
Ändern Sie in Zeile 192 den Wert von "SecAuditLogType " zu "Gleichzeitig " und kommentieren Sie die Zeile SecAuditLog aus und kommentieren Sie Zeile 196 aus.
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Speichern und beenden.
Erstellen Sie nun ein neues Verzeichnis für das Audit-Log von ModSecurity und ändern Sie den Besitzer in www-data.
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. OWASP Core Rule Set (CRS) konfigurieren
Laden Sie das OWASP Core Rule Set von github herunter.
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Wechseln Sie in das Verzeichnis "owasp-modsecurity-crs " und kopieren Sie das Verzeichnis "base_rules" in das nginx-Verzeichnis.
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Bearbeiten Sie modsecurity.conf und fügen Sie OWASP CRS hinzu.
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Bitte gehen Sie zum Ende der Datei und fügen Sie die folgende Konfiguration hinzu:
#DefaultAction SecDefaultAction "log,deny,phase:1" #If you want to load single rule /usr/loca/nginx/conf #Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf #Load all Rule Include base_rules/*.conf #Disable rule by ID from error message (for my wordpress) SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Speichern und beenden.
Fügen Sie als letzten Schritt die Datei modsecurity.conf zur Nginx-Konfiguration hinzu, indem Sie die Datei „nginx.conf bearbeiten " Datei.
vi conf/nginx.conf
Fügen Sie die modsecurity.conf hinzu:
[.....]
#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;
[.....]
Speichern und beenden.
Starten Sie Nginx neu, um die Konfigurationsänderungen zu übernehmen:
systemctl restart nginx
8. Testen
Ich habe eine WordPress-Website, die auf Nginx und ModSecurity ausgeführt wird. Sie funktioniert einwandfrei. Zum Testen werde ich ein neues Plug-in installieren, das für XSS und SQL Injection anfällig ist.
Hier sind die Ergebnisse:
XSS verboten
https://www.exploit-db.com/exploits/37107/
Browserzugriff:
Serverprotokoll:
SQL-Injection verboten
https://www.exploit-db.com/exploits/37560/
Browserzugriff:
Serverprotokoll:
Nginx und ModSecurity erfolgreich.
Schlussfolgerung
ModSecurity ist eine Open-Source-WAF (Web Application Firewall), die von den SpiderLabs von Trustwave entwickelt wurde, um Ihre Webanwendungen zu sichern. Es stehen mehr als 16.000 Regeln zur Verfügung, um Angriffe wie SQL Injection, XSS, LFI, RFI usw. zu erkennen. ModSecurity ist einfach zu installieren und als Modul für Apache, Nginx und IIS für Windows verfügbar.
Referenz
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual