Benutzer-Werkzeuge

Webseiten-Werkzeuge


solutions:denyhosts

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.

fail2ban administrieren

fail2ban läuft als Service, daher müssen alle Veränderungen durch einen Restart des Service aktiviert werden.

$ sudo systemctl restart fail2ban

Den Zustand von fail2ban und der Jails kann man mit fail2ban-client ansehen.

$ sudo fail2ban-client status
Status
|- Number of jail:	4
`- Jail list:	nginx-botsearch, nginx-http-auth, nginx-noscript, sshd
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	3
   |- Total banned:	3
   `- Banned IP list:	35.198.154.247 5.188.10.179 84.139.127.3
$ sudo iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-nginx-noscript  tcp  --  anywhere             anywhere             multiport dports http,https
f2b-nginx-botsearch  tcp  --  anywhere             anywhere             multiport dports http,https
f2b-nginx-http-auth  tcp  --  anywhere             anywhere             multiport dports http,https
f2b-sshd   tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain f2b-nginx-botsearch (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

Chain f2b-nginx-http-auth (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

Chain f2b-nginx-noscript (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

Chain f2b-sshd (1 references)
target     prot opt source               destination         
REJECT     all  --  p548B7F03.dip0.t-ipconnect.de  anywhere             reject-with icmp-port-unreachable
REJECT     all  --  5.188.10.179         anywhere             reject-with icmp-port-unreachable
REJECT     all  --  247.154.198.35.bc.googleusercontent.com  anywhere             reject-with icmp-port-unreachable
RETURN     all  --  anywhere             anywhere
solutions/denyhosts.txt · Zuletzt geändert: 2017-11-04 09:48 von andreas