wordpress-and-fail2ban-blog-header-640

WordPress fail2ban

WordPress fail2ban

Máte WordPress na vlastním serveru? Štvou Vás neustálé pokusy o uhádnutí hesla, máte plný access.log web serveru hlášek  “POST http://domain/wp-login.php HTTP/1.1″ ?

Pokud používáte na server-u nástroj fail2ban můžete zkoncovat s hádáním hesel WordPressu jednou pro vždy, velmi jednoduše, pojďme na to.

Plugin wp-fail2ban

Nainstalujte plugin wp-fail2ban (https://wordpress.org/plugins/wp-fail2ban/), tento plugin zajistí logování neplatných pokusů o přihlašení do Vašeho WordPress.

V logu /var/log/auth.log najdete podobné informace o pokusech o přihlášení.

Authentication failure for havel.mojeservery.cz from 46.119.117.47
Authentication failure for admin from 109.98.228.188
Authentication failure for havel.mojeservery.cz from 46.119.117.47

Nastavení filtru fail2ban pro WordPress

Přidáme filter (pravidlo) do fail2ban pro Wodpress (auth.log)(Debian a deriváty std v adresáři /etc/fail2ban/filter.d).

Ukázkový příklad filtru je přímo součástí wp-fail2ban pluginu, stáhněte si zip , rozbalte a použijte wodpress.conf.

root@www:/etc/fail2ban/filter.d# cat wordpress.conf 
# Fail2Ban configuration file
#
# Author: Charles Lecklider
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf


[Definition]

_daemon = wordpress

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values:  TEXT
#
failregex = ^%(__prefix_line)sAuthentication failure for .* from $
            ^%(__prefix_line)sBlocked authentication attempt for .* from $
            ^%(__prefix_line)sBlocked user enumeration attempt from $
            ^%(__prefix_line)sPingback requested from $

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

Zavedení filter pravidla do fail2ban. (debian /etc/fail2ban/jail.conf přidejte)

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
port = http,https
maxretry = 3

Reload fail2ban a hotovo!

root@www:~# /etc/init.d/fail2ban restart
root@www:~# iptables -L -n
Chain fail2ban-wordpress (1 references)
target prot opt source destination
DROP all -- 46.119.117.47 0.0.0.0/0 
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Hotovo, ani to nebolelo. Zmíněný postup vyžaduje přístup jako root na server, tedy na sdíleném hostingu není aplikovatelný, zde se poohlédněte po jiným bezpečnostních nástrojích (např. oblíbený Wordfence).

Užívejte moudře, díky za pozornost.
František Havel, MOJEservery.cz