So blockieren Sie unerwünschte SSH-Anmeldeversuche mit PyFilter unter Ubuntu 16.04

Der Autor hatCode.org ausgewählt, um im Rahmen desWrite for DOnations-Programms eine Spende in Höhe von 200 USD zu erhalten.

Einführung

Secure Shell (SSH) ist ein kryptografisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten. Es wird normalerweise zur Fernsteuerung eines Computersystems oder zum Übertragen von Dateien verwendet. Wenn SSH dem öffentlichen Internet ausgesetzt ist, wird dies zu einem Sicherheitsrisiko. Beispielsweise finden Sie Bots, die versuchen, Ihr Passwort mit Brute-Force-Methoden zu erraten.

PyFilter zielt darauf ab, alle unzulässigen Anmeldeanforderungen an Ihren Server herauszufiltern und zu blockieren, wenn zu viele gesendet werden. Es funktioniert, indem Protokolldateien gelesen und überprüft werden, ob eine fehlgeschlagene Anforderung innerhalb einer vom Benutzer konfigurierbaren Zeitspanne von derselben IP-Adresse stammt. Anschließend werden der Firewall Regeln hinzugefügt, wenn zu viele fehlgeschlagene Versuche erfasst werden. Dadurch wird die Verbindung zu Ihrem Server verweigert.

In diesem Lernprogramm installieren und konfigurieren Sie PyFilter, um SSH-Anforderungen zu blockieren. Anschließend installieren Sie PyFilter als Dienst und konfigurieren optional die serverübergreifende Sperrsynchronisierung. Diese Funktion ermöglicht es mehreren Servern, die Liste der gesperrten IP-Adressen gemeinsam zu nutzen, und ermöglicht PyFilter, Standortdaten zu einer IP-Adresse aufzuzeichnen. Schließlich erfahren Sie, wie Sie die Sperrung von IP-Adressen aufheben.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

  • Ein Ubuntu 16.04-Server, der von folgendenthe Ubuntu 16.04 initial server setup guide eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.

  • Python 3, das unter Ubuntu 16.04 bereits standardmäßig installiert ist.

  • PIP installiert mitsudo apt-get install python3-pip.

  • (Optional) Wird erneut installiert, indemHow to Install Redis on Ubuntu 16.04 befolgt wird, wenn Sie die serverübergreifende Synchronisierungsfunktion von PyFilter inStep 4 konfigurieren möchten.

[[Schritt 1 - Herunterladen und Konfigurieren des Pyfilters]] == Schritt 1 - Herunterladen und Konfigurieren von PyFilter

Wir werden PyFilter herunterladen, indem wir sein Repository von Github klonen. Wechseln Sie in Ihr Home-Verzeichnis und klonen Sie das Repository:

cd ~
git clone https://github.com/Jason2605/PyFilter.git

Dadurch wird ein Verzeichnis mit dem NamenPyFilter erstellt. Verschieben Sie diesen Ordner in den Ordner/usr/local:

sudo mv PyFilter /usr/local/PyFilter

Wechseln Sie dann in das Verzeichnis/usr/local/PyFilter:

cd /usr/local/PyFilter

Als nächstes müssen wir eine Konfigurationsdatei erstellen. PyFilter wird mit einer Standardkonfigurationsdatei geliefert, die sich beiConfig/config.default.json befindet. Wir kopieren dies und bearbeiten die kopierte Version, anstatt die Standarddatei direkt zu bearbeiten. Auf diese Weise haben Sie die Standardkonfigurationsdatei, mit der verglichen werden kann, wenn etwas schief gehen sollte.

Kopieren Sie die Standardkonfigurationsdatei:

sudo cp Config/config.default.json Config/config.json

Mit dem Befehlless können Sie den Inhalt der Konfigurationsdatei anzeigen:

less Config/config.json

Die Standardeinstellungen erfordern, dass die Anforderungen innerhalb von 5 Sekunden nach der letzten Anforderung vorliegen. Dies muss fünfmal geschehen. Sie sind gut genug, um loszulegen. Lassen Sie uns PyFilter ausführen und sicherstellen, dass alles funktioniert.

[[Schritt-2 -—- Ausführen von Pyfilter]] == Schritt 2 - Ausführen von PyFilter

Der PyFilter-Download enthält ein Skript namensrun.sh, mit dem Sie PyFilter starten sollten.

Ändern Sie zunächst die Berechtigungen für das Skript, um es ausführbar zu machen.

sudo chmod +x run.sh

Nachdem die Berechtigungen erteilt wurden, führen Sie das Skript aus, um PyFilter zu starten:

