Ich lösche den gesamten Datenverkehr an den Ports mit Ausnahme von 80 für meinen Webserver.
Ich habe einige Regeln wie diese für iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Jemand, der mehr hat, kann teilen? Ich weiß immer, dass die schlechten Hacker immer noch aktualisieren, aber einige von ihnen beginnen immer mit demselben Code. Ich muss die Verbindung aufgrund einiger Kriterien trennen. Hier sind einige Apache-Protokolle (ich entferne ips, aber jeder Angriff kommt vom selben):
Angriff 1: Ich weiß nicht, was ich versuchen soll, aber mache es 50 Mal von derselben IP
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Angriff 2: Versuchen Sie, nur Informationen über den Server abzurufen.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Angriff 3: Sie versuchen, Zugriff auf eine Sicherheitsanfälligkeit auf der Anmeldeseite zu erhalten
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Angriff 4: Dieser Versuch, auf erste Anfrage auf ein CGI zuzugreifen (siehe meine erste iptables-Regel, um dies zu löschen).
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Ich bin sehr neu mit Server diese 4 Angriffe sind nur von den letzten 12 Stunden ... Haben Tausende pro Woche.
Antworten:
Hier finden Sie einige Möglichkeiten, wie Sie die Apache2-Sicherheit in Ubuntu 16.04 erhöhen können .
Inhaltsverzeichnis:
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: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 Befehlat
.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 :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
: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 :Abhängigkeiten
Das Skript verwendet
iptables-save.sh
und dieiptables
KetteGUARDIAN
, 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
undiptables-DROP-CLEAR.list
.Das Skript benötigt eine minimale Konfiguration zum Senden von E-Mails:
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 Siewww-security-assistant.bash
es herunter und machen Sie es ausführbar:Machen Sie
www-security-assistant.bash
als benutzerdefinierten Befehl zur Verfügung:Erteilen Sie die Berechtigung zum
www-data
Ausführenwww-security-assistant.bash
ohne Kennwort übersudo
. Verwenden Sie den folgenden Befehl, um eine neue Datei mit einer zusätzlichensudoers
Regel sicher zu erstellen und zu bearbeiten :Fügen Sie der Datei die folgende Zeile hinzu - speichern Sie die Datei und beenden Sie sie:
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:Überprüfen Sie dann Ihre E-Mails, geben Sie ein
iptables -L GUARDIAN -n
, überprüfen Sie die Dateienwww-security-assistant.history
undwww-security-assistant.mail
. Führen Sie den obigen Befehl fünfmal aus und überprüfen Sie die Dateieniptables-DROP.list
undiptables-CURRENT.conf
.Überprüfen Sie, ob der manuelle MODUS ordnungsgemäß funktioniert. Fügen Sie Ihren lokalen Host zur weißen Liste hinzu:
Überprüfen Sie dann die Datei
iptables-ACCEPT.list
.Iptables - Grundkonfiguration - Speichern und Wiederherstellen
Grundlegende Einstellung
Bitte lesen Sie dieses Handbuch, bevor Sie die folgenden Regeln hinzufügen.
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.)Neue Kette erstellen
Erstellen Sie eine neue Kette,
GUARDIAN
rufen Sie sie auf und fügen Sie sie als Nummer 3 in dieINPUT
Kette ein:Untersuchung
Starten Sie das System neu und überprüfen Sie die Konfiguration. Bitte verwenden Sie
sudo systemctl reboot
(verwenden Sie nicht die Force-Optionreboot -f
). Wenn das System wieder online ist, können wir überprüfen, ob die neu erstellte Kette vorhanden ist, indem:ModEvasive für Apache2
Installation
Installieren und aktivieren Sie das Modul:
Erstellen Sie ein Protokollverzeichnis und machen Sie es zugänglich für
www-data
:Passen Sie die Grundkonfiguration an - kommentieren Sie bestimmte Anweisungen in der Konfigurationsdatei aus und bearbeiten Sie sie:
Starten Sie Apache neu :
sudo systemctl restart apache2.service
.Untersuchung
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 mitiptables
demwww-security-assistant.bash
im obigen Abschnitt erstellten zu sprechen .Bearbeiten Sie
/etc/apache2/mods-available/evasive.conf
auf diese Weise:Erstellen Sie eine Protokolldatei und starten Sie Apache neu:
Um diese Konfiguration zu testen wir DDoS - Attacke über das simulieren können
F5
Verfahren, oben genannten, oder wir können einen Befehl verwendenab
,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
Installation
Installieren und aktivieren Sie das Modul:
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:Die Datei
/etc/apache2/mods-enabled/security2.conf
beinhaltet/etc/modsecurity/modsecurity.conf
in Apache - Konfiguration. In diesem Stadiumsecurity2.conf
soll so aussehen:Protokollverzeichnis erstellen:
Protokollrotation einrichten. Erstellen Sie zuerst eine Konfigurationsdatei:
Bearbeiten Sie dann die neue Datei folgendermaßen:
Starten Sie Apache neu.
Untersuchung
Erstellen Sie eine zusätzliche Konfigurationsdatei in
/etc/modsecurity
, rufen Sie sie beispielsweise aufz-customrules.conf
und fügen Sie die folgende Regel als Inhalt hinzu:Starten Sie den Server neu :
sudo systemctl restart apache2.service
. Öffnen Sie Ihren Browser und geben Sie einhttps://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 IhremDocumentRoot
(hier gehe ich davon aus, dass dieser Ort ist/var/www/html
):Ändern Sie dann die obige Regel folgendermaßen:
Starten Sie Apache neu, öffnen Sie Ihren Browser und geben Sie ein
https://example.com/?abc=../
;-) Die Idee stammt aus dem Skript der SEBotLovin.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 Folgendeschain
):Hier haben wir zwei störende Aktionen: (1)
deny, status:403
und (2)redirect:'/issues.php'
. Eigentlich brauchen wir diedeny
Aktion nicht, weil sie von derredirect
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
: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 - verwendensudo crontab -e
:Konfigurationsdateien erstellen:
Lesen und bearbeiten Sie diese Dateien sorgfältig! Kommentar zumindest
SecGeoLookupDB
Richtlinie:Wenden Sie die Apache-Konfiguration an. Bearbeiten Sie
/etc/apache2/mods-available/security2.conf
auf diese Weise: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:
Deaktivieren Sie
mod_security2
für PhpMyAdmin. Ändern Sie/etc/phpmyadmin/apache.conf
auf diese Weise:Deaktivieren Sie bestimmte Regeln für ein bestimmtes Verzeichnis:
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:
Whitelist eine IP-Adresse, damit sie ModSecurity passieren kann:
Regeln innerhalb der Verzeichnisübereinstimmung deaktivieren:
Aktualisieren Sie die Aktion der Regel anhand ihrer ID innerhalb der Standortübereinstimmung:
In den obigen Beispielen gehen wir davon aus, dass
973301
und950907
sind Regel - IDs, die die normale Arbeit unserer Web - Anwendungen behindern. Wir können Regeln wie diese durch eine Analyse von findenmodsec_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 dieexec
Aktion von ModSecurity eine zu einfache und eingeschränkte Syntax aufweist.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 aufgerufenwww-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
- 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 Dateimodsecurity-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 zwischenREQUEST_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 mitid:150
.drop
,deny
(mitstatus
) undredirect
Aktionen gehören zur störenden Gruppe von Aktionen, sie müssen am Anfang der Regel stehenchain
(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 hatid
.REMOTE_ADDR
enthält die IP-Adresse der Anfrage.@ipMatchFromFile
wird die Dateimodsecurity-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 dieexec
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 beispielsweisesetenv: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 einhttps://exemple.com/joomla
. Sie sollten über Iptables umgeleitet und blockiert werden. Löschen Sie die Datensätzesudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, fügen Sie Ihre IP hinzumodsecurity-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: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:
SQL Injection-Angriff simulieren:
ModSecurity- und Apache-Protokolldateien
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.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 sprechenSecGuardianLog
.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.Derzeit ist Fail2Ban in diesem Projekt in keiner Weise implementiert.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Installation und Einrichtung unter den aktuellen Umständen
Laden Sie
httpd-guardian
es herunter und machen Sie es ausführbar: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: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. Danntail
das Exec-Protokoll:Führen Sie von einer anderen Instanz aus einen DoS-Angriff aus, indem Sie ihn beispielsweise folgendermaßen verwenden
ab
: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:Übernehmen Sie die folgende Änderung in Apaches Konfiguration (
/etc/modsecurity/modsecurity.conf
) und starten Sie sie neu:Das Skript ruft WSAS auf, wenn der Schwellenwert erreicht ist - Zeile lesen
86
und35
.Damit beide
httpd-
Skripte gleichzeitig funktionieren, bearbeitenmodsecurity.conf
und leiten Sie sieSecGuardianLog
an beide weiter.Befolgen Sie zum Durchführen eines Tests die Tipps aus dem obigen Abschnitt.
quelle
Mir ist klar, dass pa4080 eine detaillierte und wahrscheinlich sehr hilfreiche Antwort gegeben hat, um sich selbst darum zu kümmern. Es kann sich zwar gut anfühlen, sich selbst um Probleme zu kümmern, dies kann jedoch auch viel Zeit in Anspruch nehmen .
quelle