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_securityeine schädliche $IPAdresse 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 $IPwird 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 $IPgleich dem Wert von wird $LIMIT, wird diese $IPAdresse 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.listund 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 $IPaus 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.listund generiert eine Regel wie folgt :
iptables -A GUARDIAN -s $IP -j ACCEPT
Abhängigkeiten
Das Skript verwendet iptables-save.shund die iptablesKette 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.listund 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.bashes 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.bashals 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-dataAusführen www-security-assistant.bashohne Kennwort über sudo. Verwenden Sie den folgenden Befehl, um eine neue Datei mit einer zusätzlichen sudoersRegel 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 $AGENTund 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.historyund www-security-assistant.mail. Führen Sie den obigen Befehl fünfmal aus und überprüfen Sie die Dateien iptables-DROP.listund 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-assistantin 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 iptablesConing 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, GUARDIANrufen Sie sie auf und fügen Sie sie als Nummer 3 in die INPUTKette 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_evasiveum mit iptablesdem www-security-assistant.bashim obigen Abschnitt erstellten zu sprechen .
Bearbeiten Sie /etc/apache2/mods-available/evasive.confauf 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 F5Verfahren, oben genannten, oder wir können einen Befehl verwenden ab, hping3etc.
Achtung: Seien Sie vorsichtig, da die iptablesin 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.confsorgfä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.confbeinhaltet /etc/modsecurity/modsecurity.confin Apache - Konfiguration. In diesem Stadium security2.confsoll 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.confund 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_securityfür weitere Details.
Damit die Dinge mehr Spaß machen, platzieren Sie das Skript issues.phpan 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.confdie 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-adminSeitenanforderungen 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:403und (2) redirect:'/issues.php'. Eigentlich brauchen wir die denyAktion nicht, weil sie von der redirectAktion ü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 ( giterforderlich).
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.pybietet 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 SecGeoLookupDBRichtlinie:
SecGeoLookupDB util/geo-location/GeoIP.dat
Wenden Sie die Apache-Konfiguration an. Bearbeiten Sie /etc/apache2/mods-available/security2.confauf 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_security2für PhpMyAdmin. Ändern Sie /etc/phpmyadmin/apache.confauf 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.confist 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 973301und 950907sind 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 execAktion 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_HOSTund $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.confSie 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 ...
@pmFromFileliest 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_URIund unserer Liste von Mustern gibt, wird die Regel angewendet. Die Datei könnte leer sein, aber Sie müssen sie erstellen ( touch).
Die logAktion erstellt Protokolleinträge in den Protokolldateien für diese Regel mit id:150.
drop, deny(mit status) und redirectAktionen 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.
chainDie 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.
@ipMatchFromFilewird 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 execAktion nicht angewendet. Die Datei könnte leer sein, aber Sie müssen sie erstellen ( touch).
execAktion 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.
setenvDiese 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.listund 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.listund 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.confund 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 SecGuardianLogwird 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-guardianTool wurde entwickelt, um sich gegen Denial-of-Service-Angriffe zu verteidigen. Es verwendet die, blacklist toolum 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.logist wahrscheinlich die beste Wahl, aber siehe auch die Abschnitte, über die wir sprechen SecGuardianLog.
Achten Sie darauf, dass SecAuditLogRelevantStatusin /etc/modsecurity/modsecurity.confkommentiert 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-guardianes 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-119zu 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 evasivevergessen Sie nicht, es später zu aktivieren) und starten Sie Apache neu. Dann taildas 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.bashes 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 86und 35.
Damit beide httpd-Skripte gleichzeitig funktionieren, bearbeiten modsecurity.confund leiten Sie sie SecGuardianLogan beide weiter.
Befolgen Sie zum Durchführen eines Tests die Tipps aus dem obigen Abschnitt.