Ich verwende fail2ban auf allen Servern mit öffentlich sichtbaren Diensten und frage mich:
- Gibt es eine einfache Möglichkeit, gesperrte IP-Adressen zwischen von mir kontrollierten Hosts auszutauschen?
- Gibt es einen Dienst, der diese Daten sammelt und veröffentlicht?
Seit dem ersten Tag der Einrichtung dieses Servers habe ich unzählige Anmeldeversuche erhalten.
Antworten:
Ich habe einmal ein System zur Zentralisierung von fail2ban-Daten auf dieser Site gesehen und eine modifizierte Version erstellt. Die Datenbank ist die gleiche, aber ich habe einige Skripte geändert und erstellt.
Mein System besteht aus 4 Komponenten:
fail2ban Datenbank
Es ist eine MySQL-Datenbank, die nur eine Tabelle enthält
erp_core_fail2ban
:fail2ban.php
Jedes Mal, wenn ein Host gesperrt wird, wird die Datenbank gefüllt:
cron2ban
Sie setzen dies auf Crontab, jede Minute ausgeführt. Die zuletzt hinzugefügten Hosts werden abgerufen und gesperrt.
phpconfig
Diese Datei wird in / etc / fail2ban abgelegt und enthält Datenbankkonfiguration und Gefängnisauswahl.
Erstellen Sie diese Dateien und ändern Sie die Konfiguration von fail2ban:
Nach der Zeile, in der
actionban = .....
eine neue Zeile eingefügt wurde, um das PHP-Skript aufzurufen:/root/fail2ban.php <name> <protocol> <port> <ip>
Wenn Sie diese Struktur auf allen Ihren Servern verwenden, wird sichergestellt, dass jedes Mal, wenn ein Host auf einem Server gesperrt wird, alle anderen Server dies ebenfalls sperren.
quelle
Deshalb habe ich eine Reihe von Nachforschungen angestellt, nachdem ich beobachtet hatte, wie dieselbe IP-Adresse nacheinander auf meinen Cluster von Webservern auftrat. Da ich AWS benutze, dachte ich, dass es einen einfachen Weg geben könnte und dass er in meinen ersten zwei Tagen des Testens von 5 Servern wunderbar funktioniert.
Als erstes empfehle ich, SELinux vorübergehend zu deaktivieren. Wir werden uns am Ende darum kümmern. Ich bin kein SELinux-Experte, aber was ich getan habe, funktioniert bisher.
Die Hauptanforderung ist eine gemeinsam genutzte Dateiquelle. Ich verwende AWS EFS. Nachdem das neue Laufwerk bereitgestellt und bereitgestellt wurde, habe ich das Protokollziel in /etc/fail2ban/fail2ban.conf in einen Unterordner im EFS-Laufwerk geändert.
Dann habe ich einen einfachen Filter geschrieben und in /etc/fail2ban/filter.d/fail2ban-log.conf platziert
Filter zu /etc/fail2ban/jail.local hinzugefügt
Dann startete fail2ban neu
So weit, ist es gut! Nein, der schmerzhafte Teil ist SELinux. Nachdem ich fail2ban eine Weile laufen ließ, führte ich diesen Befehl aus, der fail2ban durch die Filter lassen würde.
Audit2allow fordert Sie auf, diesen Befehl auszuführen
Ich überprüfe immer noch meine SELinux-Protokolle hier und da, um festzustellen, ob weitere Ablehnungen vorliegen. Wenn jemand einen Tipp hat, wie man dieses klare SELinux mit einer anderen Methode erreicht, wäre das großartig.
Zu diesem Zeitpunkt gab es noch Fehler beim Neustart von fail2ban. Bei der Verwendung von action = action_mwl in jail.local ist ein Fehler aufgetreten. Nach ein bisschen googeln habe ich das gefunden, was bisher funktioniert. Nach dem, was ich gelesen habe, ist es wegen der Zeilenumbrüche in der logpath-Direktive, die auf mehrere Dateien verweisen. Ich habe es mit Kommas, Leerzeichen usw. versucht, sonst hat nichts mit action_mwl funktioniert.
Vergessen Sie nicht, SELinux wieder einzuschalten!
quelle
Ich habe das gerade implementiert und bisher scheint es gut zu funktionieren. Allerdings musste ich einige PHP-Dateien aktualisieren, da die Skripte in der ursprünglichen Antwort veraltete Funktionen verwenden.
Hier sind die aktualisierten Skripte
phpconfig.php
fail2ban.php
cron2ban.php
Außerdem muss die Aktion fail2ban.php an jeder Stelle so stark eingerückt sein wie die darüber stehende Zeile. Beispielsweise:
Sonst startet fail2ban nicht. Ich hoffe, dies hilft jedem, der versucht, dies bereitzustellen.
quelle
Eine Alternative zu
fail2ban
ist DenyHosts , die mit einer Synchronisierungsfunktion kommt. Die Installation ist ziemlich ähnlichfail2ban
finden Cyberciti Tutorial für weitere Details .Das Problem ist, dass der Synchronisationsdienst zentralisiert ist und der Quellcode der Serverseite nicht verfügbar zu sein scheint. Daher können Sie Ihren eigenen DenyHosts-Dienst nicht einfach starten und müssen sich auf einen Drittanbieter verlassen (was für einige möglicherweise in Ordnung ist) Anwendungsfälle).
quelle
Ja und ja. Beides ist möglich.
Sie müssen einen geeigneten Mechanismus finden, um die Liste der IPs gemeinsam zu nutzen. Wenn Sie beispielsweise AWS verwenden, können Sie s3 nutzen. Sie können rsync zwischen Linux-Hosts oder eine allen Hosts gemeinsame Datenbank verwenden. Sie könnten einen Dienst mit Ihrer bevorzugten Programmiersprache ausstatten, der eine erholsame API bietet, die Sie selbst auswählen können.
Wenn Sie die Liste öffentlich teilen, können Sie eine Website erstellen und eine einfache Textdatei hosten. Einige bieten bereits solche Listen an (keine mir bekannten Crowd-Sourcing-Listen). Das Erstellen einer eigenen Site / eines eigenen Dienstes würde den Rahmen einer Antwort sprengen, sollte jedoch nicht besonders schwierig sein.
quelle
Eine ziemlich manuelle Einrichtung wäre, die Konfiguration zu ändern, die
iptables
zum Aktualisieren von Regeln aufruft , sodass ein eigenes Skript aufgerufen wird, das eine Liste von Hosts durchläuft (aus einer Datei gelesen?) Und dieiptables
Aufrufe jeweils über SSH durchführt. Sie benötigen eine schlüsselbasierte Authentifizierung zwischen allen dafür konfigurierten Hosts. Admin-Automatisierungstools wie Puppet können die Einrichtung und Wartung vereinfachen. Dies wäre nicht sonderlich effizient, aber wenn Sie nicht eine große Menge an Sondierungsdaten sehen (und / oder nicht eine große Anzahl von Hosts haben), bin ich sicher, dass es gut genug wäre. Wenn Sie nur wenige Hosts haben, müssen Sie nicht einmal eine Datei durchlaufen: Konfigurieren Sie die einzelnen Hosts so, dass die anderen der Reihe nach aufgerufen werden. Der Aufwand für die Skripterstellung ist minimal.Es gibt zweifellos viele Möglichkeiten. Lassen Sie die obigen Skripte die Daten in eine Datenbank ablegen und die Clients daraus lesen, nach neuen Regeln suchen und diese ausführen, sobald sie eingehen. Das einfache "Ausführen einer Regel, wie Sie sie sehen" ist nicht perfekt, wenn viele vorhanden sind Hosts übermitteln Informationen, zum Beispiel in diesem Fall:
Dies sollte jedoch kein bedeutendes Problem sein. Wenn Sie mit der Datenbank ein bisschen schlauer werden, können Sie mehrere Übermittlungen sauberer verwalten, wenn Sie sich dafür entschieden haben, dass sich die Mühe lohnt.
Wenn Sie das als öffentlichen Dienst betreiben, können Sie sich auf eine Welt voller Administrationsprobleme einlassen:
quelle