Schlagwort-Archive: fail2ban Intrusion Prevention System

Fail2ban ist ein in Python geschriebenes Intrusion Prevention System, das auf allen POSIX-Betriebssystemen läuft, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen.

WordPress vor Brute-Force Attacken schützen

WordPress Server vor Brute-Force Login Attacken durch fail2ban schützen

WordPress Schutz bietet sich durch mehrere Methoden an, neben Lock-Down Plugins, die IP-Adressen und Zeitstempel jedes fehlgeschlagenen Anmeldeversuchs aufzeichnen und blockieren, wird mit fail2ban die Kernel Firewall gesteuert, und damit der host für eine vorgegebene Zeit gesperrt.

  Zur Installation von fail2ban auf CentOS 7 muss das EPEL Repository hinzugefügt werden. Für Debian ist fail2ban im Standard Repository.

WordPress vor Brute-Force schützen

WordPress vor Brute-Force Login Attacken schützen mit fail2ban.

$ yum install epel-release

Die Installation hier wie folgt als root, es wird eine Standard Konfiguration bereitgestellt, und erfordert keine weiteren Anpassungen:

$ yum install fail2ban -y

Nachdem fail2ban auf dem Server installiert ist, können die Apache access_log nach Anmeldeversuchen untersucht werden.

10.241.83.170 - - [02/Jul/2017:21:23:17 +0200] "POST /xmlrpc.php HTTP/1.1" 200 406
10.241.83.170 - - [02/Jul/2017:21:23:19 +0200] "GET /wp-login.php HTTP/1.1" 200 6387
10.241.83.170 - - [02/Jul/2017:21:23:19 +0200] "POST /wp-login.php HTTP/1.1" 200 6561
10.120.13.157 - - [02/Jul/2017:21:27:55 +0200] "POST /xmlrpc.php HTTP/1.1" 200 406
10.120.13.157 - - [02/Jul/2017:21:27:56 +0200] "GET /wp-login.php HTTP/1.1" 200 6440
10.120.13.157 - - [02/Jul/2017:21:27:56 +0200] "POST /wp-login.php HTTP/1.1" 200 6614

Damit fail2ban weiss nach welchen parser in der Logdatei gesucht werden soll, wird ein Filter erzeugt, durch editieren mit vim oder anderen bevorzugten Editoren, erstellen wir die Filter Datei mit vi /etc/fail2ban/filter.d/wp-auth.conf:

# WordPress brute force auth filter: /etc/fail2ban/filter.d/wp-auth.conf:
#
# Block IPs trying to auth wp wordpress
#
[Definition]
failregex = ^<HOST> .*"POST \/wp-login\.php HTTP\/.*$
            ^<HOST> .*"POST \/xmlrpc\.php HTTP\/.*$
ignoreregex =

Die Hauptkonfiguration von fail2ban befindet sich in der Datei /etc/fail2ban/jail.conf, diese kopiert man zu jail.local, oder es genügt auch nur die zusätzliche Filter Einstellung einzutragen, die Konfiguration hinzufügen mit vi /etc/fail2ban/jail.local

[wp-auth]
enabled = true
filter = wp-auth
action = iptables-multiport[name=AuthFailures, port="http,https"]
logpath = %(apache_access_log)s
bantime = 1800
maxretry = 5

Nach 6 Anmeldeversuche (maxretry) wird für 30 min. blockiert.

Bevor fail2ban eingesetzt wird, ist ein blick in /etc/fail2ban/jail.conf gegeben, unter der Sektion [INCLUDES] sind die Pfade der gerade verwendeten Linux Distribution definiert, bei der Zeile before = paths-distro.conf, hier verwenden wir CentOS 7 dabei ist die passende Datei /etc/fail2ban/paths-fedora.conf :

[INCLUDES]
before = paths-centos.conf

