Benutzer-Werkzeuge

Webseiten-Werkzeuge


solutions:denyhosts

Dies ist eine alte Version des Dokuments!


Eindringversuche unterbinden mit denyhosts bzw. fail2ban

Der Zugriff mittels ssh auf einen Server eröffnet Hackern viele Möglichkeiten. Daher wird speziell der Port 22 regelmäßig Ziel von Eindringversuchen. Das Tool denyhosts überwacht Zugriffsversuche und sperrt IP-Adressen, die zu häufig abgewiesen werden.

Alternativ kann auch fail2ban eingesetzt werden.

Das Tool wird in Ubuntu mit

$ sudo apt install denyhosts

installiert.

Die Standardeinstellungen sind ok, können aber auch in /etc/denyhosts.conf angepasst werden. Eine Einführung in das Thema bietet dieser Link

Die gesperrten IP Adressen werden in die Datei /etc/hosts.deny geschrieben. Informationen zu den gesperrten IP-Adressen können mit whois oder IP Info ermittelt werden.

Oktober 2017: fail2ban ersetzt denyhosts

Leider scheint denyhosts nicht weiter entwickelt zu werden. Künftig wird es ist daher notwendig, fail2ban näher zu betrachten. Gute Informationen sind in Ubuntuuser und diesem Blog zu finden.

Erste Gehversuche auf lion machen einen guten Eindruck von fail2ban. Typisches Linux-Tool, aber mit vielen Voreinstellungen.

Konfiguration von fail2ban

Die Konfiguration von fail2ban wird in /etc/fail2ban durchgeführt. Alle Dateien mit dem Suffix .conf sind vorgegeben und können bei Aktualisierung des Tools überschrieben werden. Eingene Anpassungen werden daher immer in Dateien mit dem Suffix .local durchgeführt. Dabei reicht es, nur die Änderungen gegenüber der .conf Dateien in den .local Dateien zu speichern.

Inforamtionen hierzu sind z. B. in How to protect an NGINX Server with fail2ban

Aktivieren / Erstellen von Jails

In fail2ban werden sogenannte Jails erstellt, die log-Files nach Angriffsmustern untersuchen und IP-Adressen sperren, wenn die Muster binnen vorgegebener Zeit n-mal angesprochen werden.

Die Datei /etc/fail2ban/jail.conf enthält zahlreiche Jails, die allerdings für den jeweiligen Server angepasst freigeschaltet werden müssen. Hierzu dienen die Dateien /etc/fail2ban/jail.d/defaults-debian.(conf|local), in denen die Vorgaben aus Debian bzw. die eigenen Einstellungen enthalten sind.

Beispiel:

$ cat /etc/fail2ban/jail.d/defaults-debian.local 
[sshd]
enabled = true
bantime = 86400

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true

[nginx-noscript]
enabled  = true
port     = http,https
filter   = nginx-noscript
logpath  = /var/log/nginx/access.log
maxretry = 4

In dem Beispiel werden die vorgegebenen Jails [sshd], [nginx-http-auth] und [nginx-botsearch] aktiviert. Mit [nginx-noscript] wird ein eigenes Jail hinzugefügt.

Filtereinstellungen

Die Filter, nach denen die Log-Files untersucht werden befinden sich in /etc/fail2ban/filter.d. Auch hier werden eigene Einstellungen in .local Dateien gespeichert.

$ cat nginx-noscript.local 
# fail2ban filter für nginx 

[Definition]

failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)

ignoreregex =

Vorgegebene Filter können auch erweitert werden, wie z. B. nginx-http-auth

$ nl nginx-http-auth.local 
     1	# fail2ban filter configuration for nginx
       
       
     2	[Definition]
       
       
     3	failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(, referrer: "\S+")?\s*$
     4		^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
       
     5	ignoreregex = 
       
     6	# DEV NOTES:
     7	# Based on samples in https://github.com/fail2ban/fail2ban/pull/43/files
     8	# Extensive search of all nginx auth failures not done yet.
     9	# 
    10	# Author: Daniel Black

Hier wurde Zeile 4 ergänzt, damit auch Fehlversuche ohne Passwort Eingabe gefiltert werden.

solutions/denyhosts.1509788099.txt.gz · Zuletzt geändert: 2017-11-04 09:34 von andreas