Anleitung: Mediawiki mit Fail2ban schützen

| Keine Kommentare

In unserer Schule benutzen wir eine MediaWiki-Instanz als geschlossenes Wiki, um alles mögliche zu dokumentieren und auch um anderen Kollegen Materialien zur Verfügung zu stellen (obwohl diese Funktion mittlerweile besser durch unsere ownCloud abgebildet wird). Wie auch die anderen Dienste ist MediaWiki an unseren LDAP angebunden, so dass sich die Schüler oder in diesem Fall nur die Kollegen (da diese Wiki-Instanz nur den Kollegen zugänglich ist) nur ein Passwort merken müssen und dieses auch einfach an einer Stelle ändern können. Solch ein Single-Sign-On-Dienst (SSO) bietet einerseits viel Komfort, könnte allerdings andererseits auch ein Sicherheits-Problem darstellen. Ist ein an den SSO angeschlossener Dienst unsicher, können z.B. Passwörter schnell geknackt werden, so kann dann auf alle anderen Dienste zugegriffen werden.
internet photo

Leider ist es auch so, dass alles, was aus dem Netz erreichbar ist, mit Attacken bedacht wird. Vor allem sind dies Brute-Force-Angriffe gegen SSH, bei denen Nutzernamen und Passwörter durchprobiert werden (vor allem gegen den Nutzer root, weswegen der Login des Nutzers root über ssh in den Einstellungen generell verboten werden sollte!). Doch auch Webdienste, wie MediaWiki sind betroffen, so dass es sinnvoll ist, auch diese gegen solche Angriffe zu schützen. Hier bietet sich Fail2ban an, welches IP-Adressen, von denen eine gewisse Anzahl an erfolgloser Zugriffversuche erfolgte, für eine festzulegende Zeit sperren. Optimal nicht nur für den Einsatz bei einem SSO. Im Folgenden werde ich daher erläutern, wie man MediaWiki mit Fail2ban sichert:

Erfreulicherweise gibt es bereits eine Erweiterung für MediaWiki, die die nicht erfolgreichen Anmeldeversuche in eine Logdatei schreibt.

Also zunächst den folgenden Code dieser Extension im extensions-Ordner der MediaWiki installation unter dem Namen fail2banlog.php speichern:

'fail2banlog',
'author' =>'Laurent Chouraki',
'url' => 'https://www.mediawiki.org/wiki/Extension:Fail2banlog',
'description' => 'Writes a text file with IP of failed login as an input for the fail2ban software'
);

$wgHooks['LoginAuthenticateAudit'][] = 'logBadLogin';

function logBadLogin($user, $password, $retval) {
global $fail2banfile;
global $fail2banid;
if ( $retval == "SUCCESS"
or $retval == "RESET_PASS"
or $retval == "ABORTED"
) return true; // Do not log success or password send request, continue to next hook
$time = date ("Y-m-d H:i:s T");
$ip = $_SERVER['REMOTE_ADDR']; // wfGetIP() may yield different results for proxies
$name = $user->getName();
// append a line to the log
error_log("$time Authentication error for $name from $ip on $fail2banid\n",3,$fail2banfile);
return true; // continue to next hook
}

Anschließend – ebenfalls im Hauptverzeichnis der MediaWiki-Installation – einen Ordner erstellen, in den die Logs wandern sollen:
mkdir /var/www/html/mediawiki/log
und diesen durch den Webserver-User beschreibbar machen:
sudo chown -R www-data /var/www/html/mediawiki/log/

In der LocalSettings.php im MediaWiki-Stammverzeichnis muss noch folgendes ergänzt werden:

$fail2banfile = "/var/www/html/mediawiki/log/MWf2b.log";
$fail2banid = $wgSitename;
require_once( "$IP/extensions/fail2banlog.php" );

Somit ist der Teil, der auf der Seite von MediaWiki erledigt werden muss, schon geschafft. Abschließend noch die Einstellungen für Fail2ban:
Zunächst muss der Filter für Mediawiki ergänzt werden. Hierzu mit nano oder einem anderen Editor die Filterdatei erstellen:

sudo nano /etc/fail2ban/filter.d/mediawiki.conf

folgendes einfügen:

[Definition]
failregex = Authentication error .* from on
ignoreregex =

und die Datei speichern.

Dann noch die jail.local öffnen:

sudo nano /etc/fail2ban/jail.local

und folgendes ergänzen:

[mediawiki]
enabled = true
filter = mediawiki
action = iptables-multiport[name=mediawiki, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve", protocol=tcp]
sendmail[name=mediawiki, dest=postmaster@eigenedomain.com]
logpath = /var/www/html/mediawiki/log/MWf2b.log

und nach dem Speichern noch Fail2ban neu starten:

sudo service fail2ban restart.

Je nachdem, was für Standard-Werte (die von mir verwendeten, habe ich unten angefügt) in der jail.local gesetzt sind, sollte der Filter nun anschlagen und den Zugriff auf den Server komplett sperren.

Die von mir verwendeten Einstellungen von Fail2ban:

findtime = 172800
bantime = 2592000
maxretry = 5

Autor: Alexander Kallenbach

Mein Name ist Alexander Kallenbach. Ich schreibe hier auf Scroom über alles mögliche – vor allem aber über IT. Hierbei interessieren mich besonders freie und/oder quelloffene Software sowie deren Entwicklung und Einsatz. Außerdem interessieren mich Auswirkungen von IT auf unser Leben. Hierbei ist die Nutzung von Daten und somit auch Datenschutz ein Themenbereich.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.