Update: Die aktuelle Antwort wird vollständig aktualisiert.
Entsprechend dieser Diskussion habe ich ein GitHub-Repository namens WWW Security Assistant erstellt . Es gibt einen Zweig ask_ubuntu
, der dieser Antwort gewidmet ist. Alle zuvor hier verfügbaren Referenzen werden aufgrund der Zeichenbeschränkung entfernt - sie sind auf GitHub verfügbar.
Hier finden Sie einige Möglichkeiten, wie Sie die Apache2-Sicherheit in Ubuntu 16.04 erhöhen können .
Inhaltsverzeichnis:
- WWW Security Assistant Script (WSAS) ► Iptables
- Iptables - Grundkonfiguration - Speichern und Wiederherstellen
- ModEvasive für Apache2
- ModEvasive ► WSAS ► Iptables
- ModSecurity 2.9 für Apache2
- ModSecurity OWASP-Kernregelsatz 3.x.
- Whitelisting für ModSecurity-Regeln
- ModSecurity-Regeln ► WSAS ► Iptables
- ModSecurity- und Apache-Protokolldateien
- ModSecurity-Protokolldateien ► Fail2Ban ► Iptables
- ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► Iptables
- ModSecurity GuardianLog ► Benutzerdefinierte HTTPD-Analyse ► WSAS ► Iptables
Nehmen wir außerdem an, es ist immer gut, HTTPS zu verwenden:
WWW Security Assistant-Skript ► Iptables
Hier wird das Skript vorgestellt www-security-assistant.bash
. Es könnte Ihnen beim Umgang mit den schädlichen IP-Adressen helfen. Das Skript verfügt über zwei Modi.
Automatischer Modus
Wenn ein externes Programm wie das von Apache mod_security
eine schädliche $IP
Adresse bereitstellt . In diesem Fall sollte die Syntax, die das Skript aufruft, wie folgt lauten:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
In diesem Modus bietet das Skript zwei Aktionsstufen und sendet für jede Aktion eine E-Mail an den / die Administrator (en).
Erste Stufe: für die ersten paar ‚Übertretungen‘ die Quelle $IP
wird für einen bestimmten Zeitraum gesperrt , um den Wert gleich $BAN_TIME
. Dieser Modus verwendet den Befehl at
.
Zweite Stufe: Wenn die Anzahl der Übertretungen von bestimmten $IP
gleich dem Wert von wird $LIMIT
, wird diese $IP
Adresse durch Iptables dauerhaft gesperrt und dem hinzugefügt $BAN_LIST
.
Manueller Modus
Dieser Modus akzeptiert die folgenden Optionen:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Erstellt einen Eintrag in die Datei /var/www-security-assistant/iptables-DROP.list
und generiert eine Regel wie folgt :
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Erstellt einen Eintrag in die Datei /var/www-security-assistant/iptables-DROP-CLEAR.list
, entfernt die bestimmte Iptables-Regel, entfernt die $IP
aus dem Verlauf und aus dem $BAN_LIST
:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Erstellt nur einen Eintrag in die Datei /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Erstellt einen Eintrag in die Datei /var/www-security-assistant/iptables-ACCEPT.list
und generiert eine Regel wie folgt :
iptables -A GUARDIAN -s $IP -j ACCEPT
Abhängigkeiten
Das Skript verwendet iptables-save.sh
und die iptables
Kette GUARDIAN
, die im nächsten Abschnitt erläutert wird. Es werden nur wenige Dateien erstellt und verwaltet in $WORK_DIR
:
www-security-assistant.history
- enthält die Daten für die Übertretungen der vorherigen IP.
www-security-assistant.mail
- den Inhalt der letzten vom Skript gesendeten E-Mail.
iptables-ACCEPT.list
;; iptables-DROP.list
und iptables-DROP-CLEAR.list
.
Das Skript benötigt eine minimale Konfiguration zum Senden von E-Mails:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
Wenn ein HTTPS-Dienst konfiguriert ist, kann sein TLS-Zertifikat innerhalb des Postfix-Dienstes verwendet werden.
Zusätzlich verwendet das Skript at
: sudo apt install at
.
Installation
Arbeitsverzeichnis erstellen, nennen wir es /var/www-security-assistant
. Laden Sie www-security-assistant.bash
es herunter und machen Sie es ausführbar:
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
Machen Sie www-security-assistant.bash
als benutzerdefinierten Befehl zur Verfügung:
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Erteilen Sie die Berechtigung zum www-data
Ausführen www-security-assistant.bash
ohne Kennwort über sudo
. Verwenden Sie den folgenden Befehl, um eine neue Datei mit einer zusätzlichen sudoers
Regel sicher zu erstellen und zu bearbeiten :
sudo visudo -f /etc/sudoers.d/www-security-assistant
Fügen Sie der Datei die folgende Zeile hinzu - speichern Sie die Datei und beenden Sie sie:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Optimieren www-security-assistant.bash
. Ändern Sie mindestens den Wert der Variablen $EMAIL_TO
.
Untersuchung
Stellen Sie sich als dar $AGENT
und prüfen Sie, ob der automatische Modus ordnungsgemäß funktioniert:
www-security-assistant.bash 192.168.1.177 Guardian
Überprüfen Sie dann Ihre E-Mails, geben Sie ein iptables -L GUARDIAN -n
, überprüfen Sie die Dateien www-security-assistant.history
und www-security-assistant.mail
. Führen Sie den obigen Befehl fünfmal aus und überprüfen Sie die Dateien iptables-DROP.list
und iptables-CURRENT.conf
.
Überprüfen Sie, ob der manuelle MODUS ordnungsgemäß funktioniert. Fügen Sie Ihren lokalen Host zur weißen Liste hinzu:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Überprüfen Sie dann die Datei iptables-ACCEPT.list
.
Der Rest dieses Tutorials ist die Integration www-security-assistant
in Ihr System.
Iptables - Grundkonfiguration - Speichern und Wiederherstellen
Grundlegende Einstellung
Bitte lesen Sie dieses Handbuch, bevor Sie die folgenden Regeln hinzufügen.
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Bevor Sie die nächsten Aktionen ausführen, öffnen Sie eine neue SSH-Verbindung und versuchen Sie, sich bei Ihrem System anzumelden, um zu überprüfen, ob alles einwandfrei funktioniert!
Speichern und wiederherstellen
Dies kann über benutzerdefinierte Skripte erreicht werden, die den iptables
Coning während des Stopp-Start-Prozesses (oder Neustarts) des Systems speichern und wiederherstellen . (Wenn wir UFW zum Einrichten von Iptables-Regeln verwenden, ist dieser Schritt nicht erforderlich.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Neue Kette erstellen
Erstellen Sie eine neue Kette, GUARDIAN
rufen Sie sie auf und fügen Sie sie als Nummer 3 in die INPUT
Kette ein:
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Untersuchung
Starten Sie das System neu und überprüfen Sie die Konfiguration. Bitte verwenden Sie sudo systemctl reboot
(verwenden Sie nicht die Force-Option reboot -f
). Wenn das System wieder online ist, können wir überprüfen, ob die neu erstellte Kette vorhanden ist, indem:
sudo iptables -L GUARDIAN -n
ModEvasive für Apache2
ModEvasive ist ein Ausweichmanöver-Modul für Apache, das Ausweichaktionen im Falle eines HTTP-DoS- oder DDoS-Angriffs oder eines Brute-Force-Angriffs ermöglicht. Weiterlesen...
Installation
Installieren und aktivieren Sie das Modul:
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
Erstellen Sie ein Protokollverzeichnis und machen Sie es zugänglich für www-data
:
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
Passen Sie die Grundkonfiguration an - kommentieren Sie bestimmte Anweisungen in der Konfigurationsdatei aus und bearbeiten Sie sie:
/etc/apache2/mods-enabled/evasive.conf
Starten Sie Apache neu : sudo systemctl restart apache2.service
.
Untersuchung
- Öffnen Sie eine Webseite von Ihrem Server und aktualisieren Sie das Browserfenster einige Male intensiv (drücken Sie
F5
) - Sie müssen die Fehlermeldung 403 Forbidden erhalten . In das Protokollverzeichnis wird eine neue Sperrdatei generiert. Diese Datei sollte gelöscht werden, um weitere Verstöße gegen diese IP-Adresse zu erkennen.
ModEvasive ► WSAS ► Iptables
Hier werden wir konfigurieren, mod_evasive
um mit iptables
dem www-security-assistant.bash
im obigen Abschnitt erstellten zu sprechen .
Bearbeiten Sie /etc/apache2/mods-available/evasive.conf
auf diese Weise:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
Erstellen Sie eine Protokolldatei und starten Sie Apache neu:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Um diese Konfiguration zu testen wir DDoS - Attacke über das simulieren können F5
Verfahren, oben genannten, oder wir können einen Befehl verwenden ab
, hping3
etc.
Achtung: Seien Sie vorsichtig, da die iptables
in WSAS verwendete Regel alle neuen Verbindungen von der Quelle $IP
, einschließlich Ihrer SSH-Verbindungen , trennt . Es ist gut, eine Sicherungsmethode zu haben, um während der Tests eine Verbindung zum Server herzustellen. Sie können diese Regel so ändern, dass sie nur mit den HTTP / HTTPS-Ports funktioniert.
ModSecurity 2.9 für Apache2
ModSecurity ist eine Webanwendungs-Firewall-Engine, die für sich genommen nur sehr wenig Schutz bietet. Um nützlich zu werden, muss ModSecurity mit Regeln konfiguriert werden. Damit Benutzer ModSecurity sofort nutzen können, bietet Spiderws von Trustwave einen kostenlosen zertifizierten Regelsatz ... Weiterlesen ...
Installation
Installieren und aktivieren Sie das Modul:
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Konfigurationsdatei erstellen:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Lesen und bearbeiten Sie /etc/modsecurity/modsecurity.conf
sorgfältig! Fügen Sie mindestens die folgenden Anweisungen hinzu oder ändern Sie sie:
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
Die Datei /etc/apache2/mods-enabled/security2.conf
beinhaltet /etc/modsecurity/modsecurity.conf
in Apache - Konfiguration. In diesem Stadium security2.conf
soll so aussehen:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Protokollverzeichnis erstellen:
sudo mkdir -p /var/log/apache2_mod_security
Protokollrotation einrichten. Erstellen Sie zuerst eine Konfigurationsdatei:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Bearbeiten Sie dann die neue Datei folgendermaßen:
/var/log/apache2_mod_security/*.log { … }
Starten Sie Apache neu.
Untersuchung
Erstellen Sie eine zusätzliche Konfigurationsdatei in /etc/modsecurity
, rufen Sie sie beispielsweise auf z-customrules.conf
und fügen Sie die folgende Regel als Inhalt hinzu:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Starten Sie den Server neu : sudo systemctl restart apache2.service
. Öffnen Sie Ihren Browser und geben Sie ein https://example.com/?abc=../
. Das Ergebnis ist: 403 Verboten . Überprüfen Sie die Protokolldateien /var/log/apache2_mod_security
für weitere Details.
Damit die Dinge mehr Spaß machen, platzieren Sie das Skript issues.php
an einer geeigneten Stelle in Ihrem DocumentRoot
(hier gehe ich davon aus, dass dieser Ort ist /var/www/html
):
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Ändern Sie dann die obige Regel folgendermaßen:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Starten Sie Apache neu, öffnen Sie Ihren Browser und geben Sie ein https://example.com/?abc=../
;-) Die Idee stammt aus dem Skript der SE BotLovin.cs
.
Bearbeiten Sie /etc/modsecurity/z-customrules.conf
die Regel erneut und kommentieren Sie sie (deaktivieren Sie sie) - dies war nur ein Testbeispiel und wird von OWASP CRS behandelt, das im nächsten Abschnitt beschrieben wird.
Hier ist ein weiteres Beispiel, in dem wir alle wp-admin
Seitenanforderungen umleiten , jedoch mit Ausnahme dieser von bestimmten IP-Adressen (beachten Sie Folgendes chain
):
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Hier haben wir zwei störende Aktionen: (1) deny, status:403
und (2) redirect:'/issues.php'
. Eigentlich brauchen wir die deny
Aktion nicht, weil sie von der redirect
Aktion überschrieben wird .
ModSecurity OWASP-Kernregelsatz 3.x.
In Ubuntu 16.04 können Sie CSR 2.x installieren : apt install modsecurity-crs
. Hier installieren wir CSR 3.x. Detaillierte Anweisungen finden Sie im Installationshandbuch ( git
erforderlich).
Installation
Klonen Sie CSR in den Ordner /usr/share/modsecurity-crs.3
:
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
Aktualisieren und erneuern Sie die GeoIP-Datenbank automatisch. (Die GeoIP-Datenbank ist nicht mehr im CRS enthalten. Stattdessen wird empfohlen, sie regelmäßig herunterzuladen.) Das Skript util/upgrade.py
bietet diese Funktionalität. Sie können es wie folgt in cron - verwenden sudo crontab -e
:
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
Konfigurationsdateien erstellen:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Lesen und bearbeiten Sie diese Dateien sorgfältig! Kommentar zumindest SecGeoLookupDB
Richtlinie:
SecGeoLookupDB util/geo-location/GeoIP.dat
Wenden Sie die Apache-Konfiguration an. Bearbeiten Sie /etc/apache2/mods-available/security2.conf
auf diese Weise:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
Speichern Sie die Datei und starten Sie Apache neu.
Whitelisting für ModSecurity-Regeln
Das Whitelisting von ModSecurity-Regeln kann über die folgenden ModSec-Anweisungen erfolgen, die systemweit oder innerhalb der Konfiguration des virtuellen Hosts auch global für bestimmte Verzeichnisse oder Standortübereinstimmungen verwendet werden können:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Deaktivieren Sie mod_security2
für PhpMyAdmin. Ändern Sie /etc/phpmyadmin/apache.conf
auf diese Weise:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Deaktivieren Sie bestimmte Regeln für ein bestimmtes Verzeichnis:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Regeln global deaktivieren. Zu diesem Zweck müssen wir unsere Anweisungen irgendwo in den Konfigurationsdateien von Apache hinzufügen: /etc/modsecurity/z-customrules.conf
ist ein guter Ort.
Deaktivieren Sie Regeln in der gesamten Apache-Konfiguration:
SecRuleRemoveById 973301 950907
Whitelist eine IP-Adresse, damit sie ModSecurity passieren kann:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Regeln innerhalb der Verzeichnisübereinstimmung deaktivieren:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Aktualisieren Sie die Aktion der Regel anhand ihrer ID innerhalb der Standortübereinstimmung:
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
In den obigen Beispielen gehen wir davon aus, dass 973301
und 950907
sind Regel - IDs, die die normale Arbeit unserer Web - Anwendungen behindern. Wir können Regeln wie diese durch eine Analyse von finden modsec_audit.log
.
ModSecurity-Regeln ► WSAS ► Iptables
Im Folgenden finden Sie einige weitere Beispiele zum Erstellen benutzerdefinierter SecRules sowie zum Aufrufen des WWW Security Assistant Script (WSAS).
Ersteinrichtung
Wir brauchen einen zusätzlichen Startup-Scrip - modsecurity-assistant.sh
. Der Grund dafür ist, dass die exec
Aktion von ModSecurity eine zu einfache und eingeschränkte Syntax aufweist.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Wenn Sie in das Skript schauen, sehen Sie einige Variablen, die von ModSecurity exportiert werden. Diese sind: $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_HOST
und $UNIQUE_ID
. Die anderen Variablen werden im Skript erläutert.
Erstellen Sie eine benutzerdefinierte Regel und rufen Sie unsere Skripte auf
Zuerst erstellen wir eine Regel, die ausgeführt modsecurity-assistant.sh
(und aufgerufen www-security-assistant.bash
) wird, wenn der Anforderungs-URI ein Wort enthält, das in unserer Blacklist enthalten ist. Öffnen /etc/modsecurity/z-customrules.conf
Sie die folgenden Zeilen und fügen Sie sie unten hinzu:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
- Diese Variable enthält den vollständigen URI der aktuellen Anforderung. Die Regel könnte weiter gefasst sein:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
liest die Datei modsecurity-uri-black.list
, die eine Liste von Phrasen enthält, wobei jede bestimmte Phrase oder jedes Wort in eine neue Zeile eingefügt wird. Sie können interessante Wörter und Sätze aus den Protokolldateien sammeln. Wenn es eine bestimmte Übereinstimmung zwischen REQUEST_URI
und unserer Liste von Mustern gibt, wird die Regel angewendet. Die Datei könnte leer sein, aber Sie müssen sie erstellen ( touch
).
Die log
Aktion erstellt Protokolleinträge in den Protokolldateien für diese Regel mit id:150
.
drop
, deny
(mit status
) und redirect
Aktionen gehören zur störenden Gruppe von Aktionen, sie müssen am Anfang der Regel stehen chain
(wenn es eine Kette gibt). Die zweite Aktion überschreibt die erste und die dritte die zweite. Sie müssen also auswählen, welche Aktion ausgeführt werden soll, und die anderen löschen.
chain
Die Aktion ruft die nächste Regel der Kette auf. Beachten Sie, dass die zweite Regel keine hat id
.
REMOTE_ADDR
enthält die IP-Adresse der Anfrage.
@ipMatchFromFile
wird die Datei modsecurity-ip-white.list
, die eine weiße Liste von IP-Adressen enthält, in neuen Zeilen getrennt. CIDR-Einträge sind ebenfalls zulässig. Da sich die störende Aktion immer in der führenden Regel der Kette befindet, wird sie angewendet. Wenn sich jedoch eine bestimmte IP in dieser weißen Liste befindet, wird die exec
Aktion nicht angewendet. Die Datei könnte leer sein, aber Sie müssen sie erstellen ( touch
).
exec
Aktion ruft unser externes Skript auf. Diese Aktion ist nicht störend und wird ausgeführt, wenn die aktuelle Regel true zurückgibt. Wenn diese Aktion angewendet wird, wird die Remote-IP über unsere Skripte verarbeitet.
setenv
Diese Aktion exportiert bestimmte interne Variablen =%{...}
als Envvars. Exportierte Namen können sich von den internen unterscheiden. Einige Variablen müssen manuell exportiert werden, andere werden automatisch exportiert - wahrscheinlich handelt es sich um einen kleinen Fehler (in einigen Fällen führt der manuelle Export mit denselben Namen beispielsweise setenv:REQUEST_URI=%{REQUEST_URI}
zu einem leeren Wert der exportierten Variablen).
Untersuchung
Nehmen wir an, Sie haben Joomla nicht auf Ihrem Server, bearbeiten die Datei modsecurity-uri-black.list
und fügen eine Zeile mit Inhalt hinzu /joomla
. Geben Sie dann Ihren Browser ein https://exemple.com/joomla
. Sie sollten über Iptables umgeleitet und blockiert werden. Löschen Sie die Datensätze sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, fügen Sie Ihre IP hinzu modsecurity-ip-white.list
und wiederholen Sie die Übung. Jetzt sollten Sie umgeleitet, aber nicht blockiert werden.
Verbinden Sie unsere Skripte mit OWASP Core Rule Set 3.x.
Dazu aktualisieren wir die Standardaktion der Regeln für den Anomaliemodus (949110 und 959100). Bearbeiten Sie zu diesem Zweck die Datei /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
und fügen Sie die nächsten Zeilen unten hinzu:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Untersuchung
Vergessen Sie nicht, Apache neu zu starten (oder neu zu laden), um die Konfigurationsänderungen zu übernehmen. Vergessen Sie nicht, die Aufzeichnungen während der Tests regelmäßig zu löschen, da Sie sonst dauerhaft gesperrt werden können :-)
Verzeichnisüberquerungsangriff simulieren:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
SQL Injection-Angriff simulieren:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurity- und Apache-Protokolldateien
Der Apache-Webserver kann so konfiguriert werden, dass er dem Serveradministrator wichtige Informationen zur Funktionsweise gibt. Der Hauptweg, um dem Administrator Feedback zu geben, ist die Verwendung von Protokolldateien. Weiterlesen...
ModSecurity verfügt über einen leistungsstarken Protokollierungsmechanismus. Durch die Direktive SecGuardianLog
wird ein Protokoll-Feed bereitgestellt, der speziell für die Arbeit mit externen Skripten entwickelt wurde.
Derzeit ist das einzige Tool, das für die Verwendung mit der Guardian-Protokollierung bekannt ist
httpd-guardian
, Teil des Apache httpd-Tools-Projekts . Das httpd-guardian
Tool wurde entwickelt, um sich gegen Denial-of-Service-Angriffe zu verteidigen. Es verwendet die, blacklist tool
um mit einer auf iptables basierenden ... Firewall zu interagieren und die fehlerhaften IP-Adressen dynamisch auf die schwarze Liste zu setzen. Weiterlesen...
ModSecurity-Protokolldateien ► Fail2Ban ► Iptables
Es ist möglich, Fail2Ban für die Datenanalyse der Apache-Protokolldateien einzurichten. modsec_audit.log
ist wahrscheinlich die beste Wahl, aber siehe auch die Abschnitte, über die wir sprechen SecGuardianLog
.
Achten Sie darauf, dass SecAuditLogRelevantStatus
in /etc/modsecurity/modsecurity.conf
kommentiert wird. Andernfalls würde jeder, der eine 404-Fehlerseite erhält, von fail2ban blockiert.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Derzeit ist Fail2Ban in diesem Projekt in keiner Weise implementiert.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
httpd-guardian
- Erkennen von DoS-Angriffen durch Überwachen von Anforderungen Apache Security, Copyright (C) 2005 Ivan Ristic - Entwickelt alle Webserver-Anforderungen über den Pipe-Protokollierungsmechanismus. Es verfolgt die Anzahl der von jeder IP-Adresse gesendeten Anforderungen ... httpd-guardian kann entweder eine Warnung ausgeben oder ein Skript ausführen, um die IP-Adresse zu blockieren ...
Dieses Skript kann mit dem Apache2-Protokollierungsmechanismus oder mit
ModSecurity (besser) verwendet werden.
Installation und Einrichtung unter den aktuellen Umständen
Laden Sie httpd-guardian
es herunter und machen Sie es ausführbar:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
Lesen Sie die Zeilen, um 98-119
zu sehen, wie das Skript mit unserem WSAS-Skript verbunden ist.
Übernehmen Sie die folgende Änderung in Apaches Konfiguration ( /etc/modsecurity/modsecurity.conf
) und starten Sie sie neu:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Untersuchung
Um das Skript zu testen, deaktivieren Sie ModEvasive ( sudo a2dismod evasive
vergessen Sie nicht, es später zu aktivieren) und starten Sie Apache neu. Dann tail
das Exec-Protokoll:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Führen Sie von einer anderen Instanz aus einen DoS-Angriff aus, indem Sie ihn beispielsweise folgendermaßen verwenden ab
:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Benutzerdefinierte Analyse ► WSAS ► Iptables
Hier wird ein einfaches Skript mit dem Namen vorgestellt httpd-custom-analyze.bash
, das nichts Besonderes ist, aber ein schönes Beispiel sein könnte. Seine Funktionen werden im Hauptteil des Skripts beschrieben.
Installation und Einrichtung
Laden Sie httpd-custom-analyze.bash
es herunter und machen Sie es ausführbar:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Übernehmen Sie die folgende Änderung in Apaches Konfiguration ( /etc/modsecurity/modsecurity.conf
) und starten Sie sie neu:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
Das Skript ruft WSAS auf, wenn der Schwellenwert erreicht ist - Zeile lesen 86
und 35
.
Damit beide httpd-
Skripte gleichzeitig funktionieren, bearbeiten modsecurity.conf
und leiten Sie sie SecGuardianLog
an beide weiter.
Befolgen Sie zum Durchführen eines Tests die Tipps aus dem obigen Abschnitt.