Einführung

DenyHosts kann dazu verwendet werden, BruteForce-Angriffe abzuwehren. DenyHosts durchsucht Logfiles auf fehlerhafte Logins und sperrt diese nach einer gewissen Anzahl. Blöd ist nur, wenn man sich selber raussperrt. Mit meinem kleinen Skript kann man eine IP-Adresse in DenyHosts wieder entsperren.

Manuell

Zuerst stoppt man den DenyHosts-Daemon:

$ sudo /etc/init.d/denyhosts stop
Stopping DenyHosts: denyhosts.

Die IP-Adresse muss danach aus dem File /etc/hosts.deny gelöscht werden.

$ sudo vi /etc/hosts.deny

Dies genügt jedoch noch nicht ganz. Die IP-Adresse ist immer noch nicht erlaubt. DenyHosts führt seperate Listen in einem eigenen Verzeichnis. Das Verzeichnis findet man mit folgendem Befehl heraus:

$ grep ^WORK_DIR /etc/denyhosts.conf
WORK_DIR = /var/lib/denyhosts

Standardmässig wird das Verzeichnis /var/lib/denyhosts verwendet. In diesem Verzeichnis muss man die IP-Adresse ebenfalls aus den Files hosts-restricted, hosts-root, hosts-valid und users-hosts löschen. Das kann man z.B. mit dem VI-Editor machen:

$ sudo vi `grep -l 23.42.05.13 *`

Zum Schluss startet man den Daemon wieder:

$ sudo /etc/init.d/denyhosts start
Starting DenyHosts: denyhosts.

Skript

Das geht natürlich viel einfacher mit einem Skript! Folgendes Skript löscht eine IP-Adresse aus den nötigen Files:

#!/usr/bin/env bash
########################################################################
#
# 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

Weitere Informationen