Betriebssysteme, Programme & Web

Erweiterte Systemsicherheit mit Fail2Ban und Blocklist auf Debian

Linux-Systeme sind heutzutage ein häufiges Ziel von Hackerangriffen. Dabei ist es ganz einfach, ein System in gewissen Punkten abzusichern. Das häufigste Angriffsziel ist hier der SSH Zugang auf dem Port 22.

Wer gerne mal in seine Log-Dateien hineinschaut, wird vielleicht einige solcher Einträge gefunden haben:

plocalhost sshd[5571]: Failed password for root from 111.11.111.11 port 35022 ssh2
plocalhost sshd[5571]: Failed password for root from 111.11.111.11 port 35022 ssh2
plocalhost sshd[5571]: Failed password for root from 111.11.111.11 port 35022 ssh2
plocalhost sshd[5571]: Received disconnect from 111.11.111.11: 11:plocalhost sshd[5571]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=111.11.111.11 user=root

(IP-Adressen und Hostname geändert)

Wie man auffällig bemerkt, versucht jemand auf dem falschen Port eine Verbindung herzustellen (Port 35022). Hierbei handelt es sich um sogenannte „Bots“, welche das Internet nach ungesicherten SSH Ports durchsuchen. Ich gehe hier aber nicht weiter auf diese ein.

Die meisten dieser IPs sind bei Services wie https://www.blocklist.de/ bereits bekannt und können konsequent mit einer Firewall geblockt werden.

1. Vorbereitung

Bevor wir beginnen sorgen wir dafür, dass unser System auf dem neuesten Stand ist.

$ apt-get update && apt-get upgrade

Sollte auf dem System die Firewall IPTables noch nicht installiert sein, so müsst ihr dies auch noch tun.

$ apt-get install iptables

2. Einrichtung von Fail2Ban

Bevor wir überhaupt etwas einrichten können, müssen wir es installieren. Dazu geben wir diesen Befehl in die Konsole unseres Systems ein:

$ apt-get install fail2ban

Nun bearbeiten wir als erstes die Datei „jail.conf„. Diese befindet sich im Ordner /etc/fail2ban.

Ich setze für dieses Tutorial eine bantime von einer Stunde:

# „bantime“ is the number of seconds that a host is banned.
bantime = 3600

Diese Angabe ist natürlich in Sekunden zu machen. In diesem Fall also 1 Stunde = 3600 Sekunden.

Nachdem das erledigt ist, kümmern wir uns um die eigentlichen „Jails“. Das bedeutet wir konfigurieren die Dienste, welche überwacht werden sollen.

Scrollt in der Datei soweit runter bis ihr zu diesem Abschnitt kommt:

#
# JAILS
## Next jails corresponds to the standard configuration in Fail2ban 0.6 which
# was shipped in Debian. Enable any defined here jail by including
#
# [SECTION_NAME] # enabled = true#
# in /etc/fail2ban/jail.local.
#
# Optionally you may override any other parameter (e.g. banaction,
# action, port, logpath, etc) in that section within jail.local

Hier drunter sollte sich die Jail-Einstellung für die SSH Überwachung befinden (falls nicht ist es nicht weiter schlimm).

[ssh]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

So sieht Sie aus. Das enabled = true ist eigentlich selbsterklärend und sagt uns nur, dass diese Funktion aktiv ist.

Beim Port könnt ihr alles so stehen lassen, außer ihr verwendet einen anderen Port.

Der logpath muss auf die auth.log des SSH Servers zeigen. Hier gegebenenfalls eine Anpassung durchführen.

Als „maxretry" nehme ich persönlich immer 3. Denn dieser Wert definiert wie oft eine falsche Anmeldung bei diesem Dienst erfolgen kann, bevor ein Ban der IP durchgeführt wird.

In der Konfigurationsdatei findet ihr auch diverse andere Dienste, welche überwacht werden können. Geht diese einfach durch und passt sie euren Bedürfnissen an.

Nachdem ihr das getan habt, speichert die Datei ab und startet den Fail2Ban Dienst neu.

$ service fail2ban restart

3. Automatischer Import einer Blacklist

Wie schon am Anfang dieses Beitrages erwähnt, gibt es bereits Listen mit geblockten IPs. Einer dieser Anbieter ist www.blocklist.de.

Um das Ganze bei Fail2Ban einzufügen, müssen wir wieder die Datei „jail.conf“ öffnen und an ihr Ende gehen.

Dort fügt ihr folgendes ein:

[ssh-blacklist] enabled = true
port = ssh
filter =sshd
logpath = /var/log/null.log
maxretry = 1
bantime = 86400
action = %(action_)s

Den logpath könnt ihr beliebig setzen. Die einzige Voraussetzung dabei ist, dass diese Datei existieren muss.

Damit wir die ganzen IPs auch importieren können, wird ein Script benötigt. Deswegen erstellen wir eine Datei namens „ban.sh

Folgendes schreiben wir in sie hinein:

#!/bin/sh

iplist=’mktemp‘
service=$1
blocklist=$2
time=$3
url=“http://api.blocklist.de/getlast.php?time=$time&service=$service“

wget $url -O $iplist
while read ip
do
fail2ban-client set $blocklist banip $ip
done < $iplist
rm $iplist

touch /var/log/null.log

Wir speichern ab und rufen sie mit dem Befehl:

$ ./ban.sh ssh ssh-blacklist 3600

auf. Die Argumente sind folgende:

$ ./ban.sh service blocklist zeitraum

Mit „service“ ist der neue Eintrag in der jail.conf gemeint, welchen wir vorher erstellt haben.

Als „blocklist“ gebt ihr den Typ an. In diesem Fall war es „ssh“. Eine Gesamtliste findet ihr auf http://www.blocklist.de/en/export.html.

Bei dem „zeitraum“ wird angeben, wie alt die zu importierenden IPs sind.

 

Möchte man, dass die Datei zum Beispiel jede Stunde aufgerufen wird, erstellt man einen Cronjob dafür:

$ crontab -e

und fügt dort folgenden Befehl ein:

0 * * * * /pfad/zu/eurer/datei/ban.sh ssh ssh-blacklist 3600 >/dev/null 2>&1

Nun sollte euer System besser gegen Angriffe geschützt sein.

 

Falls ihr noch Fragen habt oder euch etwas unklar ist, nutzt die Kommentarfunktion, um eine Frage zu stellen und ich werde sie so schnell wie möglich beantworten.

Martin Krzeminski

Moin, mein Name ist Martin, bin 25 Jahre alt und komme aus der schönen deutschen Hauptstadt Berlin. Selbst bin Ich gelernter Elektroniker für Betriebstechnik und hobbymäßiger Linux System-Administrator. In meiner Freizeit setze Ich mich viel mit Linux-Systemen auseinander und begegne dementsprechend auch vielen Problemen und versuche jene zu lösen. Ansonsten bin Ich ein einfacher Zocker der alles anspielt was er in die Finger bekommt (okay...fast alles :D). Wenn Ich mal vom PC wegkomme treffe Ich mich mit Freunden oder gehe zum Sport.

Ähnliche Artikel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"