denyhosts ist ein Programm zur Überwachung der Loginversuche per SSH. Dazu analysiert es das File /var/log/auth.log, in welchem alle Loginvorgänge geloggt werden. Wenn denyhosts Einträge in /var/log/auth.log findet, die entsprechend der Konfiguration auffällig sind (z.B. mehrmalig fehlgeschlagen), werden die IP-Adressen dieser Einträge in die Datei /etc/hosts.deny geschrieben, woraufhin von dieser IP-Adresse kein Login mehr möglich ist. Nach 30 Minuten (Konfigurationsabhängig) werden diese Einträge wieder entfernt.
Zudem werden die gesammelten IP-Adressen auf einen zentralen Server geladen und von dort auch ein Abgleich durchgeführt. So hat man auch potentielle Attacker (meinst Botnetze) im Vorfeld abgewehrt.
# apt-get install denyhosts
die Konfiguration wird in dem File /etc/denyhosts.conf vorgenommen.
SECURE_LOG = /var/log/auth.log HOSTS_DENY = /etc/hosts.deny PURGE_DENY = 30m BLOCK_SERVICE = ALL DENY_THRESHOLD_INVALID = 3 DENY_THRESHOLD_VALID = 5 DENY_THRESHOLD_ROOT = 1 DAEMON_SLEEP = 20s DAEMON_PURGE = 30m
SYNC_SERVER = http://xmlrpc.denyhosts.net:9911 SYNC_INTERVAL = 1h SYNC_UPLOAD = yes SYNC_DOWNLOAD = yes SYNC_DOWNLOAD_THRESHOLD = 3 SYNC_DOWNLOAD_RESILIENCY = 2h
Sollte die eigene IP einmal in der /etc/hosts.deny landen ist kein Login mehr möglich. Daher stelle ich ein Script zur Verfügung, welches dies weitestgehend verhindert.
Das folgende Script aktualisiert /etc/hosts.allow mit der eigenen IP.
DynDNS Account. Eigene IP Adresse muss per DynDNS abgefragt werden können.
Aktuelle IP in der Form 1.2.3.4
in lastip.log
und in der Form ALL: 1.2.3.4
in die /etc/hosts.allow
schreiben.
Folgenden Code in die Datei „mkhostsallow.sh“ schreiben, $ACCOUNTNAME anpassen.
#!/bin/bash IP=`host $ACCOUNTNAME.dyndns.org | awk '{ print($NF) }'` LASTIP=$(</home/user/lastip.log) if [ "$IP" != "$LASTIP" ]; then cat /etc/hosts.allow | sed -e s/$LASTIP/$IP/g > /tmp/hosts.allow && mv /tmp/hosts.allow /etc/hosts.allow echo $IP > /home/user/lastip.log echo "`date`: /etc/hosts.allow upgedated. Alte IP $LASTIP durch neue IP $IP ersetzt." >> /home/user/mkhostsallow.log fi
Berechtigungen für mkhostsallow.sh anpassen.
chown root:root mkhostsallow.sh chmod 700 mkhostsallow.sh
Cronjob einstellen der das Script alle 5 Minuten aufruft:
crontab -e */5 * * * * /home/user/mkhostsallow.sh