View previous topic :: View next topic |
Author |
Message |
niko86 n00b
Joined: 03 Sep 2007 Posts: 1
|
Posted: Mon Sep 03, 2007 6:09 am Post subject: HOWTO: fail2ban+webmin |
|
|
Da ich gerne Webmin benutze, wie viele andere vermutlich auch, wollte ich hier eine Lösung zeigen webmin mit fail2ban vor Bruteforce versuchen zu schützen.
Dazu braucht man natürlich fail2ban: HOWTO fail2ban on gentoo
fail2ban ist ein daemon der Logfiles auf regular expressions prüft und dementsprechend Aktionen ausführt.
Zu beachten ist hierbei, dass fail2ban extrem flexibel und erweiterbar ist, es lässt sich denkbar viel realisieren, da es übersichtlich und modular konfigurierbar ist.
Als erstes brauchen wir eine filter Regel, diese "Regeln" liegen als einzelne .conf Dateien unter /etc/fail2ban/filter.d und sind nach ihrem jeweiligen Zweck bezeichnet.
Wir erstellen unter filter.d/ eine Datei webmin.conf mit folgendem Inhalt:
Code: | # Fail2Ban configuration file
[Definition]
# Option: failregex
# Notes.: regex to match the password failure messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = <HOST>.*"POST /session_login\.cgi.*401
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex = |
failregex gibt an nach welcher regular expression gesucht werden soll, <HOST> steht für eine IP oder einen Hostnamen für den in Folge eine Aktion ausgeführt werden soll.
Das Datum in der Zeile der zu prüfenden Logdatei findet fail2ban selbst, ebenso das Format des Datums.
ignoreregex steht für eine regular expression bei deren Auftreten die jeweilige Zeile ignoriert werden soll, das kann zum Beispiel dazu dienen falsche Logins von einer bestimmten IP auf jedenfall nicht zu verfolgen.
Als nächstes brauchen wir eine neue Section in jail.conf:
Code: | [webmin-iptables]
enabled = true
filter = webmin
action = iptables[name=webmin, port=10000, protocol=tcp]
logpath = /var/log/webmin/miniserv.log
maxretry = 4 |
enabled ist selbsterklärend, dient dazu einen Eintrag nicht entfernen zu müssen um die Prüfung zu deaktivieren.
filter steht für den Namen des jeweiligen Filters und ergibt sich aus dem Namen der .conf datei in filter.d/
action ist die Aktion die getätigt werden soll, iptables[name=webmin: webmin ist hierbei der Name der Chain die in Iptables erstellt werden soll.
port=10000, wir wollen die Chain nur für den Webmin port gültig machen,
protocol=tcp, selbsterklärend.
logpath, selbsterklärend
maxretry, ebenso
unter action.d/iptables.conf lässt sich nochmal einiges verändern.
wobei man dazu sagen muss, dass die "Out of the Box" Konfiguration von iptables.conf vollkommen ausreichen sollte.
Code: | [Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = iptables -N fail2ban-<name>
iptables -A fail2ban-<name> -j RETURN
iptables -I INPUT -p <protocol> --dport <port> -j fail2ban-<name> |
Unsere Chains werden initialisiert, hier wird deutlich wie die Optionen aus der jail.conf mit iptables verknüpft sind.
Code: | # Option: actionend
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = iptables -D INPUT -p <protocol> --dport <port> -j fail2ban-<name>
iptables -F fail2ban-<name>
iptables -X fail2ban-<name> |
Wir wollen nach dem Stop von fail2ban keine nutzlosen Einträge mehr in Iptables vorfinden, deswegen werden die Chains gelöscht, wenn fail2ban gestoppt wird.
Code: | # Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck = iptables -n -L INPUT | grep -q fail2ban-<name> |
Hier wird sichergestellt das die Chain eingetragen ist, und der jeweilige Host noch nicht gebannt ist.
Code: | # Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP |
wird die maximale Anzahlen erfolgloser Versuche (maxretrys) überschritten, wird dieses Kommando ausgeführt.
hier lässt sich durchaus noch feintuning betreiben, wenn man das möchte.
Code: | # Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP |
Hier wird die Aktion definiert die nach Ablauf der "bantime" getätigt werden soll.
Damit sind wir fertig, nach einem:
Code: | /etc/init.d/fail2ban restart |
ist unsere neue Regel aktiv und bereit für den Einsatz.
wer möchte kann sich das Verhalten von fail2ban noch genauer ansehen indem er in der fail2ban.conf das LogLevel auf 1 (DEBUG) setzt, dann zeichnet fail2ban unter /var/log/fail2ban.log alles auf was es tut.
Optional lässt sich mit /usr/bin/fail2ban-regex jede Regular Expression auf Strings oder Files testen und analysieren.
Zum Beispiel können wir mit:
Code: | fail2ban-regex /var/log/webmin/miniserv.log filter.d/webmin |
unsere neue Regel gegen das vorhandene Logfile testen und erhalten in meinem Fall folgendes Ergebnis:
Code: | Running tests
=============
Use regex file : filter.d/webmin.conf
Use log file : /var/log/webmin/miniserv.log
Results
=======
Failregex:
[1] <HOST>.*"POST /session_login\.cgi.*401
Number of matches:
[1] 11 match(es)
Addresses found:
[1]
212.183.xx.xx (Fri Aug 31 06:58:21 2007)
212.183.xx.xx (Fri Aug 31 06:58:30 2007)
83.65.xx.xx (Mon Sep 03 06:27:42 2007)
83.65.xx.xx (Mon Sep 03 06:29:32 2007)
83.65.xx.xx (Mon Sep 03 06:29:54 2007)
83.65.xx.xx (Mon Sep 03 06:30:47 2007)
83.65.xx.xx (Mon Sep 03 06:39:20 2007)
83.65.xx.xx (Mon Sep 03 06:39:56 2007)
83.65.xx.xx (Mon Sep 03 07:17:31 2007)
83.65.xx.xx (Mon Sep 03 07:19:14 2007)
83.65.xx.xx (Mon Sep 03 07:19:39 2007)
Date template hits:
0 hit: Month Day Hour:Minute:Second
0 hit: Weekday Month Day Hour:Minute:Second Year
0 hit: Weekday Month Day Hour:Minute:Second
0 hit: Year/Month/Day Hour:Minute:Second
11 hit: Day/Month/Year:Hour:Minute:Second
0 hit: Year-Month-Day Hour:Minute:Second
0 hit: TAI64N
0 hit: Epoch
Success, the total number of match is 11
However, look at the above section 'Running tests' which could contain important
information. |
INFO: xx.xx wurde in Anbetracht des Datenschutzes verwendet und ist normalerweise nicht Teil der Ausgabe von fail2ban-regex
Hier wird jeder Eintrag des File berücksichtigt auf den die Regular Expression in unserer webmin.conf zutrifft.
ACHTUNG: bei einem Neustart von fail2ban wird jeder zur Zeit gebannte Host gelöscht und ist somit nach dem Neustart nicht mehr ausgesperrt, fail2ban ist damit nach dem Neustart "frisch".
ANMERKUNG: Dieses Howto basiert auf Version v0.8.0 von fail2ban und ist nur ein Beispiel, bitte nicht per Copy&Paste alle Einstellungen übernehmen, da damit die einwandfreie und gewünschte Funktion nicht gewährleistet ist.
Ich hoffe es findet jemand Nutzen an meinem ersten Beitrag in diesem, im übrigen sehr hilfreichen, Forum. |
|
Back to top |
|
|
misterjack Veteran
Joined: 03 Oct 2004 Posts: 1655
|
Posted: Mon Sep 03, 2007 10:57 am Post subject: Re: HOWTO: fail2ban+webmin |
|
|
niko86 wrote: | [...] Webmin benutze, wie viele andere vermutlich auch |
Da täuschst du dich gewaltig Ansonsten nett geschrieben, gehört aber in die Dokumentationsecke. _________________ „Meine Meinung steht fest! Bitte verwirren Sie mich nicht mit Tatsachen.“ |
|
Back to top |
|
|
think4urs11 Bodhisattva
Joined: 25 Jun 2003 Posts: 6659 Location: above the cloud
|
Posted: Mon Sep 03, 2007 5:37 pm Post subject: |
|
|
Moved from Deutsches Forum (German) to Deutsche Dokumentation.
misterjack wrote: | Ansonsten nett geschrieben, gehört aber in die Dokumentationsecke. | Hiermit geschehen _________________ Nothing is secure / Security is always a trade-off with usability / Do not assume anything / Trust no-one, nothing / Paranoia is your friend / Think for yourself |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|