Webpage zur Anzeige der von fail2ban geblockten IP-Adressen

Irgendwie interessiert mich immer mal woher die IPs kommen die durch automatisierte Angriffscripts von fail2ban aussortiert werden. Was liegt hier nahe – ein Shellscript zu schreiben und dann mit crond regelmäßig zu erneuern. Geblockte IP-Adressen können mit:

fail2ban-client status | grep "Jail list:" | sed "s/ //g" | awk '{split($2,a,",");for(i in a) system("fail2ban-client status " a[i])}'

ausgelesen werden. Ist ein wenig unhandlich diese unformatierte Ausgabe.

Das hat zu folgendem Shellscript geführt:

#!/bin/bash
# Script zur Erzeugung einer html-Seite mit den von fail2ban geblockten IP-Adressen, entsprechender nslookup-Anfrage und GeoIP 

echo \<!DOCTYPE HTML\>
echo \<html\>\<head\>\</head\>\<body\>
echo \<h3\>Automatisch geblockte IP-Adressen\</h3\>
date +'%T  %a. %d. %b %Y'
echo \<br\>\<br\>
echo \<table border="1"\>
echo \<tr\>\<td\>IP-Adresse\</td\>\<td\>Reverse Lookup\</td\>\<td\>GeoIP\</td\>\</tr\>

IFS=$' '
IPBLOCK=$(fail2ban-client status | grep "Jail list:" | sed "s/ //g" | awk '{split($2,a,",");for(i in a) system("fail2ban-client status " a[i])}'| grep -v Status |cut -d " " -f 8- |sed 's/\n\ //g'|sed 's/\s/\n/g' | sort -V | uniq | sed '/^$/d'  |sed 's/\s/x/g')                                   # Aus Fail2ban die geblockten IPs auslesen
echo $IPBLOCK | while read IP
do
    echo \<tr\>
    echo \<td\>$IP\</td\>                                                                                         #IP-Adresse anzeigen
    HOSTNAME=$(dig -x $IP +noidnout | grep PTR | cut -d ";" -f 2)                  #Hostname anzeigen
    GEOIP=$(echo $IP|xargs geoiplookup)                                                            #Geoip anzeigen
    echo \<td\>${HOSTNAME##*PTR}\</td\>
    echo \<td\>$GEOIP\</td\>
    echo \</tr\>
done

echo \</table\>\</body\>

und die Ausgabe sieht dann so aus. Sicher kein besonders schönes Script aber funktional. Aufgerufen wird das Script alle 5 Minuten durch crond mit:

*/5 * * * * /Pfad zum Script/blocked-ips > /tmp/blocked.html && /bin/chown Benutzer:Gruppe /tmp/blocked.html && mv /tmp/blocked.html /Pfad zum Document-Root/

Der umständliche Weg über /tmp soll verhindern, dass die Seite bereits während der Laufzeit des Scriptes, es braucht eine Weile, unvollständig geladen wird.

(Das Paket mit geoiplookup findet sich im Paket geoip-bin und kann aus den Repositorien von Debian mit apt-get install geoip-bin installiert werden)

Do NOT follow this link or you will be banned from the site!