ModSecurity 2 ist eine unverzichtbare Web Application Firewall (WAF) zur Sicherung von Apache-HTTP-Servern und bietet Echtzeitüberwachung und regelbasierte Filterung. Auf einem Debian 12- oder 11-Linux-Server installiert, hilft ModSecurity dabei, SQL-Injections, Cross-Site-Scripting (XSS) und andere Angriffe zu verhindern. Das Digitalwave ModSecurity Repository vereinfacht die Installation und stellt sicher, dass Sie die neueste stabile Version verwenden.
Zur Verbesserung der Sicherheit bietet das OWASP Core Rule Set (CRS) vorkonfigurierte Regeln, die auf häufige Schwachstellen abzielen. Durch die Einrichtung können Administratoren die Abwehr mit minimaler manueller Konfiguration stärken. Diese Anleitung zeigt Ihnen, wie Sie ModSecurity 2 unter Debian mithilfe des Digitalwave-Repository installieren und OWASP CRS für optimalen Schutz konfigurieren.
Aktualisieren Sie Debian-Systempakete für die Installation von ModSecurity 2
Unser erster Schritt besteht darin, sicherzustellen, dass unser Debian-System aktualisiert ist. Dadurch bleiben alle vorhandenen Pakete auf dem neuesten Stand, optimale Leistung wird gewährleistet und Sicherheitsrisiken werden minimiert. Führen Sie dazu den folgenden Befehl aus:
sudo apt update && sudo apt upgrade
Überprüfen Sie nach der Aktualisierung Ihres Systems, ob Apache installiert ist. Wenn nicht, installieren Sie es mit dem folgenden Befehl:
sudo apt install apache2
ModSecurity-Modul PPA importieren
Einrichten des erforderlichen Repositorys
Die nächste Aufgabe auf unserer Liste ist die Installation des ModSecurity Apache-Moduls. Die in den Standard-Repositorys von Debian verfügbare Version ist möglicherweise nicht die neueste, und ihre Verwendung kann zu sofortigen Fehlern führen. Stattdessen importieren wir ein Drittanbieter-Repository, um das neueste ModSecurity-Modul für Apache zu installieren. Dieses von Digitalwave verwaltete Drittanbieter-Repository ist für seine stabilen Binärdateien bekannt.
Beginnen Sie mit der Installation einer Reihe erforderlicher Pakete:
sudo apt install apt-transport-https lsb-release ca-certificates curl -y
Anschließend importieren wir das ModSecurity 2 Module PPA-Repository GPG-Schlüssel:
curl -fsSL https://modsecurity.digitalwave.hu/archive.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/digitalwave-modsecurity.gpg > /dev/null
Nachdem Sie den GPG-Schlüssel erhalten haben, fügen Sie das Repository zu Ihrem System hinzu:
echo "deb [signed-by=/usr/share/keyrings/digitalwave-modsecurity.gpg] http://modsecurity.digitalwave.hu/debian/ $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/digitalwave-modsecurity.list
echo "deb [signed-by=/usr/share/keyrings/digitalwave-modsecurity.gpg] http://modsecurity.digitalwave.hu/debian/ $(lsb_release -sc)-backports main" | sudo tee -a /etc/apt/sources.list.d/digitalwave-modsecurity.list
Priorisierung des neuen Apache-Modul-PPA-Repository
Nachdem das Repository eingerichtet wurde, muss nun die APT-Richtlinie angepasst werden, um dieses Repository für bestimmte Pakete im Zusammenhang mit ModSecurity zu priorisieren. Dies geschieht mit dem folgenden Befehl:
cat << EOF | sudo tee -a /etc/apt/preferences.d/99modsecurity
Package: *nginx*
Pin: origin modsecurity.digitalwave.hu
Pin-Priority: 900
Package: *libapache2-mod-security2*
Pin: origin modsecurity.digitalwave.hu
Pin-Priority: 900
Package: *modsecurity-crs*
Pin: origin modsecurity.digitalwave.hu
Pin-Priority: 900
Package: *libmodsecurity*
Pin: origin modsecurity.digitalwave.hu
Pin-Priority: 900
EOF
Führen Sie als Nächstes ein APT-Update aus, um die neu importierte Quelle widerzuspiegeln:
sudo apt update
Um die Einstellungen zu bestätigen, können Sie diese Richtlinienänderung außerdem wie folgt bestätigen:
sudo apt-cache policy libapache2-mod-security2 modsecurity-crs libmodsecurity3
Installieren Sie das ModSecurity 2-Modul
Nachdem das Repository nun bereit ist, fahren Sie mit der Installation des Moduls libapache2-mod-security2 fort:
sudo apt install libapache2-mod-security2
Nach der Installation muss das Modul noch aktiviert werden. Hierzu verwenden Sie folgenden Befehl:
sudo a2enmod security2
Neustarten des Apache-Dienstes
Abschließend starten wir den Apache-Dienst neu, um sicherzustellen, dass alle Änderungen wirksam werden und das neu hinzugefügte ModSecurity-Modul korrekt integriert ist:
sudo nano /etc/apache2/mods-enabled/security2.conf
Aktivieren Sie das ModSecurity 2-Modul auf Apache HTTP
Zugriff auf die ModSecurity-Konfigurationsdatei
Die Konfigurationsdatei für Apache ModSecurity finden Sie unter /etc/apache2/mods-enabled/security2.conf. Greifen Sie mit dem Nano-Texteditor (oder Ihrem bevorzugten Texteditor) mit dem folgenden Befehl auf diese Datei zu:
sudo nano /etc/apache2/mods-enabled/security2.conf
Suchen Sie nach der Zeile:
IncludeOptional /etc/modsecurity/*.conf
Stellen Sie sicher, dass diese Zeile nicht kommentiert ist, da sie andere notwendige Konfigurationsdateien aus dem Verzeichnis /etc/modsecurity enthält. Sie sollte standardmäßig nicht kommentiert sein.
Ändern der ModSecurity 2-Konfiguration
Wir müssen die von modsecurity.conf empfohlene Konfigurationsdatei in modsecurity.conf umbenennen, um sie zu aktivieren. Dies kann mit dem folgenden Befehl erfolgen:
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Öffnen wir nun diese neu benannte Konfigurationsdatei:
sudo nano /etc/modsecurity/modsecurity.conf
Die ModSecurity-Regel-Engine ist in dieser Datei standardmäßig auf DetectionOnly eingestellt. Dies bedeutet, dass potenziell bösartiges Verhalten erkannt und protokolliert wird, ohne es zu blockieren. Um dies zu ändern und die Blockierungsfunktionen von ModSecurity zu aktivieren, suchen Sie die Zeile SecRuleEngine (ungefähr Zeile 7) und ersetzen Sie DetectionOnly durch On.
Aus:
SecRuleEngine DetectionOnly
Zu:
SecRuleEngine On
Anpassen der Protokolleinstellungen für Apache
Weiter unten in der Konfigurationsdatei finden Sie die Zeile SecAuditLogParts (etwa Zeile 224). Die Standardeinstellung für diese Zeile ist nicht ganz korrekt; sie muss angepasst werden, um alle Transaktionsinformationen korrekt zu protokollieren.
Ändern:
SecAuditLogParts ABDEFHIJZ
Zu:
SecAuditLogParts ABCEFHJKZ
Nachdem Sie diese Änderungen vorgenommen haben, speichern Sie sie und beenden Sie den Editor.
Neustarten von Apache zum Übernehmen der Änderungen
Unser letzter Schritt in diesem Prozess ist der Neustart des Apache-Dienstes, damit unsere Änderungen an der ModSecurity-Konfiguration wirksam werden. Dies erreichen wir mit dem folgenden Befehl:
sudo systemctl restart apache2
OWASP Core Rule Set für ModSecurity2 installieren
ModSecurity allein schützt Ihren Webserver nicht. Es erfordert einen Regelsatz, um potenzielle Bedrohungen zu identifizieren und bösartige Aktivitäten zu blockieren. Der OWASP (Open Web Application Security Project) Core Rule Set (CRS) ist ein hoch angesehener Regelsatz, der von verschiedenen Webservern und Web Application Firewalls (WAFs) verwendet wird. Die Bereitstellung dieses Regelsatzes bietet Ihrem Server einen robusten Schutz vor einer Reihe von Bedrohungen, die im Internet auftreten.
Bevor wir fortfahren, müssen Sie unbedingt überprüfen, ob Sie die neueste Version von OWASP CRS haben. Besuchen Sie dazu die OWASP Release-Tag-Seite. Dieser Schritt stellt sicher, dass Sie die aktuellsten Sicherheitsmaßnahmen für Ihren Server herunterladen und installieren.
Erstellen des übergeordneten Verzeichnisses für OWASP CRS
Erstellen wir zunächst das führende übergeordnete Verzeichnis für OWASP mit dem Befehl mkdir:
sudo mkdir /etc/apache2/modsec/
Laden Sie das OWASP CRS-Archiv unter Debian herunter
Als Nächstes verwenden wir den Befehl wget, um das OWASP CRS 3.3.4-Archiv abzurufen, das zum Zeitpunkt des Schreibens die stabile Version ist. Denken Sie daran, dass Sie die Version über den zuvor erwähnten Link überprüfen sollten.
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.4.zip
Der Nightly Build bietet zwar aktuellere Sicherheitsmaßnahmen, kann aber aufgrund seines Entwicklungsstatus Probleme verursachen. Für neue Benutzer ist es ratsam, die stabile Version zu verwenden, um mögliche Komplikationen zu vermeiden.
Hinweis: Sie sollten ständig nach Updates suchen; die stabilen Regeln ändern sich nicht wöchentlich, sondern vierteljährlich oder sofern kein dringendes Update erforderlich ist.
Extrahieren des Archivs
Nachdem wir das Archiv heruntergeladen haben, können wir es in das Verzeichnis extrahieren, das wir zuvor erstellt haben:
sudo tar xvf v3.3.4.tar.gz -C /etc/apache2/modsec
Denken Sie daran, die Befehle basierend auf der heruntergeladenen OWASP CRS-Version zu ändern.
Konfigurieren des Regelsatzes
Das OWASP CRS verfügt über eine Beispielkonfigurationsdatei, die Sie umbenennen sollten, während Sie das Original als Backup behalten. Sie können dies mit dem Befehl „cp“ tun:
sudo cp /etc/apache2/modsec/coreruleset-3.3.4/crs-setup.conf.example /etc/apache2/modsec/coreruleset-3.3.4/crs-setup.conf
Hinweis: Denken Sie daran, /coreruleset-3.3.4/ durch die genaue Version des von Ihnen gewählten OWASP CRS zu ersetzen.
Aktivieren der Regeln
Um die Regeln zu aktivieren, öffnen Sie die Datei /etc/apache2/mods-enabled/security2.conf:
sudo apt install unzip -y
Fügen Sie dann die folgenden beiden Zeilen ein:
Include /etc/apache2/modsec/coreruleset-3.3.4/crs-setup.conf
Include /etc/apache2/modsec/coreruleset-3.3.4/rules/*.conf
Hinweis: Stellen Sie erneut sicher, dass Sie /coreruleset-3.3.4/ durch die genaue Version von OWASP CRS ersetzen, die Sie ausgewählt haben, da das von Ihnen heruntergeladene Coreruleset höchstwahrscheinlich neuer ist als das Beispiel im Handbuch.
Kommentieren oder entfernen Sie außerdem die folgende Zeile:
IncludeOptional /usr/share/modsecurity-crs/*.load
Wenn Sie fertig sind, speichern und beenden Sie die Datei:
Neustarten von Apache zum Übernehmen der Änderungen
Der letzte Schritt besteht darin, Ihren Apache-Dienst neu zu starten, um sicherzustellen, dass die Änderungen wirksam werden:
sudo systemctl restart apache2
Erste Schritte mit OWASP Core Rule Set und ModSecurity 2
Das OWASP Core Rule Set (CRS) ist ein umfassendes Tool mit zahlreichen anpassbaren Optionen. Seine Standardkonfiguration bietet sofortige Sicherheitsverbesserungen für die meisten Server, ohne echte Besucher oder Suchmaschinenoptimierungs-Bots (SEO) zu beeinträchtigen. Wir werden in diesem Abschnitt einige wichtige Aspekte des CRS besprechen, aber es ist immer von Vorteil, die Konfigurationsdateien zu untersuchen, um alle verfügbaren Optionen vollständig zu verstehen.
Anpassen der CRS-Konfiguration
Wir beginnen mit dem Öffnen der Datei crs-setup.conf, in der die meisten CRS-Einstellungen geändert werden können:
sudo nano /etc/apache2/modsec/coreruleset-3.3.4/crs-setup.conf
Das CRS-Bewertungssystem verstehen
ModSecurity arbeitet in zwei unterschiedlichen Modi:
- Anomaliebewertungsmodus: Dieser Modus wird den meisten Benutzern empfohlen und weist bei jeder Regelübereinstimmung einen „Anomaliewert“ zu. Nach der Verarbeitung sowohl eingehender als auch ausgehender Regeln wird der Anomaliewert überprüft und bei Bedarf eine störende Aktion ausgelöst. Diese Aktion erfolgt häufig in Form eines 403-Fehlers. Dieser Modus bietet genaue Protokollinformationen und bietet mehr Flexibilität beim Festlegen von Blockierungsrichtlinien.
- In sich geschlossener Modus: In diesem Modus wird eine Aktion sofort ausgeführt, wenn eine Regel erfüllt wird. Dies kann zwar den Ressourcenverbrauch reduzieren, bietet jedoch weniger Flexibilität und führt zu weniger informativen Prüfprotokollen. Der Regelabgleichsprozess wird beendet, wenn die erste Regel erfüllt ist und die angegebene Aktion ausgeführt wird.
Paranoia-Level verstehen
Das OWASP CRS definiert vier Paranoia-Stufen:
- Paranoiastufe 1: Die Standardstufe ist für die meisten Benutzer geeignet.
- Paranoia Level 2: Für fortgeschrittene Benutzer.
- Paranoia Level 3: Für erfahrene Benutzer.
- Paranoia Level 4: Nur unter außergewöhnlichen Umständen ratsam.
Höhere Paranoia-Level ermöglichen zusätzliche Regeln, erhöhen die Sicherheit und erhöhen die Wahrscheinlichkeit, dass legitimer Datenverkehr aufgrund von Fehlalarmen blockiert wird. Es ist wichtig, einen Paranoia-Level zu wählen, der Ihrem Fachwissen und Ihren Sicherheitsanforderungen entspricht.
Testen von OWASP CRS auf Ihrem Server
Um sicherzustellen, dass das OWASP CRS auf Ihrem Server ordnungsgemäß funktioniert, rufen Sie die folgende URL über Ihren Internetbrowser auf. Denken Sie daran, „yourdomain.com“ durch Ihre tatsächliche Domain zu ersetzen:
https://www.yourdomain.com/index.html?exec=/bin/bash
Wenn Sie einen 403 Forbidden-Fehler erhalten, funktioniert OWASP CRS wie erwartet. Wenn nicht, liegt möglicherweise ein Fehler im Einrichtungsprozess vor, der Ihre Aufmerksamkeit erfordert. Das häufigste Problem kann sein, dass Sie vergessen haben, DetectionOnly auf On oder etwas Ähnliches zu ändern.
Adressieren Sie False Positives und benutzerdefinierte Ausschlussregeln
Die Verwaltung von Fehlalarmen mit ModSecurity und dem OWASP Core Rule Set (CRS) kann eine ständige Aufgabe sein. Der robuste Schutz, den diese Systeme gegen eine Vielzahl von Bedrohungen bieten, macht diesen Aufwand jedoch unerlässlich. Um Fehlalarme zunächst zu minimieren, ist es ratsam, ein niedriges Paranoia-Niveau festzulegen.
Indem Sie den Regelsatz mehrere Wochen oder sogar Monate lang auf einer niedrigeren Paranoiastufe ausführen, können Sie die Wahrscheinlichkeit einer überwältigenden Anzahl von Fehlalarmen verringern. Dieser Ansatz gibt Ihnen Zeit, sich mit den Warnungen und den entsprechenden Reaktionen vertraut zu machen, bevor Sie die Paranoiastufe schrittweise erhöhen, um strengere Sicherheit zu gewährleisten.
Verwalten von Fehlalarmen in bekannten Anwendungen unter Debian mit OWASP, ModSecurity 2
ModSecurity bietet die Möglichkeit, bestimmte Aktionen auf eine Whitelist zu setzen, die unbeabsichtigt falsche Ergebnisse auslösen können. Zum Beispiel:
#SecAction \
# "id:900130,\
# phase:1,\
# nolog,\
# pass,\
# t:none,\
# setvar:tx.crs_exclusions_cpanel=1,\
# setvar:tx.crs_exclusions_dokuwiki=1,\
# setvar:tx.crs_exclusions_drupal=1,\
# setvar:tx.crs_exclusions_nextcloud=1,\
# setvar:tx.crs_exclusions_phpbb=1,\
# setvar:tx.crs_exclusions_phpmyadmin=1,\
# setvar:tx.crs_exclusions_wordpress=1,\
# setvar:tx.crs_exclusions_xenforo=1"
Um Whitelists für Anwendungen wie WordPress, phpBB und phpMyAdmin zu aktivieren, heben Sie die Kommentierung der entsprechenden Zeilen auf und behalten Sie den Wert (1) bei. Um die Whitelists für nicht genutzte Dienste zu verhindern, ändern Sie den Wert auf (0).
Die aktualisierte Konfiguration könnte wie folgt aussehen:
SecAction \
"id:900130,\
phase:1,\
nolog,\
pass,\
t:none,\
setvar:tx.crs_exclusions_phpbb=1,\
setvar:tx.crs_exclusions_phpmyadmin=1,\
setvar:tx.crs_exclusions_wordpress=1"
In diesem Fall wurden überflüssige Optionen entfernt, sodass die richtige Syntax für die von Ihnen benötigten Konfigurationen erhalten blieb.
Erstellen von Regelausschlüssen vor der CRS-Implementierung
Um benutzerdefinierte Ausschlüsse zu erstellen, benennen Sie zunächst die Datei „REQUEST-900-EXCLUSION-RULES-BEFORE-CRS-SAMPLE.conf“ mit dem folgenden Befehl um:
sudo cp /etc/apache2/modsec/coreruleset-3.3.4/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example /etc/apache2/modsec/coreruleset-3.3.4/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
Denken Sie daran, dass jede Ausschlussregel eine eindeutige „ID-Nummer“ haben muss, um Fehler beim Testen des Apache2-Dienstes zu vermeiden.
Beispielsweise können einige „REQUEST_URIs“ zu Fehlalarmen führen. Das folgende Beispiel veranschaulicht zwei solcher Fälle mit Google PageSpeed Beacon und dem WPMU DEV-Plugin für WordPress:
SecRule REQUEST_URI "@beginsWith /wp-load.php?wpmudev" "id:1544,phase:1,log,allow,ctl:ruleEngine=off"
SecRule REQUEST_URI "@beginsWith /ngx_pagespeed_beacon" "id:1554,phase:1,log,allow,ctl:ruleEngine=off"
Diese Regeln erlauben automatisch jede URL, die mit dem angegebenen Pfad beginnt.
Sie können auch bestimmte IP-Adressen auf die Whitelist setzen:
SecRule REMOTE_ADDR "^195\.151\.128\.96" "id:1004,phase:1,nolog,allow,ctl:ruleEngine=off"
SecRule REMOTE_ADDR "@ipMatch 127.0.0.1/8, 195.151.0.0/24, 196.159.11.13" "phase:1,id:1313413,allow,ctl:ruleEngine=off"
In der ersten Regel wird eine einzelne IP-Adresse auf die Whitelist gesetzt, während die zweite Regel die Anweisung „@ipMatch“ für eine breitere Subnetzübereinstimmung verwendet. Um ein Subnetz oder eine IP-Adresse zu blockieren, ersetzen Sie einfach „allow“ durch „deny“. Diese Flexibilität ermöglicht Ihnen die Erstellung detaillierter Blacklists und Whitelists, die für eine verbesserte Sicherheitsstrategie in Fail2Ban integriert werden können.
Deaktivieren bestimmter Regeln unter Debian mit OWASP, ModSecurity 2
Anstatt einen ganzen Pfad auf die Whitelist zu setzen, besteht ein anderer Ansatz darin, bestimmte Regeln zu deaktivieren, die dauerhaft falsche Positivergebnisse verursachen. Obwohl diese Methode mehr Tests erfordert, bietet sie langfristige Vorteile.
Wenn beispielsweise die Regeln 941000 und 942999 im Bereich „/admin/“ Fehlalarme für Ihr Team auslösen, können Sie die Regel-ID in Ihren ModSecurity-Protokollen suchen und nur diese spezifischen IDs mit dem Befehl „RemoveByID“ deaktivieren:
SecRule REQUEST_FILENAME "@beginsWith /admin" "id:1004,phase:1,pass,nolog,ctl:ruleRemoveById=941000-942999"
Überwachen von Protokollen und Erkennen von Mustern
Eine kontinuierliche Protokollüberwachung ist bei der Behandlung von Fehlalarmen mit Apache, ModSecurity und OWASP unerlässlich. Sie hilft dabei, Muster zu erkennen, die Fehlalarme auslösen, und ermöglicht Ihnen die Erstellung benutzerdefinierter Regeln zur Behandlung dieser.
Wenn beispielsweise bestimmte Regeln ständig zu Fehlalarmen führen, können Sie eine Ausschlussregel erstellen, die diese speziellen Fälle behandelt. Dieser maßgeschneiderte Ansatz sorgt für eine effektivere Behandlung von Fehlalarmen.
Durch regelmäßige Überprüfung Ihrer Protokolle und Anpassen Ihrer Regeln können Sie eine sicherere und effizientere Umgebung für Ihre Anwendungen aufrechterhalten.
Log-Rotation für ModSecurity 2
Aufgrund der dynamischen Natur von Webtransaktionen können ModSecurity-Protokolle schnell anwachsen, weshalb eine effektive Protokollverwaltung von entscheidender Bedeutung ist. Die Protokollrotation ist ein nützliches Tool zur Verwaltung dieser Protokolle, obwohl sie in ModSecurity nicht standardmäßig konfiguriert ist. Dieser Abschnitt führt Sie durch die Einrichtung der Protokollrotation speziell für ModSecurity.
Erstellen einer ModSecurity-Rotationsdatei
Zuerst müssen Sie eine dedizierte Datei für die ModSecurity-Protokollrotation erstellen. Verwenden Sie dazu den folgenden Befehl, um eine neue Datei mit dem Namen modsec zu erstellen und zu öffnen:
sudo nano /etc/logrotate.d/modsec
Konfigurieren der Rotationsdatei
Fügen Sie in der neu erstellten ModSecurity (modsec)-Konfigurationsdatei Folgendes hinzu:
/var/log/modsec_audit.log
{
rotate 31
daily
missingok
compress
delaycompress
notifempty
}
Mit dieser Konfiguration werden Protokolle 31 Tage lang aufbewahrt. Sie können die Anzahl jedoch Ihren Anforderungen entsprechend ändern. Wenn Sie die Einstellung beispielsweise auf „rotate 7“ ändern, werden stattdessen Protokolle für eine Woche aufbewahrt.
Die Anweisung „daily“ stellt sicher, dass die Protokolle jeden Tag rotiert werden, während „compress“ Platz spart, indem alte Protokolle komprimiert werden. Die Option „delaycompress“ verzögert die Komprimierung bis zum zweiten Rotationszyklus und „missingok“ verhindert Fehler, wenn die Protokolldatei fehlt. Darüber hinaus stellt „notifempty“ sicher, dass leere Protokolldateien nicht rotiert werden.
Tipp: Eine tägliche Protokollrotation ist ratsam, um die Handhabung übermäßig großer Protokolldateien zu vermeiden, die die Analyse zeitaufwändiger machen können.
Abschluss
Sie haben jetzt ModSecurity 2 mithilfe des Digitalwave-Repositorys auf Ihrem Debian 12- oder 11-Server installiert und den OWASP Core Rule Set konfiguriert. Mit diesen Tools ist Ihr Server in der Lage, viele gängige Bedrohungen für Webanwendungen zu blockieren.
Denken Sie daran, das CRS regelmäßig zu aktualisieren und auf Fehlalarme oder übersehene Schwachstellen zu achten. Kontinuierliche Tests und Anpassungen sind der Schlüssel zur Aufrechterhaltung einer robusten Sicherheitskonfiguration.