Wie fail2ban
Quelle1)
Python-Skript DenyHosts durchforstet standardmäßig alle 30 Sekunden die syslog-Datei /var/log/auth.log nach verdächtigen SSH-Fehlversuchen (DAEMON_SLEEP = 30s) und trägt gefundene IP-Adressen in die Datei /etc/hosts.deny ein.
Konfigdaten: /etc/denyhosts.conf
Einstellungen, zb.B. Schwellwerte für Login-Versuche mit nicht existierenden Nutzernamen (DENY_THRESHOLD_INVALID) und solchen mit richtigen Nutzernamen aber falschen Passwörter (DENY_THRESHOLD_VALID) getrennt definieren.
So ist es möglich, auf das Durchprobieren von Nutzernamen schneller zu reagieren, als auf die Eingabe falsche Passwörter – denn seinen Nutzernamen gibt ein legitimer Anwender in der Regel kaum falsch ein.
Zu den selbst ermittelten IP-Adressen auf Basis von auth.log kann man auch die Ergebnisse anderer Systeme zu seiner Liste der geblockten Rechner hinzufügen. Dieser seit langem bei DenyHosts verfügbare Cloud-Service beruht auf der zentralen Erfassung der von anderen DenyHosts-Clients übermittelten Daten (SYNC_DOWNLOAD = yes).
Man selbst kann seine gesammelten ebenfalls an den DenyHost-Server übertragen – muss aber nicht (SYNC_UPLOAD = yes). Im Test übermittelte der Server nach der festgelegten Zeitspanne von 15 Minuten jeweils 50 IP-Adressen, die der Client zu /etc/hosts.deny hinzufügte.
Installation
sudo apt-get install denyhosts
DenyHosts ist nicht auf SSH allein beschränkt, prinzipiell schützt es auch andere Dienste, die ein Login oder eine Authentifizierung erfordern, etwa FTP, Telnet und SMTP. Diese Dienste müssen dann aber entweder via (x)inetd gestartet werden oder gegen libwrap gelinkt sein.
Problem: deny.hosts wächst ständig, zu gross. Lösung: DenyHosts löscht Daten nach best. Zeit wieder. Die Option PURGE_DENY = 1d legt beispielsweise die Dauer auf einen Tag fest. Mit der Option DAEMON_PURGE = 1d veranlasst man DenyHosts, automatisch einmal täglich den Löschprozess auszuführen.
Alternativ kann man DenyHosts stoppen und mit
sudo denyhosts --purge
manuell alle älteren Einträge löschen.
Anschließend muss man DenyHosts wieder starten.
Quelle2)
Manuell: Siehe Quelle
Skript:
########################################################################
#
# rmdenyhosts
# Entfernt DenyHosts-Eintraege
#
# Copyright 2011 Emanuel Duss
# Licensed under GNU General Public License
#
# 2011-07-03; Emanuel Duss; Erste Version
#
########################################################################
########################################################################
# Variabeln
DENYHOSTS="/etc/init.d/denyhosts"
DENYDIR="/var/lib/denyhosts"
GOODHOST="$1"
########################################################################
# Funktionen
usage() {
cat << EOF
Usage:
$0 IP-Adresse
EOF
}
########################################################################
# Main
# Variable gesetzt?
if [ -z "$GOODHOST" ]
then
echo "Keine IP-Adresse angegeben!"
usage
exit 1
fi
# DenyHosts stoppen
$DENYHOSTS stop
# Eintraege entfernen
for i in $DENYDIR/hosts \
$DENYDIR/hosts-restricted \
$DENYDIR/hosts-root \
$DENYDIR/hosts-valid \
$DENYDIR/users-hosts \
/etc/hosts.deny
do
sed '/'$GOODHOST'/d' $i > $i.tmp
mv $i.tmp $i
done
# DenyHosts starten
$DENYHOSTS start
# EOF