Benutzer-Werkzeuge

Webseiten-Werkzeuge


solutions:denyhosts

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
solutions:denyhosts [2017-03-12 13:34] andreassolutions:denyhosts [2017-11-04 09:48] (aktuell) – [fail2ban administrieren] andreas
Zeile 1: Zeile 1:
 +====== 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 
 +<code>
 +$ sudo apt install denyhosts
 +</code>
 +installiert.
 +
 +Die Standardeinstellungen sind ok, können aber auch in ''/etc/denyhosts.conf'' angepasst werden. Eine Einführung in das Thema bietet [[http://www.christian-hoenick.com/blog/2012/01/10/angreifende-ip-adressen-mit-denyhosts-sperren/|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 [[https://ip-info.org|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 [[https://wiki.ubuntuusers.de/fail2ban/|Ubuntuuser]] und diesem [[https://www.chrissearle.org/2015/06/16/replacing-denyhosts-with-fail2ban-for-debian/|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 [[https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx-server-with-fail2ban-on-ubuntu-14-04|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:
 +<code>
 +$ 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
 +</code>
 +
 +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.
 +
 +<code>
 +$ cat nginx-noscript.local 
 +# fail2ban filter für nginx 
 +
 +[Definition]
 +
 +failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
 +
 +ignoreregex =
 +
 +</code>
 +
 +Vorgegebene Filter können auch erweitert werden, wie z. B. nginx-http-auth
 +
 +<code>
 +$ 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
 +</code>
 +
 +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.
 +
 +<code>
 +$ sudo systemctl restart fail2ban
 +</code>
 +
 +Den Zustand von fail2ban und der Jails kann man mit fail2ban-client ansehen.
 +
 +<code>
 +$ 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
 +</code>
 +