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

   lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
   x Options for python27 2.7.2_3                                       x
   x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
   x x    [*] THREADS   Enable thread support                         x x
   x x    [ ] SEM       Use POSIX semaphores (experimental)           x x
   x x    [ ] PTH       Use GNU Pth for threading/multiprocessing     x x
   x x    [*] UCS4      Use UCS4 for unicode support                  x x
   x x    [*] PYMALLOC  Use python's internal malloc                  x x
   x x    [*] IPV6      Enable IPv6 support                           x x
   x x    [ ] FPECTL    Enable floating point exception handling      x x
   x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x
   tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
   x                   <  OK  >                                 x
   mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

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 = 1
# -> 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

Flattr this!

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben