WP fail2ban uses fail2ban to protect your WordPress site.
fail2ban is one of the simplest and most effective security measures you can implement to protect your WordPress site.
WP fail2ban provides the link between WordPress and fail2ban
:
Oct 17 20:59:54 foobar wordpress(www.example.com)[1234]: Authentication failure for admin from 192.168.0.1 Oct 17 21:00:00 foobar wordpress(www.example.com)[2345]: Accepted password for admin from 192.168.0.1
WPf2b comes with three fail2ban
filters: wordpress-hard.conf
, wordpress-soft.conf
, and wordpress-extra.conf
. These are designed to allow a split between immediate banning (hard) and the traditional more graceful approach (soft), with extra rules for custom configurations.
Failed Login Attempts
The very first feature of WPf2b: logging failed login attempts so the IP can be banned. Just as useful today as it was then.
Block User Enumeration
One of the most common precursors to a password-guessing brute force attack is user enumeration. WPf2b can block it, stopping the attack before it starts.
Block username logins
Sometimes it’s not possible to block user enumeration (for example, if your theme provides Author profiles). WPf2b can require users to login with their email address instead of their username.
Blocking Users
Anther of the older WPf2b features: the login process can be aborted for specified usernames.
Say a bot collected your site’s usernames before you blocked user enumeration. Once you’ve changed all the usernames, add the old ones to the list; anything using them will trigger a “hard” fail.
Empty Username Login Attempts
Some bots will try to login without a username; harmless, but annoying. These attempts are logged as a “soft” fail so the more persistent bots will be banned.
Spam
WPf2b will log a spammer’s IP address as a “hard” fail when their comment is marked as spam; the Premium version will also log the IP when Akismet discards “obvious” spam.
Attempted Comments
Some spam bots try to comment on everything, even things that aren’t there. WPf2b detects these and logs them as a “hard” fail.
Pingbacks
Pingbacks are a great feature, but they can be abused to attack the rest of the WWW. Rather than disable them completely, WPf2b effectively rate-limits potential attackers by logging the IP address as a “soft” fail.
Block XML‑RPC Requests [Premium]
The only reason most sites need XML‑RPC (other than Pingbacks) is for Jetpack; WPf2b Premium can block XML‑RPC while allowing Jetpack and/or Pingbacks.
Block Countries [Premium]
Sometimes you just need a bigger hammer – if you’re seeing nothing but attacks from some countries, block them!
Cloudflare and Proxy Servers
WPf2b will work with Cloudflare, and the Premium version will automatically update the list of Cloudflare IP addresses.
You can also configure your own list of trusted proxies.
syslog Dashboard Widget
Ever wondered what’s being logged? The dashboard widget shows the last 5 messages; the Premium version keeps a full history to help you analyse and prevent attacks.
Site Health Check
WPf2b will (try to) check that your fail2ban
configuration is sane and that the filters are up to date; out-of-date filters are the primary cause of WPf2b not working as well as it can.
When did you last run the Site Health tool?
mu-plugins
Support
WPf2b can easily be configured as a “must-use plugin” – see Configuration.
API to Extend WPf2b
If your plugin can detect behaviour which should be blocked, why reinvent the wheel?
Event Hooks [Premium]
Need to do something special when WPf2b detects a particular event? There’s a hook for that.
wp‑config.php
to suit your needs – see Configuration.WP_FAIL2BAN_SYSLOG_TAG_HOST
to simplify fail2ban
configuration with journald
.exec
is disabled (h/t @ahardy42).open_basedir
(h/t Jaroslav Huba).fail2ban
is running.wordpress-soft.conf
.wordpress-soft.conf
.WP_FAIL2BAN_LOG_COMMENTS_EXTRA
and WP_FAIL2BAN_COMMENT_EXTRA_LOG
; use WP_FAIL2BAN_LOG_COMMENT_ATTEMPTS
and WP_FAIL2BAN_COMMENT_ATTEMPT_LOG
instead.Please read the notesbefore upgrading.
mu-plugins
activation.WP_FAIL2BAN_USE_AUTHPRIV
– a single place to switch to LOG_AUTHPRIV
for systems without LOG_AUTH
.WP_FAIL2BAN_FREE_ONLY
.WP_FAIL2BAN_PLUGIN_LOG_OTHER
and WP_FAIL2BAN_PLUGIN_OTHER_LOG
.syslog
constants in Windows (h/t @dmarkowicz).WP_FAIL2BAN_PROXIES
(h/t @stevegrunwell).WP_FAIL2BAN_PROXIES
(h/t @stevegrunwell).wp‑config.php
(h/t @iCounsellor).wp‑load.php
is loaded via a script run from the CLI in a directory with a functions.php
file.syslog
messages.oembed
(h/t @wordpressfab).WP_FAIL2BAN_BLOCK_USER_ENUMERATION
if calling REST API or XML‑RPC from admin area.define()
s to be ignored.WP_FAIL2BAN_COMMENT_EXTRA_LOG
.hard
filters (due to limitations in older versions of WordPress), now logged as known user and matched by soft
.soft
, not hard
, filters.mu‑plugins
. See Is WPf2b Already Installed?.WP_FAIL2BAN_COMMENT_EXTRA_LOG
.WP_FAIL2BAN_PINGBACK_ERROR_LOG
(future functionality).WP_FAIL2BAN_LOG_SPAM
to use LOG_NOTICE
.WP_FAIL2BAN_SPAM_LOG
to LOG_AUTH
.WP_FAIL2BAN_LOG_COMMENTS_EXTRA
events to use LOG_NOTICE
by default.mu-plugins
.WP_FAIL2BAN_LOG_COMMENTS_EXTRA
.WP_FAIL2BAN_REMOTE_ADDR
summary.WP_FAIL2BAN_PASSWORD_REQUEST_LOG
.WP_FAIL2BAN_SPAM_LOG
.WP_FAIL2BAN_LOG_COMMENTS_EXTRA
– enable logging for attempted comments on posts which are: WP_FAIL2BAN_PROXIES
which is quite hard to test properly.wordpress-soft.conf
.WP_FAIL2BAN_XMLRPC_LOG
.WP_FAIL2BAN_REMOTE_ADDR
.WP_FAIL2BAN_PROXIES
now supports an array of IPs with PHP 7.wordpress-hard.conf
.WP_FAIL2BAN_BLOCK_USER_ENUMERATION
.WP_FAIL2BAN_OPENLOG_OPTIONS
.WP_FAIL2BAN_LOG_COMMENTS
and WP_FAIL2BAN_COMMENT_LOG
.WP_FAIL2BAN_LOG_PASSWORD_REQUEST
.WP_FAIL2BAN_LOG_SPAM
.WP_FAIL2BAN_TRUNCATE_HOST
.WP_FAIL2BAN_BLOCKED_USERS
now supports an array of users with PHP 7.wordpress-hard.conf
.wordpress-hard.conf
.WP_FAIL2BAN_SYSLOG_SHORT_TAG
.WP_FAIL2BAN_HTTP_HOST
.WP_FAIL2BAN_BLOCKED_USERS
.WP_FAIL2BAN_PROXIES
code (thanks to KyleCartmell).WP_FAIL2BAN_BLOCKED_USERS
.WP_FAIL2BAN_AUTH_LOG
.WP_FAIL2BAN_LOG_PINGBACKS
.WP_FAIL2BAN_PINGBACK_LOG
.WP_FAIL2BAN_BLOCK_USER_ENUMERATION
.WP_FAIL2BAN_PROXIES
.WP_FAIL2BAN_PROXIES
code.WP_FAIL2BAN_PROXIES
.WP_FAIL2BAN_BLOCKED_USERS
.