Brute-force aanvallen op je ssh-server kun je met allerlei pakketten tegenhouden, zoals bijvoorbeeld DenyHosts. Dit populaire Python-script monitort ongeldige aanmeldpgingen in je logbestanden en blokkeert daarna het verantwoordelijke ip-adres als het aantal mislukte pogingen een ingestelde drempel overschrijdt. Dat doet het door het ip-adres aan het bestand /etc/hosts.deny toe te voegen.

Allemaal goed en wel, maar wat als je zelf per ongeluk enkele keren een verkeerd wachtwoord hebt ingegeven en je ip-adres op de blacklist komt te staan? Om dit op te lossen moet je natuurlijk eerst kunnen inloggen, wat wel eens problematisch kan zijn als je ip-adres geblokkeerd is. Kijk eerst of je niet al in een andere terminal ingelogd bent op de server, en log daar dan zeker niet uit. Bestaande ssh-sessies worden door DenyHosts immers niet afgebroken. Als je niet al ingelogd bent, probeer dan via een ander ip-adres in te loggen. Als het externe ip-adres van je thuisnetwerk geblokkeerd is, log dan bijvoorbeeld via het 3G-netwerk van je Android-telefoon op je server in, of ssh eerst naar een andere server en start vanaf die server een ssh-sessie naar de server waarop je geblokkeerd bent.

Als je bent ingelogd, is de verleiding groot om eenvoudigweg je ip-adres te verwijderen uit /etc/hosts.deny. Dat werkt echter niet, want DenyHosts houdt zelf informatie bij over de mislukte aanmeldpgingen in zijn eigen bestanden. Hoe los je het probleem dan wel op? Door nauwgezet de volgende stappen uit te voeren (dit is op een Debian-systeem, de paden verschillen op sommige andere distributies):

# /etc/init.d/denyhosts stop

Stopping DenyHosts: denyhosts.

We stoppen eerst DenyHosts, zodat het programma onze manipulaties niet verstoort. Open daarna /etc/hosts.deny en verwijder de regel waarin je ip-adres voorkomt. Dat kan ook met sed (vervang IP door je ip-adres):

# sed -i ‘/IP/d’ /etc/hosts.deny

Kijk daarna in welke bestanden in /var/lib/denyhosts je ip-adres voorkomt:

# grep IP /var/lib/denyhosts/*

/var/lib/denyhosts/hosts:IP:0:Tue Aug 20 10:25:09 2013

/var/lib/denyhosts/hosts-restricted:IP:0:Tue Aug 20 10:25:09 2013

/var/lib/denyhosts/hosts-root:IP:4:Tue Aug 20 10:42:12 2013

/var/lib/denyhosts/hosts-valid:IP:0:Tue Aug 20 10:25:09 2013

/var/lib/denyhosts/users-hosts:root – IP:4:Tue Aug 20 10:42:12 2013

Deze regels zijn de reden waarom je ip-adres alleen in /etc/hosts.deny verwijderen niet helpt. Verwijder dus je ip-adres uit al die bestanden. Met sed gaat dat als volgt:

# sed -i ‘/IP/d’ /var/lib/denyhosts/hosts

# sed -i ‘/IP/d’ /var/lib/denyhosts/hosts-restricted

# sed -i ‘/IP/d’ /var/lib/denyhosts/hosts-root

# sed -i ‘/IP/d’ /var/lib/denyhosts/hosts-valid

# sed -i ‘/IP/d’ /var/lib/denyhosts/users-hosts

Daarna herstart je DenyHosts en log je weer probleemloos vanaf je ip-adres in:

# /etc/init.d/denyhosts start

Starting DenyHosts: denyhosts.

http://denyhosts.sourceforge.net/