Der Pilgermaske Blog

der andere blog - Willkommen!

SSHguard: schnell und einfach SSH absichern

- Veröffentlicht unter Linux von

Quick and dirty ist nicht immer ein erstrebenswerter Ansatz: beim Sex manchmal, beim Kochen selten. Wenn Admina aber ständig – aus welchen Gründen auch immer – einen Linux Server zusammenbaut, ist es doch nützlich, solide Programme zu kennen, die eine schnelle Installation und einfache Konfiguration ermöglichen. Gerade wenn es die Sicherheit betrifft ist ein solcher ‘einfacher’ Ansatz immer noch besser, als keine Absicherung aus Bequemlichkeit. SSHguard bietet einen solchen Ansatz: Installieren und fertig.

Alternativ zu SSHguard kennen wir z.B. Fail2ban oder DenyHosts zur Absicherung des SSH ports (default 22). Wobei m.W. DenyHosts aus den Distros rausgeflogen ist, weil es nicht mehr gepflegt wird, während Fail2ban immer mächtiger wird und damit auch mehr Konfigurationsarbeit erfordert. Somit ist SSHguard mein Favorit. In Ubuntu 18.04 Server LTS wird SSHguard in der Version 1.7.1 mit apt install sshguard installiert – und ist damit lauffähig.

Unter /etc/default/sshguard können die Programm Parameter hinterlegt werden. Standardmäßig werden die Anmeldeversuche an SSH über das scannen des Log- Stroms, welcher in der /var/log/auth.log landet, beobachtet. Abgebrochene, fehlerhafte und ständige Anmeldeversuche, werden von SSHguard schon vor dem eintreffen in der auth.log (aus)gewertet.

Einen Fehler bewertet SSHguard üblicherweise mit 10. Wird also in der /etc/default/sshguard die Option -a mit einen Wert von 40 belegt, hat ein Angreifer rund 4 Versuche. Beim 5ten Versuch wird der Angreifer ausgebremst und muss entsprechend länger auf eine neuerliche Anmeldung warten. Es gibt also keine brutale ‘Du-bleibst-draußen’ Option (Ausnahme: eine blacklist) sondern eher ein Einbremsen bis zur Bewusstlosigkeit. Das macht es Angreifer teurer, eine systematische Abwehr zu umgehen und entspannt Admins, weil nicht ständig (reguläre) logins oder IP’s nach falsch-Passwort-Anmeldung entsperrt werden müssen.

Voraussetzungen für einen lauffähigen SSHguard gibt es im Prinzip keine: SSHguard benutzt in unseren Fall iptables – und die sind bei Ubuntu 18 nach einer Neuinstallation vorhanden. Es gibt in der Version 1.7.1 keine zentrale Konfigdatei. Die Werte werden wie oben beschrieben, mit der /etc/default/sshguard übergeben und die Standardwerte sind brauchbar. Auf meinen Test- Server sah /var/log/auth.log nach einiger Zeit so aus:

