sshguard unter Debian installieren und nutzen
Ähnlich wie fail2ban ist sshguard ein Programm das im Hintergrund die wichtigsten System-Logs mitliest und fehlgeschlagene Anmeldeversuche erkennt. Bei wiederholten falschen Anmeldungen sperr sshguard den Rechner mit dem fehlgeschlagenen Anmeldeversuch (z.B. via ssh). So werden mit sshguard etwa die Risiken einer Brute-Force Attacke via secure shell auf ein Minimum reduziert.
In diesem Howto erkläre ich, wie man sshguard unter Debian 10 bzw. Debian 11 installiert und konfiguriert. Lost geht’s:
Inhalt
Schritt 1 –sshguard installieren
Unter Debian 10 wird sshguard wie jedes andere Programm via „apt install“ installiert
apt -y install sshguard
Unter Debian 11 ist das Programm sshguard leider nicht mehr in den Standard-Repositories enthalten. Wir müssen dazu das experimentelle „SID“ Repository anlegen. Dazu erstellen wir temporär die Datei /etc/apt/sources.list.d/debian-sid.list mit dem passenden Repository und installieren danach sshguard. Die Datei debian-sid.list löschen wir anschließend wieder, da wir sonst alle möglichen Software-Pakete aktualisiert bekommen.
echo 'deb-src http://ftp.de.debian.org/debian/ sid main non-free contrib deb http://ftp.de.debian.org/debian/ sid main non-free contrib' > /etc/apt/sources.list.d/debian-sid.list apt update apt -y install sshguard rm /etc/apt/sources.list.d/debian-sid.list
Schritt 2 – sshguard anpassen
Damit läuft sshguard zwar schon. Wir sollten es aber noch an das jeweilige Server-System und die installierten Programme anpassen. Etwa Secure Shell, ftp (?) oder postfix. Dazu bauen wir zumindest die passenden Log-Files in die Datei /etc/sshguard/sshguard.conf ein:
Für ein Standard-Debian mit ssh und postfix
FILES="/var/log/auth.log /var/log/mail.log"
Für ein Debian Server mit ssh, postfix und einem ftp daemon mit proftpd:
FILES="/var/log/auth.log /var/log/mail.log /var/log/proftpd/proftpd.log"
Schritt 3 – sshguard prüfen
Anschließend starten wir sshguard neu:
systemctl restart sshguard
Prüfen mit:
systemctl status sshguard
Im Output erkennen wir ob schon jemand ins Netz gegangen ist:
root@host:~# systemctl status sshguard ● sshguard.service - SSHGuard Loaded: loaded (/lib/systemd/system/sshguard.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-01-06 13:54:07 CET; 1h 12min ago Docs: man:sshguard(8) Process: 81637 ExecStartPre=/usr/sbin/nft add table ip sshguard (code=exited, status=0/SUCCESS) Process: 81638 ExecStartPre=/usr/sbin/nft add table ip6 sshguard (code=exited, status=0/SUCCESS) Main PID: 81639 (sshguard) Tasks: 12 (limit: 4675) Memory: 3.1M CPU: 210ms CGroup: /system.slice/sshguard.service ├─81639 /bin/sh /usr/sbin/sshguard ├─81640 /bin/sh /usr/sbin/sshguard ├─81641 /bin/sh /usr/sbin/sshguard ├─81642 /usr/libexec/sshguard/sshg-blocker -a 30 -p 120 -s 1800 -w /etc/sshguard/whitelist ├─81643 /bin/sh /usr/sbin/sshguard ├─81644 /usr/libexec/sshguard/sshg-parser ├─81645 /bin/sh /usr/libexec/sshguard/sshg-fw-nft-sets ├─81646 journalctl -afb -p info -n1 -t sshd -o cat ├─81647 grep --line-buffered ^ ├─81648 tail -F -n 0 /var/log/auth.log /var/log/mail.log /var/log/proftpd/proftpd.log └─81649 grep --line-buffered ^ Jan 06 15:00:13 radius sshguard[81642]: 222.187.232.39: unblocking after 483 secs Jan 06 15:01:43 radius sshguard[81642]: Attack from "221.181.185.143" on service SSH with danger 10. Jan 06 15:01:43 radius sshguard[81642]: Attack from "221.181.185.143" on service SSH with danger 10. Jan 06 15:01:47 radius sshguard[81642]: Attack from "221.181.185.143" on service SSH with danger 10. Jan 06 15:01:47 radius sshguard[81642]: Blocking "221.181.185.143/32" for 120 secs (3 attacks in 4 secs, after 1 abuses over 4 secs.) Jan 06 15:04:18 radius sshguard[81642]: 221.181.185.143: unblocking after 151 secs Jan 06 15:05:18 radius sshguard[81642]: Attack from "222.187.232.39" on service SSH with danger 10. Jan 06 15:05:18 radius sshguard[81642]: Attack from "222.187.232.39" on service SSH with danger 10. Jan 06 15:05:22 radius sshguard[81642]: Attack from "222.187.232.39" on service SSH with danger 10. Jan 06 15:05:22 radius sshguard[81642]: Blocking "222.187.232.39/32" for 960 secs (3 attacks in 4 secs, after 4 abuses over 3333 secs.)
… und siehe da: Der erste ungebetene Besucher wurde schon gesperrt. Sshguard funktoniert also und tut was es soll. Wir wollen es aber genau wissen und unser frusch installiertes Debian System etwas „stressen“.
Schritt 4 – den Debian Server bzw. sshguard testen
Um die Funktion von sshguard zu prüfen, verbinden wir uns per ssh auf einen zweiten Host via ssh. Das kann ein anderes Debian Server System sein oder ein Host mit Centos oder RHEL.
Wir installieren zuerst das Programm „sshpass“ (Auf Centos oder RHEL: yum -y install sshpass)
apt install sshpass -y
Nun erstellen wir den Ordner /root/scripts und kopieren dorthin ein Skript, dass 10 willkürliche Versuche des ssh Zugriffs auf den Host „host.domain.tld“ unternimmt. Ersetzen Sie „host.domain.tld“ mit ihrem neuen Debian System auf dem wir sshguard testen wollen.
mkdir /root/scripts/ echo '#!/bin/bash for i in {1..10}; do sshpass -p $RANDOM ssh -o StrictHostKeyChecking=no [email protected] done' > /root/scripts/sshpass.sh chmod +x /root/scripts/sshpass.sh /root/scripts/sshpass.sh
Schritt 5 – sshguard checken
Noch mal zurück auf dem „angegriffenen“ Host prüfen wir mit „nft list table sshguard“ welche IP-Adressen uns bis jetzt ins Netz gegangen sind. Die IP-Adresse des Hosts aus Schritt 4 sollte auf jeden Fall darunter sein:
nft list table sshguard table ip sshguard { set attackers { type ipv4_addr flags interval elements = { 37.235.54.83, 62.75.189.88, 162.252.172.13} } chain blacklist { type filter hook input priority filter - 10; policy accept; ip saddr @attackers drop } }
Schritt 6 – sshguard anpassen
Angreifer werden bei sshguard im standard für 120 Sekunden (2 Minuten) blockiert. Wem das zu wenig ist der setzt die „BLOCK_TIME“ ggf. höher. Sshguard merkt sich einmal blockierte IPs für 1800 Sekunden (eine halbe Stunde). Auch diese Einstellung kann man verändern. die Variable heißt „DETECTION_TIME“.
Wichtig: Wenn die Variablen in der /etc/sshguard/sshguard.conf angepasst wurden, muss der Daemon einmal neu gestartet werden mit:
systemctl restart sshguard
Danach sind dann allerdings die bisherigen Einträge in der nft Tabelle für sshguard weg. Aber keine Sorge: Der nächste Angreifer kommt bestimmt und läßt nicht lange auf sich warten.
Fazit zu sshguard
Im Gegensatz zu fail2ban ist sshguard relativ leicht zu installieren und konfigurieren. Damit sollten (meiner Meinung nach) auch Linux-Anfänger schnell und sicher ihr frisch installiertes Linux-System absichern können. Umso unverständlicher ist es dass bei Debian 11 sshguard nicht mehr im Standard-Repository drin ist.
Link: https://www.sshguard.net/
- Über den Autor
- Aktuelle Beiträge
Matthias Böhmichen ist der Gründer der Website howto-do.it . Linux nutzt er seit 1991 um kurz danach Windows zu entdecken. Er entdeckt gerne neue Technologien und verbringt seine Zeit damit, sie für Kunden nutzbar zu machen. Im Hauptberuf ist er CEO der Biteno GmbH