Die Datei paths-fedora.conf  kopieren wir zu paths-centos.conf. Es sollen alle Logs unter /var/www/*/logs ausgelesen werden, dabei die Pfade zu den Apache Logs ggf. anpassen:

# apache server log
apache_error_log = /var/log/httpd/*error_log
apache_access_log = /var/log/httpd/*access_log

# apache virtual hosts
apache_error_log = /var/www/*/logs/*error_log
apache_access_log = /var/www/*/logs/*access_log

Nun fail2ban neu starten um den Filter zu aktivieren.

 $ systemctl restart fail2ban

fail2ban Status überprüfen wie folgt.

$ fail2ban-client status wp-auth

Der iptables Status des Filters in der Kette ausgeben.

$ iptables -vnL | grep AuthFailures

Die iptables Ausgabe des Filter AuthFailures in etwa viel folgt.

Chain f2b-AuthFailures (1 references)
 pkts bytes target     prot opt in     out     source               destination
 252K   32M RETURN     all  --  *      *       10.241.83.170/0            0.0.0.0/0
 232K   29M RETURN     all  --  *      *       10.120.13.157/0            0.0.0.0/0

Hat man sich selber durch zu viel Fehlversuche und Tests ausgesperrt, kann man sich mit folgendem Command wieder entsperren.

$ fail2ban-client set wp-auth unbanip 10.110.51.25

  Der vorteil dieser Methode ist es, durch fail2ban wird der host und alle Dienste blockiert, der Bot wird in der regel zur nächsten Webseite gehen, um die Attacken fortzusetzen, auch ssh und ftp anfragen gehen ins leere, und ICMP anfragen bleiben für die IP-Adresse unbeantwortet.

WordPress vor Brute-Force Attacken schützen

WordPress vor Angriffe schützen

Botnetze greifen WordPress weltweit an, schütze dein WordPress vor Angriffe

Der Angriff selbst ist dabei denkbar einfach, es wird versucht, sich mit „admin“ einzuloggen. Um das Passwort herauszufinden, wird schlichtweg eine entsprechende Vorlage aus tausenden Einträgen sehr schnell abgearbeitet. Es kommt deshalb bei den betroffenen Blogs in der Folge zu einer massiv erhöhten Anzahl von Login-Versuchen – „Brute Force Attack“. Was die Angriffswelle in diesem Fall so problematisch macht, ist die riesen Menge an infizierten PCs, die zum Einsatz kommt.

Gemäss Experten geht es am Ende darum, aus den Servern ein neues Botnet aufzubauen. Das wäre dann um ein Vielfaches mächtiger als das jetzige, weil die Server beispielsweise eine wesentlich bessere Internetanbindung haben als infizierte PCs.

Die wichtigsten Massnahmen um ein WordPress zu schützen

Den Account „admin“ nach Möglichkeit ganz vermeiden. Er ist bei WordPress-Blogs so verbreitet, dass er – so wie auch in diesem Fall – als Hebel für den Angriff genutzt wird. In diesem Blog wird ebenfalls aufgezeigt, wie man den „admin“-Loginname ändert.

Eine weitere Möglichkeit WordPress vor Angriffe zu schützen gibt es, in dem man den Admin-Bereich von WordPress selbst mit einem Passwort schützt. Ohne dieses „Master-Passwort“ kommt man gar nicht erst auf die Login-Seite fürs back-end. Das kann gerade bei Brute-Force-Attacken sehr sinnvoll sein, da der automatische Angriff sehr früh abgefangen wird und den Server dadurch weniger belastet. Auch sollte das MySQL front-end nicht über „phpMyAdmin“ oder „MyAdmin“ in der URL abrufbar sein, hier sollte ein Apache Alias oder ein Symlink, z.B. „db_manager“ angelegt werden, damit ist man aus der Schusslinie von Brute-Force-Attacken, zusätzlich schützt auch ein htaccess-Passwort.

Schutz vor Angriffe mit fail2ban

Noch effizienter und den Server nicht belastend, wirkt sich der Schutz vor Angriffe durch den Einsatz von fail2ban aus.

Dazu wird fail2ban installiert, hier bei CentOS, Fedora.

wget https://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm
yum repolist
yum install fail2ban
chkconfig --add fail2ban
chkconfig fail2ban on
service fail2ban start

Bei Debian und Ubuntu kann fail2ban direkt aus dem Standard Repo installiert werden.

sudo apt install -y fail2ban

Nach der Installation wird die Filter Definition für WordPress-„wp-login.php“ erstellt.

vi /etc/fail2ban/filter.d/wp-auth.conf

[Definition]
failregex = ^<HOST> .* "POST .*wp-login\.php HTTP.*"
ignoreregex =

Und nun die jail-Konfiguration hinzufügen.

vi /etc/fail2ban/jail.conf

[wp-auth]
enabled = true
filter = wp-auth
action = iptables-multiport[name=wp-auth, port="http,https"]
         mail[name=wp-auth, dest=root]
logpath = /home/www/*/web/logs/access_log
bantime = 3600
maxretry = 6

Die Änderungen aktivieren mit service fail2ban restart

Es wird nun die Brute Force Attacke nach 6 fehlerhaften Login-Versuche, den Zugang für eine Stunde von der Firewall blockiert, geht die Attacke nach einer Stunde weiter, beginnt die Blockierung erneut.