Jun 22 11:46:31 svr02 sshguard[1358]: Monitoring attacks from stdin
Jun 22 12:45:13 svr02 sshguard[1358]: Blocking 115.238.245.4 for 840 secs (4 attacks in 6 secs, after 1 abuses over 6 secs)
Jun 22 12:45:17 svr02 sshguard[1358]: Blocking 115.238.245.8 for 840 secs (4 attacks in 9 secs, after 1 abuses over 9 secs)
Jun 22 12:45:17 svr02 sshguard[1358]: Blocking 115.238.245.2 for 840 secs (4 attacks in 8 secs, after 1 abuses over 8 secs)
Jun 22 12:45:19 svr02 sshguard[1358]: Blocking 115.238.245.6 for 840 secs (4 attacks in 12 secs, after 1 abuses over 12 secs)
Jun 22 12:45:27 svr02 sshguard[1358]: Blocking 121.18.238.115 for 840 secs (4 attacks in 12 secs, after 1 abuses over 12 secs)
Jun 22 12:45:40 svr02 sshguard[1358]: Blocking 221.194.47.233 for 840 secs (4 attacks in 8 secs, after 1 abuses over 8 secs)
Jun 22 12:46:23 svr02 sshguard[1358]: Blocking 221.194.47.239 for 840 secs (4 attacks in 10 secs, after 1 abuses over 10 secs)
Jun 22 12:47:47 svr02 sshguard[1358]: Blocking 221.194.47.205 for 840 secs (4 attacks in 153 secs, after 1 abuses over 153 secs)
Jun 22 12:49:36 svr02 sshguard[1358]: Blocking 221.194.47.243 for 840 secs (4 attacks in 14 secs, after 1 abuses over 14 secs)
Jun 22 12:50:06 svr02 sshguard[1358]: Blocking 221.194.47.236 for 840 secs (4 attacks in 15 secs, after 1 abuses over 15 secs)
Jun 22 12:50:59 svr02 sshguard[1358]: Blocking 221.194.44.232 for 840 secs (4 attacks in 13 secs, after 1 abuses over 13 secs)
Jun 22 12:51:26 svr02 sshguard[1358]: Blocking 221.194.47.221 for 840 secs (4 attacks in 14 secs, after 1 abuses over 14 secs)
Jun 22 13:01:43 svr02 sshguard[1358]: Blocking 221.194.44.211 for 840 secs (4 attacks in 22 secs, after 1 abuses over 22 secs)
Jun 22 13:02:19 svr02 sshguard[1358]: Blocking 121.18.238.115 for 1680 secs (4 attacks in 22 secs, after 2 abuses over 1024 secs)
Jun 22 13:04:53 svr02 sshguard[1358]: Blocking 115.238.245.4 for 1680 secs (4 attacks in 15 secs, after 2 abuses over 1186 secs)
Jun 22 13:05:57 svr02 sshguard[1358]: Blocking 221.194.47.205 for 1680 secs (4 attacks in 17 secs, after 2 abuses over 1243 secs)
Jun 22 13:06:40 svr02 sshguard[1358]: Blocking 221.194.47.236 for 1680 secs (4 attacks in 17 secs, after 2 abuses over 1009 secs)
Jun 22 13:07:20 svr02 sshguard[1358]: Blocking 115.238.245.2 for 1680 secs (4 attacks in 17 secs, after 2 abuses over 1331 secs)
Jun 22 13:08:37 svr02 sshguard[1358]: Blocking 221.194.47.243 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 1155 secs)
Jun 22 13:09:36 svr02 sshguard[1358]: Blocking 119.249.54.217 for 840 secs (4 attacks in 31 secs, after 1 abuses over 31 secs)
Jun 22 13:10:25 svr02 sshguard[1358]: Blocking 221.194.47.233 for 1680 secs (4 attacks in 19 secs, after 2 abuses over 1493 secs)
Jun 22 13:10:48 svr02 sshguard[1358]: Blocking 115.238.245.6 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 1541 secs)
Jun 22 13:21:11 svr02 sshguard[1358]: Blocking 221.194.47.221 for 1680 secs (4 attacks in 27 secs, after 2 abuses over 1799 secs)
Jun 22 13:28:17 svr02 sshguard[1358]: Blocking 115.238.245.8 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 2589 secs)
Jun 22 13:28:22 svr02 sshguard[1358]: Blocking 119.249.54.217 for 1680 secs (4 attacks in 31 secs, after 2 abuses over 1157 secs)
Jun 22 13:28:56 svr02 sshguard[1358]: Blocking 221.194.44.211 for 1680 secs (4 attacks in 13 secs, after 2 abuses over 1655 secs)
Jun 22 13:45:07 svr02 sshguard[1358]: Blocking 122.226.181.165 for 840 secs (4 attacks in 16 secs, after 1 abuses over 16 secs)
Jun 22 13:52:47 svr02 sshguard[1358]: Blocking 221.194.47.205 for 3360 secs (4 attacks in 21 secs, after 3 abuses over 4053 secs)
Jun 22 13:54:55 svr02 sshguard[1358]: Blocking 115.238.245.2 for 3360 secs (4 attacks in 15 secs, after 3 abuses over 4186 secs)
Jun 22 14:03:43 svr02 sshguard[1358]: Blocking 122.226.181.167 for 840 secs (4 attacks in 26 secs, after 1 abuses over 26 secs)
Jun 22 14:12:09 svr02 sshguard[1358]: Blocking 122.226.181.165 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 1638 secs)
Jun 22 14:17:26 svr02 sshguard[1358]: Blocking 122.226.181.164 for 840 secs (4 attacks in 763 secs, after 1 abuses over 763 secs)
Jun 22 14:18:14 svr02 sshguard[1358]: Blocking 115.238.245.6 for 3360 secs (4 attacks in 16 secs, after 3 abuses over 5587 secs)
Jun 22 14:18:38 svr02 sshguard[1358]: Blocking 122.226.181.167 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 921 secs)
Jun 22 14:22:40 svr02 sshguard[1358]: Blocking 221.194.47.239 for 1680 secs (4 attacks in 15 secs, after 2 abuses over 5787 secs)
Jun 22 14:42:38 svr02 sshguard[1358]: Blocking 115.238.245.4 for 3360 secs (4 attacks in 14 secs, after 3 abuses over 7051 secs)
Jun 22 14:43:14 svr02 sshguard[1358]: Blocking 122.226.181.165 for 3360 secs (4 attacks in 17 secs, after 3 abuses over 3503 secs)
Jun 22 14:49:26 svr02 sshguard[1358]: Blocking 122.226.181.164 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 2683 secs)
Jun 22 14:51:32 svr02 sshguard[1358]: Blocking 115.238.245.8 for 3360 secs (4 attacks in 16 secs, after 3 abuses over 7584 secs)
Jun 22 15:16:10 svr02 sshguard[1358]: Blocking 182.100.67.231 for 840 secs (4 attacks in 34 secs, after 1 abuses over 34 secs)
Jun 22 15:34:56 svr02 sshguard[1358]: Blocking 182.100.67.231 for 1680 secs (4 attacks in 16 secs, after 2 abuses over 1160 secs)
Jun 22 16:05:54 svr02 sshguard[1358]: Blocking 182.100.67.231 for 3360 secs (4 attacks in 11 secs, after 3 abuses over 3018 secs)
Jun 22 17:03:24 svr02 sshguard[1358]: Blocking 182.100.67.231 for 6720 secs (4 attacks in 9 secs, after 4 abuses over 6468 secs)