./run.sh

PyFilter überwacht nun die Protokolle und zeigt die Ausgabe an, sobald Ereignisse eintreten:

OutputNo file to check within rule: Mysql
No file to check within rule: Apache
No file to check within rule: Nginx
Checking Ssh logs

Standardmäßig verbietet PyFilter IPs, die fünf oder mehr fehlgeschlagene Anforderungen senden, die innerhalb von 5 Sekunden nach der vorherigen fehlgeschlagenen Anforderung auftreten. Sie können dies in der PyFilter-Konfigurationsdatei ändern.

Diese Ergebnisse werden auch im Verzeichnis/usr/local/PyFilter/Logprotokolliert.

Wenn eine IP die Grenzwerte erreicht hat, die ein Verbot rechtfertigen, wird eine Ausgabe ähnlich der folgenden angezeigt:

Output2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name.

[.note] #Note: Wenn Sie sich versehentlich aus Ihrem Droplet ausgeschlossen haben, weil Sie sich selbst gesperrt haben, können Sie dem TutorialHow To Use the DigitalOcean Console to Access your Droplet folgen, um wieder einzusteigen. Befolgen Sie dann die Schritte inStep 6, um die gesperrte IP zu entfernen.
#

Drücken SieCTRL+C, um PyFilter zu schließen.

Jetzt installieren wir PyFilter als Dienst, damit es automatisch ausgeführt wird.

[[Schritt-3 - Erstellen eines Dienstes für Pyfilter]] == Schritt 3 - Erstellen eines Dienstes für PyFilter

Nachdem Sie nun wissen, dass PyFilter funktioniert, konfigurieren Sie es so, dass es als Dienst ausgeführt wird, damit es bei jedem Neustart des Servers gestartet wird.

Im VerzeichnisPyFilter befindet sich ein Skript namensinstall.sh, das einen Dienst für PyFilter erstellt und dessen Ausführung beim Systemstart ermöglicht.

Ändern Sie das Skript, damit Sie es ausführen können:

sudo chmod +x install.sh

Dann starte das Skript:

./install.sh

Diese Ausgabe zeigt an, dass die Installation erfolgreich war:

OutputService created and enabled, check the status of it by using "sudo systemctl status PyFilter"

Tun wir also genau das, um sicherzustellen, dass alles richtig läuft:

sudo systemctl status PyFilter

Diese Ausgabe zeigt, dass der Dienstactive ist:

