Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
HOWTO: fail2ban+webmin
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation
View previous topic :: View next topic  
Author Message
niko86
n00b
n00b


Joined: 03 Sep 2007
Posts: 1

PostPosted: Mon Sep 03, 2007 6:09 am    Post subject: HOWTO: fail2ban+webmin Reply with quote

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
View user's profile Send private message
misterjack
Veteran
Veteran


Joined: 03 Oct 2004
Posts: 1486
Location: Germany -> Saxony -> Leipzig

PostPosted: Mon Sep 03, 2007 10:57 am    Post subject: Re: HOWTO: fail2ban+webmin Reply with quote

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
View user's profile Send private message
think4urs11
Administrator
Administrator


Joined: 25 Jun 2003
Posts: 6659
Location: above the cloud

PostPosted: Mon Sep 03, 2007 5:37 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Deutsche Dokumentation All times are GMT
Page 1 of 1

 
Jump to:  
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