Quantcast
Channel: kauderWWWelsch » apache
Viewing all articles
Browse latest Browse all 3

fail2ban – die phpMyAdmin-Sucher bannen

$
0
0

Schaut man sich bei Langeweile mal die Datei [/var/log/apache2/error.log] an, finden sich oft Einträge in der abgebildeten Form.

[error] [client 91.121.xxx.xxx] File does not exist: /var/www/PMA
[error] [client 91.121.xxx.xxx] File does not exist: /var/www/dbadmin
[error] [client 91.121.xxx.xxx] File does not exist: /var/www/pma
[error] [client 91.121.xxx.xxx] File does not exist: /var/www/dbadmin

Irgendwelche Spaßvögel versuchen hier also tapfer das phpMyAdmin-Verzeichnis zu finden – oder auch andere Sachen, wie etwa RoundCube, Foren-Verzeichnisse usw.

Da derartige unnötigen Log-Einträge auf Dauer einfach nur die Übersicht kaputtmachen und irgendwie schlichtweg nerven, wollte ich die gerne künftig weitgehend unterbinden. Nur wie?

fail2ban bringt’s

Des Admins Freund ist hier fail2ban, ein Tool, welches es erlaubt, basierend auf bestimmten Filterregeln Logfiles zu prüfen und bei einem auf den Filter passenden Fund eine bestimmte Aktion auszuführen. fail2ban bringt dabei einige vordefinierte Regeln mit, netterweise auch schon für mein spezielles Problemchen. In der Standard-Einstellung ist die Regel jedoch nicht aktiv – und dazu leider in der Version von fail2ban, die mit Debian Squeeze verfügbar ist, auch noch fehlerhaft. Also ist Nacharbeit angesagt…

filter.d/apache-nohome.conf

Hauptsächlich wichtig zur Konfiguration von fail2ban ist die [/etc/fail2ban/jail.conf] und die einzelnen Dateien unter [/etc/fail2ban/filter.d/].

Der für mich notwendige Filter ist in der Datei [/etc/fail2ban/filter.d/apache-nohome.conf] hinterlegt – das sieht dann so aus:

# Fail2Ban configuration file
#
# Author: Yaroslav O. Halchenko <debian@onerussian.com>
#
# $Revision: 716 $
#

[Definition]

# Option: failregex
# Notes.: regex to match failures to find a home directory on a server, which
# became popular last days. Most often attacker just uses IP instead of
# domain name -- so expect to see them in generic error.log if you have
# per-domain log files.
# Values: TEXT
#
# failregex = [[]client <HOST>[]] File does not exist: .*/~.*
failregex = [[]client (?P<host>\S*)[]] File does not exist:

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Die wichtige Zeile ist dabei normalerweise diese hier (von fail2ban vorgegeben):

failregex = [[]client <HOST>[]] File does not exist: .*/~.*

Anhand dieses netten regulären Ausdrucks checkt nun fail2ban die error-Logs auf Einträge in denen der String “File does not exist” vorkommt. Testen kann man das mit dem Tool fail2ban-regex etwa wie folgt:

fail2ban-regex /var/log/apache2/error.log '[[]client <HOST>[]] File does not exist: .*/~.*'

Hier stellte sich bei mir dann Überraschung ein – es wurden keine Treffer gefunden und das trotz deutlich mehr als 100 vorhandenen Einträgen in dieser Form! Irgendwas läuft da also schief. Nur was? Es kann an sich ja nur der reguläre Ausdruck sein… Also einmal den Spürhund Google befragen – und siehe da, da ist tatsächlich ein Fehler drin.

Der korrekte Ausdruck muss wie folgt aussehen, dann funktioniert das auch:

failregex = [[]client (?P<host>\S*)[]] File does not exist:

[Update]

Unter folgendem Link ist auch noch mal eine Config genannt, bei der gezielt auf bestimmte Ordnernamen geprüft wird:

http://www.foosel.org/blog/2008/04/banning_phpmyadmin_bots_using_fail2ban

Außerdem hier noch einige Beispiele direkt aus dem Fail2Ban Wiki:

http://www.fail2ban.org/wiki/index.php/Apache

[Update Ende]

So, damit ist der Filter definiert. Damit fail2ban den Filter auch nutzt, geht’s nun zur jail.conf

jail.conf

[apache-nohome]
enabled = true
port = http
filter = apache-nohome
logpath = /var/log/apache*/*error.log
bantime = 604800
maxretry = 3

bantime gibt dabei an, für wie viele Sekunden eine IP gesperrt werden soll, wenn der Filter greift. Ich bin der Meinung, erwähnten Spaßvögeln soll für eine Woche der Spaß vergehen, daher setze ich die bantime auf 604800 Sekunden.

maxretry wiederum bestimmt, wie oft der Fehler auftreten darf, bevor die Sperre aktiviert wird.

Damit fail2ban die geänderte config berücksichtigt fehlt nur noch ein kurzer Neustart des Dienstes:

/etc/init.d/fail2ban restart

Erfolgs-Kontrolle

Das war’s auch schon – versucht nun jemand das phpMyAdmin-Verzeichnis oder irgendeine beliebige andere Anwendung im Webspace zu finden, ist nach 3 Versuchen Schluss mit lustig.

Kontrollieren lässt sich der Erfolg in der Datei [/var/log/fail2ban.log], hier finden sich bei einem Treffer Einträge ähnlich diesen hier:

fail2ban.actions: WARNING [apache-nohome] Ban 211.220.194.217
fail2ban.actions: WARNING [apache-nohome] Ban 41.203.119.18
fail2ban.actions: WARNING [apache-nohome] Ban 114.207.245.190

Schon werden die anfangs genannten Einträge im Apache Error-Logfile deutlich seltener auftreten, denn nach 3-maligem Auftreten sperrt ja nun fail2ban. Habe fertig!


Viewing all articles
Browse latest Browse all 3

Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.2 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.





Latest Images

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Vimeo 10.6.1 by Vimeo.com, Inc.

Vimeo 10.6.1 by Vimeo.com, Inc.