Inhaltsverzeichnis
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