Hier sieht Admina (am Ende der Zeilen) sehr gut, dass SSHguard nicht mit statischen Zeiträumen arbeitet sondern entsprechend der Wertung einer Störung und Häufigkeit, die Verzögerungszeit für eine neuerliche Anmeldung dynamisch festlegt und verlängert. An den iptables muss nichts konfiguriert werden – zumindest, wenn man keine ältere Version als 1.7.1 von SSHguard benutzt. Installieren und fertig. Die tables (mit einen geblockten Angreifer) sehen entsprechend so aus:

root@svr02:/var/log# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
sshguard all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain sshguard (1 references)
target prot opt source destination
DROP all -- 182.100.67.231 0.0.0.0/0

Auf der Konsole einfach mal eine Stunde journalctl -xf laufen lassen und schon sieht Admina live wie SSHguard arbeitet. Übrigens: SSHguard ist es egal auf welchen port SSH hört, da es im Prinzip nur den Log- Strom über journald ausfiltert und SSH Logzeilen an einer eindeutigen Dienste Nummer erkennt. Darum findet Admina mit ps -ax folgende relevante Prozesse:

root@svr02:/var/log# ps ax | grep ssh
1356 ? Ss 0:00 /bin/sh /usr/lib/sshguard/sshguard-journalctl -i /run/sshguard.pid -w /etc/sshguard/whitelist -a 40 -p 420 -s 1200
1358 ? Sl 0:00 /usr/sbin/sshguard -i /run/sshguard.pid -w /etc/sshguard/whitelist -a 40 -p 420 -s 1200
1370 ? Ss 0:00 /usr/sbin/sshd -D
1373 ? S 0:00 /bin/sh /usr/lib/x86_64-linux-gnu/sshg-fw

Die whitelist habe ich jetzt vergessen, aber wie aus den oberen Zeilen gelesen werden kann, liegt diese als Datei unter /etc/sshguard und ist mit einen Wert (eine IP, hostname oder Netz) pro Zeile einfach zu konfigurieren. Eine blacklist soll auch möglich sein. Einfach mal auf den Projekt Webseiten schmökern. Quick and dirty – installieren und gut ist. Ich kann damit leben.

Comments