Output● PyFilter.service - PyFilter
   Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled)
   Active: <^>active^> (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago
 Main PID: 8383 (bash)
   CGroup: /system.slice/PyFilter.service
           ├─8383 bash /usr/local/PyFilter/run.sh
           ├─8384 sudo python3 run.py
           └─8387 python3 run.py

Wenn Sie einen Fehler sehen, überprüfen Sie die Installationsschritte erneut.

Als Nächstes sehen wir uns an, wie PyFilter so konfiguriert wird, dass gesperrte IP-Adressen für andere Server freigegeben werden.

[[Schritt 4 - Konfigurieren des Pyfilters für die serverübergreifende Ban-Synchronisierung optional]] == Schritt 4 - Konfigurieren von PyFilter für die serverübergreifende Ban-Synchronisierung (optional)

Durch die serverübergreifende Sperrsynchronisierung kann die gesperrte IP-Adresse mit allen anderen Servern synchronisiert werden, die PyFilter zum Schutz verwenden, und diese Adresse gesperrt werden, auch wenn die zu sperrenden Voraussetzungen nicht erfüllt sind. Dies bedeutet, dass es potenziellen Bots, die auf Ihre anderen Systeme abzielen, einen Schritt voraus sein kann, da die IP bereits gesperrt ist.

Wie in den Voraussetzungen angegeben, muss Redis installiert und konfiguriert sein.

Sie benötigen außerdem das Python-Modulredis, das Sie mitpip installieren können:

pip3 install redis

Bearbeiten Sie dann Ihre Konfigurationsdatei, um Redis anstelle von SQLite zu verwenden. Öffnen Sie die DateiConfig/config.jsonin Ihrem Texteditor:

nano Config/config.json

Suchen Sie die folgende Zeile:

Config/config.json

"database": "sqlite"

Ändern Siesqlite inredis:

Config/config.json

"database": "redis"

Ändern Sie als Nächstes die Redis-Verbindungsinformationen. Suchen Sie diesen Abschnitt der Datei:

Config/config.json

  "redis": {
    "host": "127.0.0.1",
    "password": null,
    "database": 0,
    "sync_bans": {
      "active": true,
      "name": "your_hostname",
      "check_time": 600
    }
  },

Ändern Sie diesen Abschnitt so, dass er die Verbindungsdetails für Ihren Redis-Server enthält. Ändern Sie dann im Abschnittsync_bans diename in Ihren Hostnamen. Dieser Name muss für jedes einzelne System, auf dem PyFilter mit demselben Redis-Server ausgeführt wird, eindeutig sein, damit die serverübergreifende Sperrsynchronisierung ordnungsgemäß funktioniert.

Speichern Sie die Datei und beenden Sie den Editor. Starten Sie anschließend PyFilter neu, um die folgenden Änderungen zu übernehmen:

sudo systemctl restart PyFilter

PyFilter ist jetzt installiert und läuft.

[[Schritt-5 - Konfigurieren des Pyfilters zum Sammeln von Standortdaten über IP-Adressen optional]] == Schritt 5 - Konfigurieren von PyFilter zum Sammeln von Standortdaten zu IP-Adressen (optional)

PyFilter kann Standortdaten über die gesperrte IP abrufen, um statistische Informationen darüber bereitzustellen, woher die meisten Angriffe stammen. Dieses optionale Modul hängt diese Informationen an die PyFilter-Protokolle an.

Um diese Funktion nutzen zu können, benötigen Sie zunächst das Python-Modulgeoip2, das Sie mitpip installieren können:

pip3 install geoip2

Nachdem Sie dieses Modul installiert haben, starten Sie PyFilter neu, damit es das neue Modul erkennt:

sudo systemctl restart PyFilter

Wenn Sie nun eine gesperrte IP-Adresse sehen, werden zusätzliche Informationen zur IP angezeigt:

Output2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name. The IP was from United Kingdom.

PyFilter protokolliert nun erfolgreich, aus welchem ​​Land die Anfragen stammen.

Schauen wir uns zum Schluss an, wie Sie die Sperre einer Adresse aufheben.

[[Schritt 6 - Aufheben des Verbots von IP-Adressen]] == Schritt 6 - Aufheben des Verbots von IP-Adressen

PyFilter ist ein reines Mittel zum Sperren von IP-Adressen durch Erstellen von iptables-Regeln. Wenn eine IP gesperrt wird, werden die Firewall-Regeln aktualisiert und anschließend Snapshots der Regeln in den Dateien/usr/local/PyFilter/Config/blacklist.v4 und/usr/local/PyFilter/Config/blacklist.v6 gespeichert.

Hier ist ein Beispiel für mehrere gesperrte IPv4-Adressen in/usr/local/PyFilter/Config/blacklist.v4:

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]
-A INPUT -s 203.0.113.13/32 -j DROP
-A INPUT -s 203.0.113.14/32 -j DROP
-A INPUT -s 203.0.113.15/32 -j DROP
COMMIT
# Completed on Thu Mar 22 19:53:04 2018

Öffnen Sie die zugehörige Blacklist-Datei in Ihrem Texteditor, um die Sperrung dieser IP-Adresse aufzuheben:

sudo nano /usr/local/PyFilter/Config/blacklist.v4

Entfernen Sie die zugehörigen iptables-Regeln aus der Datei. In diesem Fall haben wir203.0.113.13 aus der Datei entfernt:

/usr/local/PyFilter/Config/blacklist.v4

# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018
*filter
:INPUT ACCEPT [217:30580]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [249:30796]
-A INPUT -s 203.0.113.14/32 -j DROP
-A INPUT -s 203.0.113.15/32 -j DROP
COMMIT
# Completed on Thu Mar 22 19:53:04 2018

Speichern Sie dann die Datei und schließen Sie den Editor. Starten Sie PyFilter mitsudo systemctl restart PyFilter neu und PyFilter aktualisiert Ihre Firewall-Regeln mithilfe dieser Datei.

Weitere Informationen zum Verwalten von Regeln mit iptables finden Sie unterHow To List and Delete Iptables Firewall Rules.

Sie können PyFilter auch anweisen, bestimmte IP-Adressen zu ignorieren, indem Sie sie dem Whitelist-Abschnitt in der/usr/local/PyFilter/Config/config.json-Datei hinzufügen.

Fazit

Sie haben jetzt PyFilter installiert und überwachen Ihre SSH-Verbindungen.

Um mehr über die einzelnen Abschnitte der Konfigurationsdatei zu erfahren und die Überwachung für andere Dienste wie MySQL und Apache zu konfigurieren, überprüfen Sie diePyFilter site..