SSHGuard ist ein Open-Source-Daemon, der Hosts vor Brute-Force-Angriffen schützt. Erreicht wird dies durch Überwachung und Aggregation von Systemprotokollen, Erkennung von Angriffen und Blockierung von Angreifern mithilfe eines der Linux-Firewall-Backends:iptables, FirewallD, pf und ipfw.
Ursprünglich entwickelt, um eine zusätzliche Schutzebene für den OpenSSH-Dienst bereitzustellen, schützt SSHGuard auch eine breite Palette von Diensten wie Vsftpd und Postfix. Es erkennt mehrere Protokollformate, einschließlich Syslog, Syslog-ng und rohe Protokolldateien.
SSHGuard ist Fail2ban ziemlich ähnlich, nur dass es in C geschrieben ist (Fail2ban ist in Python geschrieben), leichter ist und weniger Funktionen bietet.
In diesem Handbuch zeigen wir, wie Sie SSHGuard installieren und konfigurieren können, um SSH-Brute-Force-Angriffe auf Ihrem Linux-Server zu blockieren.
Schritt 1:SSHGuard unter Linux installieren
Wir beginnen mit der Installation von SSHGuard unter Linux.
Installieren Sie SSHGuard auf Debian/Ubuntu
Aktualisieren Sie zuerst die Paketlisten und installieren Sie dann SSHGuard aus den Standard-Repositories mit dem apt-Paketmanager.
$ sudo apt update
$ sudo apt install sshguard
Nach der Installation startet der SSHGuard-Dienst automatisch, und Sie können dies mit dem folgenden Befehl überprüfen:
$ sudo systemctl status sshguard
Installieren Sie SSHGuard auf Yum/RHEL-Systemen
Beginnen Sie bei RHEL-basierten Distributionen wie CentOS mit der Installation des EPEL-Repositorys, wie im folgenden Befehl angegeben.
$ sudo yum install epel-release
ODER
$ sudo dnf install epel-release
Wenn EPEL vorhanden ist, fahren Sie fort und installieren Sie SSHGuard mit dem dnf-Paketmanager.
$ sudo dnf install sshguard
Starten Sie nach der Installation SSHGuard und stellen Sie es so ein, dass es beim Systemstart oder Neustart gestartet wird.
$ sudo systemctl start sshguard
$ sudo systemctl enable sshguard
Stellen Sie sicher, dass SSHGuard wie erwartet ausgeführt wird.
$ sudo systemctl status sshguard
Schritt 2:SSHGuard-Konfiguration unter Linux
SSHGuard überwacht aktiv die Protokolldateien /var/log/auth.log, /var/log/secure systemd und syslog-ng auf fehlgeschlagene Anmeldeversuche.
Für jeden erfolglosen Anmeldeversuch wird der Remote-Host für eine begrenzte Zeit gesperrt, die standardmäßig auf 120 Sekunden eingestellt ist. Danach erhöht sich die Sperrzeit mit jedem weiteren fehlgeschlagenen Anmeldeversuch um den Faktor 1,5.
Die Zeit, zu der die angreifenden Hosts gesperrt werden, ist neben anderen Parametern in der Datei sshguard.conf angegeben. Sie können wie gezeigt mit dem vim-Editor auf die Konfigurationsdatei zugreifen.
$ sudo vim /etc/sshguard/sshguard.conf
Bei RHEL-basierten Distributionen befindet sich die Konfigurationsdatei im folgenden Pfad.
$ sudo vim /etc/sshguard.conf
Hier ist ein Beispiel der Konfigurationsdatei, wenn sie von Ubuntu / Debian aus betrachtet wird.
Konzentration auf die Hauptoptionen:
- Das BACKEND Direktive zeigt auf den vollständigen Pfad der ausführbaren Backend-Datei. In diesem Beispiel sehen wir, dass IPtables als Standard-Firewall-Backend festgelegt ist.
- Der SCHWELLENWERT Direktive blockiert Angreifer, wenn ihre Angriffspunktzahl den angegebenen Wert überschreitet.
- Die BLOCK_TIME Option ist die Anzahl der Sekunden, die ein Angreifer nach jedem aufeinanderfolgenden fehlgeschlagenen Anmeldeversuch blockiert wird. Standardmäßig ist diese nach dem ersten Versuch auf 120 gesetzt. Diese erhöht sich mit jedem weiteren fehlgeschlagenen Anmeldeversuch.
- Die DETECTION_TIME Option bezieht sich auf die Zeit in Sekunden, während der der Angreifer vom System registriert oder gespeichert wird, bevor sein Score zurückgesetzt wird.
- Die WHITELIST_file Option zeigen auf den vollständigen Pfad der Whitelist-Datei, die Hosts enthält, die nicht auf die Blacklist gesetzt werden sollen.
Schritt 3:Konfigurieren Sie SSHGuard, um SSH-Brute-Force-Angriffe zu blockieren
Um Brute-Force-Angriffe abzuwehren, müssen Sie die folgenden Firewalls so konfigurieren, dass sie mit sshguard funktionieren.
SSH-Angriffe mit UFW blockieren
Wenn Sie UFW auf Ihrem Ubuntu-/Debian-System installiert und aktiviert haben, ändern Sie die Datei /etc/ufw/before.rules.
$ sudo vim etc/ufw/before.rules
$ sudo vim etc/ufw/before.rules
Fügen Sie die folgenden Zeilen direkt nach dem Abschnitt „allow all on loopback“ hinzu.
# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
# hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard
Speichern Sie die Datei und starten Sie UFW neu.
$ sudo systemctl restart ufw
Versuchen Sie nun, sich von einem anderen System mit den falschen Anmeldeinformationen beim Server anzumelden, und beachten Sie, dass Sie nach dem ersten fehlgeschlagenen Anmeldeversuch 120 Sekunden lang gesperrt werden.
Sie können dies überprüfen, indem Sie die Protokolldatei auth.log überprüfen.
$ sudo tail -f /var/log/auth.log
Nach dem nächsten fehlgeschlagenen Protokollierungsversuch erhöht sich die Sperrzeit auf 240 Sekunden, dann auf 480 Sekunden, dann auf 960 Sekunden und so weiter.
SSH-Angriffe mit Firewalld blockieren
Wenn Sie firewalld ausführen, stellen Sie sicher, dass es eingerichtet und aktiviert ist. Führen Sie dann den folgenden Befehl aus, um sshguard in Ihrer bevorzugten Zone zu aktivieren.
$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"
Um die Änderungen zu übernehmen, laden Sie Firewalld und sshguard neu.
$ sudo firewall-cmd --reload
$ sudo systemctl restart sshguard
Überprüfen Sie dann die Regel wie folgt:
$ sudo firewall-cmd —-info-ipset=sshguard4
SSH-Angriffe mit Iptables blockieren
Wenn Sie immer noch Iptables verwenden, erstellen Sie zunächst eine neue Kettenregel für sshguard in Iptables, um unerwünschte Gäste zu blockieren.
# iptables -N sshguard
Aktualisieren Sie als Nächstes die INPUT-Kette, um den Datenverkehr an sshguard weiterzuleiten und den gesamten Datenverkehr von schändlichen Parteien zu blockieren.
# iptables -A INPUT -j sshguard
Um bestimmte Ports wie SSH, POP und IMAP vor Missbrauchern zu blockieren, führen Sie den folgenden Befehl aus:
# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard
Speichern Sie abschließend die Regel, damit die Änderungen wirksam werden.
# iptables-save > /etc/iptables/iptables.rules
Schritt 4:SSH-blockierte Hosts auf die Whitelist setzen
Um einen blockierten Host auf die Whitelist zu setzen, geben Sie einfach seinen Hostnamen oder seine IP-Adresse in der Whitelist-Datei an, die sich in:
befindet/etc/sshguard/whitelist - Ubuntu/Debian
/etc/sshguard.whitelist - RHEL-based distros
Stellen Sie anschließend sicher, dass Sie den sshguard-Daemon und das Firewall-Backend neu starten, damit die Änderungen wirksam werden.
In diesem Leitfaden haben wir gezeigt, wie Sie SSH-Bruteforce-Angriffe mit SSHGuard auf Linux-Systemen blockieren können.
Weitere Anleitungen finden Sie auf unserer Homepage.