Installation DenyHosts
Ich hatte eine Zeit lang das Problem, dass mein Server zeitweise ziemlich langsam reagierte und konnte mir jedoch nicht genau erklären woran das lag. Bis ich eines Tages die Security Report Emails durchgelesen habe und die vielen hunderten, wenn nicht tausenden SSH Login Versuche entdeckte. Auf der Suche nach einer Lösung bin ich auf DenyHosts gestossen. DenyHosts schützt den Server vor unbefugten SSH Zugriffen. DenyHosts monitort die Logfiles und protokolliert fehlgeschlagene Login-Versuche. Nach einer bestimmten Anzahl von Fehlversuchen, blockiert DenyHosts den Zugang für die angreifende IP Adresse. Seit der Aktivierung von DenyHosts bin ich dieses Problem glücklicherweise los 🙂
Installation
cd /usr/ports/security/denyhosts make install clean
Konfiguration
vi /etc/hosts.allow
Folgende Lines hinzufügen: (hier kannst Du bestimmten IPs immer eine Connection erlauben. ???.???.???.???)
# Wrapping sshd(8) is not normally a good idea, but if you
# need to do it, here's how
#sshd : .evil.cracker.example.com : deny
# always allow connection from this IP
sshd : ???.???.???.???: allow
# deny from denyhosts
sshd : /etc/hosts.deniedssh : deny
# allow rest.
sshd : ALL : allow
Damit auch die restlichen Services gehen, folgende zeilen hinzufügen
# zusätzliche dienste mysqld : ALL : allow imap : ALL : allow pop3 : ALL : allow #
Wichtig! Diese Zeile muss danach auskommentiert werden! Sonst greifen die folgenden Rules nicht!
# Start by allowing everything (this prevents the rest of the file # from working, so remove it when you need protection). # The rules here work on a "First match wins" basis. #ALL : ALL : allow
noch das file /etc/hosts.deniedssh erstellen, falls es noch nicht existiert
touch /etc/hosts.deniedssh
Jetzt noch im rc.conf aktivieren.
#-----------------------------------------------# # DenyHosts / SSHD Honeypot # syslogd should ideally be run with the -c option; this will ensure that # denyhosts notices multiple repeated login attempts. # default ist /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s # wir machen daher -sc (fügen noch -c hinzu) #-----------------------------------------------# denyhosts_enable="YES" syslogd_flags="-sc"
Jetzt noch Config anpassen:
vi /usr/local/etc/denyhosts.conf
folgende Anpassungen machen:
# To block only sshd: BLOCK_SERVICE = sshd DENY_THRESHOLD_INVALID = 2 # -> ich logge mich ja eigentlich nie mehr als 3x falsch ein... sonst hab ich noch eine IP angegeben, die auf der whitelist steht. DENY_THRESHOLD_VALID = 3 # SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES # ADMIN_EMAIL = postmaster@domain.com # To enable synchronization, you must uncomment the following line: # den rest von sync muss man nicht uncommenten. sind alles default values. SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
Whitelist
Wenn man sich von einem AllowedHost einlogged aber sich beim Login vertippt, kommt man automatisch auf die Blacklist. Um das zu verhindern, kann man sich einfach im allowed-hosts File eintragen. Existiert das File noch nicht, kann man es einfach erstellen. Das File befindet sich hier:
WORK_DIR/allowed-hosts
also:
/usr/local/share/denyhosts/data/allowed-hosts
Pro Line einfach eine IP eintragen:
vi /usr/local/share/denyhosts/data/allowed-hosts
??.??.???.???
Neu starten, fertig 🙂
/usr/local/etc/rc.d/denyhosts restart
Starten
Zuerst syslog restarten wegen der neuen config (-c)
/etc/rc.d/syslogd restart
DenyHosts starten
/usr/local/etc/rc.d/denyhosts start
Log anschauen
tail -f /var/log/denyhosts
2010-04-01 16:04:44,306 - denyhosts : INFO new denied hosts: ['211.100.49.77', '88.163.91.78'] 2010-04-01 16:04:44,766 - denyhosts : INFO launching DenyHosts daemon (version 2.6)... 2010-04-01 16:04:44,801 - denyhosts : INFO DenyHosts daemon is now running, pid: 61442 2010-04-01 16:04:44,801 - denyhosts : INFO send daemon process a TERM signal to terminate cleanly 2010-04-01 16:04:44,802 - denyhosts : INFO eg. kill -TERM 61442 2010-04-01 16:04:44,856 - denyhosts : INFO monitoring log: /var/log/auth.log 2010-04-01 16:04:44,856 - denyhosts : INFO sync_time: 3600 2010-04-01 16:04:44,856 - denyhosts : INFO purging of /etc/hosts.deniedssh is disabled 2010-04-01 16:04:44,857 - denyhosts : INFO sync_time: : 3600 2010-04-01 16:04:44,857 - denyhosts : INFO sync_sleep_ratio: 120
Jetzt sollte vielleicht auch bereits das erste Email eintreffen mit dem neusten Report
DenyHosts Report Added the following hosts to /etc/hosts.deniedssh: 211.100.49.77 88.163.91.78 ----------------------------------------------------------------------
Testen
1. Login, as root, to your Linux system containing the sshd server. 2. Edit the file, /etc/hosts.deniedssh 3. Add the following: $ sshd: 127.0.0.1 : deny 4. Save the file 5. Attempt to connect to the local sshd server: $ ssh localhost 6. You should see the following ssh error message: ssh_exchange_identification: Connection closed by remote host If the above error message was displayed, then sshd has been compiled with tcp_wrappers -> das ist bei freebsd standart! alles wird mit tcp_wrappers compiled! If your client connects to the sshd server, then your sshd has not been compiled with tcp_wrappers 7. Edit the file, /etc/hosts.deny 8. Remove the line that you added earlier (eg. sshd: 127.0.0.1) 9. Save the file
Sollte man sich trotzdem ohne Probleme einloggen können, könnte es sein, im /etc/hosts.allow die line
# The rules here work on a "First match wins" basis. ALL : ALL : allow
noch nicht auskommentiert ist. Will man Protection, muss es so aussehen.
# The rules here work on a "First match wins" basis. #ALL : ALL : allow
tcp_wrapper test
Die meiste Software unter FreeBSD wird standardmässig mit tcp_wrappers konfiguriert. So kann man das sonst nachschauen:
root@corky(/usr/ports)> whereis -b sshd sshd: /usr/sbin/sshd root@corky(/usr/ports)> ldd /usr/sbin/sshd | grep 'libwrap' libwrap.so.5 => /usr/lib/libwrap.so.5 (0x8009c4000)
Mögliche Fehler
Connection Refused
Ist DenyHosts erstmal aktiviert, könnte es sein, dass bei anderen Diensten Teilweise fehler auftreten. z.B. sowas
tail -f /var/log/auth.log Apr 1 17:12:39 corky imap[29041]: refused connection from 217-162-92-141.dclient.hispeed.ch
Wenn ich dann das imapd.log anschaue, sehe ich
Apr 1 17:33:59 corky imap[29037]: error: /etc/hosts.allow, line 93: twist option in resident process
Damit das nicht passiert, müssen noch zusätzliche Entries bestehen:
vi /etc/hosts.allow # zusätzliche dienste mysqld : ALL : allow imap : ALL : allow pop3 : ALL : allow #
Derselbe Host wird mehrmals im /etc/hosts.deniedssh eingetragen
Manchmal kommt es vor, dass DenyHosts einen Host mehrfach Blacklisted. Anscheinend passiert dies hauptsächlich dann, wenn die Synchronisierung aktiviert ist. Das /etc/hosts.deniedssh sieht dann in etwa so aus:
sshd: 198.199.115.115 : deny
sshd: 201.209.218.96 : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: 80.86.200.51 : deny
sshd: 222.195.93.57 : deny
sshd: 115.230.125.176 : deny
sshd: 61.131.71.122 : deny
sshd: v45868.1blu.de : deny
sshd: 222.36.0.48 : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: 222.59.8.216 : deny
sshd: 222.124.175.45 : deny
sshd: 190.255.34.136 : deny
sshd: 210.14.159.2 : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
sshd: v45868.1blu.de : deny
in diesem konkreten Fall, wurde der Host v45868.1blu.de 132 mal eingetragen.
Dazu habe ich folgende Lösung gefunden:
vi /etc/ssh/sshd_config
setze
UseDNS no
(FreeBSD Default ist „yes“)
Danach sshd restarten
/etc/rc.d/sshd restart
Jetzt müssen noch die fehlerhaften Einträge aus den diversen Files entfernt werden.
Dazu erstmal Denyhosts stoppen
/usr/local/etc/rc.d/denyhosts stop
Einträge entfernen:
vi /etc/hosts.deniedssh
geht schneller, wenn man es so macht: 😉
:%s/sshd: v45868.1blu.de : deny//g
Jetzt noch die Files im workdir:
cd /usr/local/share/denyhosts/data
einen grep nach dem Host machen und die Daten aus den entsprechenden Files rauslöschen. Und danach DenyHosts wieder starten
/usr/local/etc/rc.d/denyhosts start
Nun sollte das Problem behoben sein 🙂
Quelle: http://sourceforge.net/mailarchive/message.php?msg_id=23872569