{"id":1045,"date":"2012-10-19T22:48:27","date_gmt":"2012-10-19T22:48:27","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/wp-fail2ban\/"},"modified":"2025-04-29T15:21:02","modified_gmt":"2025-04-29T15:21:02","slug":"wp-fail2ban","status":"publish","type":"plugin","link":"https:\/\/lt.wordpress.org\/plugins\/wp-fail2ban\/","author":8584657,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"5.4.1","stable_tag":"5.4.1","tested":"6.8.5","requires":"4.2","requires_php":"7.4","requires_plugins":null,"header_name":"WP fail2ban","header_author":"Charles Lecklider","header_description":"","assets_banners_color":"668348","last_updated":"2025-04-29 15:21:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wp-fail2ban.com\/","header_author_uri":"https:\/\/invis.net\/","rating":4.2,"author_block_rating":0,"active_installs":70000,"downloads":1978291,"num_ratings":71,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"invisnet","date":"2012-10-19 22:49:56"},"1.1":{"tag":"1.1","author":"invisnet","date":"2012-11-18 19:54:41"},"1.2":{"tag":"1.2","author":"invisnet","date":"2012-12-20 09:10:51"},"1.2.1":{"tag":"1.2.1","author":"invisnet","date":"2013-04-12 21:14:41"},"2.0.0":{"tag":"2.0.0","author":"invisnet","date":"2013-08-05 15:30:41"},"2.1.0":{"tag":"2.1.0","author":"invisnet","date":"2013-08-28 22:23:44"},"2.1.1":{"tag":"2.1.1","author":"invisnet","date":"2014-03-03 15:29:31"},"2.2.0":{"tag":"2.2.0","author":"invisnet","date":"2014-08-07 20:05:54"},"2.2.1":{"tag":"2.2.1","author":"invisnet","date":"2014-08-09 23:31:18"},"2.3.0":{"tag":"2.3.0","author":"invisnet","date":"2014-11-03 12:59:37"},"2.3.1":{"tag":"2.3.1","author":"invisnet","date":"2015-10-21 17:04:19"},"2.3.2":{"tag":"2.3.2","author":"invisnet","date":"2015-10-21 17:17:36"},"3.0.0":{"tag":"3.0.0","author":"invisnet","date":"2016-03-28 14:27:59"},"3.0.1":{"tag":"3.0.1","author":"invisnet","date":"2016-04-21 19:11:08"},"3.0.2":{"tag":"3.0.2","author":"invisnet","date":"2016-06-23 12:01:34"},"3.0.3":{"tag":"3.0.3","author":"invisnet","date":"2016-07-07 15:00:59"},"3.5.0":{"tag":"3.5.0","author":"invisnet","date":"2016-08-07 10:51:12"},"3.5.1":{"tag":"3.5.1","author":"invisnet","date":"2016-08-09 17:38:29"},"3.5.3":{"tag":"3.5.3","author":"invisnet","date":"2017-07-04 15:51:59"},"3.6.0":{"tag":"3.6.0","author":"invisnet","date":"2018-12-15 06:21:30"},"4.3.0.4":{"tag":"4.3.0.4","author":"invisnet","date":"2020-07-27 11:27:20"},"4.3.0.5":{"tag":"4.3.0.5","author":"invisnet","date":"2020-07-30 11:11:26"},"4.3.0.6":{"tag":"4.3.0.6","author":"invisnet","date":"2020-08-14 13:25:36"},"4.3.0.7":{"tag":"4.3.0.7","author":"invisnet","date":"2020-08-15 15:10:04"},"4.3.0.8":{"tag":"4.3.0.8","author":"invisnet","date":"2020-12-11 14:35:23"},"4.3.0.9":{"tag":"4.3.0.9","author":"invisnet","date":"2021-07-27 00:30:29"},"4.4.0.3":{"tag":"4.4.0.3","author":"invisnet","date":"2022-02-26 23:44:56"},"4.4.0.4":{"tag":"4.4.0.4","author":"invisnet","date":"2022-03-04 17:52:28"},"4.4.0.6":{"tag":"4.4.0.6","author":"invisnet","date":"2022-10-02 21:58:39"},"4.4.0.8":{"tag":"4.4.0.8","author":"invisnet","date":"2022-11-03 12:14:01"},"4.4.0.9":{"tag":"4.4.0.9","author":"invisnet","date":"2022-12-08 18:32:52"},"5.0.0":{"tag":"5.0.0","author":"invisnet","date":"2023-02-16 11:05:46"},"5.0.1":{"tag":"5.0.1","author":"invisnet","date":"2023-04-01 21:04:37"},"5.1.0.5":{"tag":"5.1.0.5","author":"invisnet","date":"2023-06-18 14:47:30"},"5.1.1":{"tag":"5.1.1","author":"invisnet","date":"2023-07-05 16:00:00"},"5.2.0":{"tag":"5.2.0","author":"invisnet","date":"2023-08-13 03:28:28"},"5.2.1":{"tag":"5.2.1","author":"invisnet","date":"2023-09-21 15:55:30"},"5.2.2":{"tag":"5.2.2","author":"invisnet","date":"2024-01-28 23:11:37"},"5.2.2.1":{"tag":"5.2.2.1","author":"invisnet","date":"2024-04-04 17:05:36"},"5.3.0":{"tag":"5.3.0","author":"invisnet","date":"2024-07-12 12:54:24"},"5.3.1":{"tag":"5.3.1","author":"invisnet","date":"2024-07-28 15:59:50"},"5.3.2":{"tag":"5.3.2","author":"invisnet","date":"2024-08-05 17:27:26"},"5.3.3":{"tag":"5.3.3","author":"invisnet","date":"2024-10-17 12:32:57"},"5.3.4":{"tag":"5.3.4","author":"invisnet","date":"2024-11-10 14:39:32"},"5.4.0":{"tag":"5.4.0","author":"invisnet","date":"2025-01-27 14:16:26"},"5.4.0.1":{"tag":"5.4.0.1","author":"invisnet","date":"2025-01-28 18:04:48"},"5.4.1":{"tag":"5.4.1","author":"invisnet","date":"2025-04-29 15:21:02"}},"upgrade_notice":{"5.4.1":"<p>This is a bug-fix release.  You do not need to update your filters from 5.1.0.<\/p>","5.4.0.1":"<p>This is an important bug-fix release. You do not need to update your filters from 5.1.0.<\/p>","5.4.0":"<p>This is a feature release. You do not need to update your filters from 5.1.0.<\/p>","5.3.4":"<p>This is a bug-fix release.  You do not need to update your filters from 5.1.0.<\/p>","5.3.3":"<p>This is a bug-fix release.  You do not need to update your filters from 5.1.0.<\/p>","5.3.2":"<p>This is a minor release.  You do not need to update your filters from 5.1.0.<\/p>","5.3.1":"<p>This is a bug-fix release.  You do not need to update your filters from 5.1.0.<\/p>","5.3.0":"<p>This is a feature release. You do not need to update your filters from 5.1.0.<\/p>\n\n<p>[\/\/]: # fs_free_only_begin<\/p>","5.2.2":"<p>This is a feature release. If you are using the WAF you will need to check the &quot;WordPress core&quot; setting in the WAF Options section.\n[\/\/]: # fs_premium_only_end<\/p>","5.2.1":"<p>This is a minor release. You do not need to update your filters from 5.1.0.<\/p>\n\n<p>[\/\/]: # fs_free_only_begin<\/p>","5.2.0":"<p>This is a feature release. If you are using the WAF you will need up update your <code>fail2ban<\/code> filters and create a new jail; otherwise, things will continue to work as before.\n[\/\/]: # fs_premium_only_end<\/p>","5.1.1":"<p>This is a minor release. You do not need to update your filters from 5.1.0.<\/p>","5.1.0.5":"<p>This is a feature release. To take advantage of the new features you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before.<\/p>","5.0.1":"<p>This is a minor release. You do not need to update your filters from 5.0.0.<\/p>","5.0.0":"<p>PLEASE READ THE NOTES BEFORE UPGRADING.\nThis is a major feature release. You must update your filters.<\/p>","4.4.0.9":"<p>This is a minor release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.8":"<p>This is a bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.7":"<p>This is a Premium-only bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.6":"<p>This is a bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.5":"<p>This is a bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.4":"<p>This is a bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.3":"<p>This is a bug-fix release. You do not need to update your filters from 4.4.0.<\/p>","4.4.0.2":"<p>This is a feature release. To take advantage of the new features, including the Blocklist Add-on, you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before.\n<strong>Blocklist Add-on users<\/strong>: Please disable the Blocklist plugin before upgrading <em>WP fail2ban<\/em>, then upgrade the Blocklist plugin and reactivate it.<\/p>","4.3.2.2":"<p>This is a bug-fix release. You do not need to update your filters from 4.3.2.0.<\/p>","4.3.2.1":"<p>This is a bug-fix release. You do not need to update your filters from 4.3.2.0.<\/p>","4.3.2.0":"<p>This is a feature release. To take advantage of the new features you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before. Premium users: Please backup your database before upgrading.<\/p>","4.3.0.7":"<p>This is a bug-fix release. You do not need to update your filters from 4.3.0. Premium users: Please update your MaxMind database.<\/p>","4.3.0.6":"<p>This is a bug-fix release. You do not need to update your filters from 4.3.0.<\/p>","4.3.0.5":"<p>This is a bug-fix release. You do not need to update your filters from 4.3.0.<\/p>","4.3.0.4":"<p>This is a feature release. To take advantage of the new features you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before. Premium users: Please backup your database before upgrading.<\/p>","4.2.8":"<p>This is a bug-fix release. You do not need to update your filters from 4.1.0.<\/p>","4.2.7.1":"<p>This is a bug-fix release. You do not need to update your filters from 4.1.0.<\/p>","4.2.7":"<p>This is a bug-fix release. You do not need to update your filters from 4.1.0.<\/p>","4.2.6":"<p>This is a minor release. You do not need to update your filters from 4.1.0.<\/p>","4.2.5.1":"<p>This is a premium-only patch release. If you are on PHP 7.0 or later you do not need to upgrade.<\/p>","4.2.5":"<p>This is a minor release. You do not need to update your filters from 4.1.0.<\/p>","4.2.4":"<p>This is a minor release. You do not need to update your filters from 4.1.0.<\/p>","4.2.3":"<p>This is a bug-fix release. You do not need to update your filters from 4.1.0.<\/p>","4.2.2":"<p>You do not need to update your filters from 4.1.0.<\/p>","4.2.1":"<p>You do not need to update your filters from 4.1.0.<\/p>","4.1.0":"<p>To take advantage of the new features you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before.<\/p>","4.0.5":"<p>This is a security fix (Freemius SDK): all 4.x users are strongly advised to upgrade immediately. You do not need to update your filters from 4.0.1.<\/p>","4.0.4":"<p>This is a bug-fix. You do not need to update your filters from 4.0.1.<\/p>","4.0.3":"<p>This is a bug-fix. You do not need to update your filters from 4.0.1.<\/p>","4.0.2":"<p>This is a bug-fix. You do not need to update your filters from 4.0.1.<\/p>","4.0.1":"<p>To take advantage of the new features you will need up update your <code>fail2ban<\/code> filters; existing filters will continue to work as before.<\/p>","3.6.0":"<p>You will need up update your <code>fail2ban<\/code> filters.<\/p>","3.5.3":"<p>You will need up update your <code>fail2ban<\/code> filters.<\/p>","3.5.1":"<p>Bug-fix: disable <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCK_USER_ENUMERATION<\/code><\/a> in admin area....<\/p>","3.5.0":"<p>You will need up update your <code>fail2ban<\/code> filters.<\/p>","3.0.3":"<p>You will need up update your <code>fail2ban<\/code> filters.<\/p>","3.0.0":"<p>BREAKING CHANGE: The <code>fail2ban<\/code> filters have been split into two files. You will need up update your <code>fail2ban<\/code> configuration.<\/p>","2.3.0":"<p>Fix for <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a>; if you\u2019re not using it you can safely skip this release.<\/p>","2.2.1":"<p>Bug-fix.<\/p>","2.2.0":"<p>BREAKING CHANGE:  <code>WP_FAIL2BAN_LOG<\/code> has been renamed to <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_AUTH_LOG<\/code><\/a>.<\/p>\n\n<p>Pingbacks are getting a lot of attention recently, so <em>WPf2b<\/em> can now log them.\nThe <code>wordpress.conf<\/code> filter has been updated; you will need to update your <code>fail2ban<\/code> configuration.<\/p>","2.1.0":"<p>The <code>wordpress.conf<\/code> filter has been updated; you will need to update your <code>fail2ban<\/code> configuration.<\/p>","2.0.1":"<p>Bug-fix in experimental code; still an experimental release.<\/p>","2.0.0":"<p>This is an experimental release. If your current version is working and you\u2019re not interested in the new features, skip this version - wait for 2.1.0. For those that do want to test this release, note that <code>wordpress.conf<\/code> has changed - you\u2019ll need to copy it to <code>fail2ban\/filters.d<\/code> again.<\/p>"},"ratings":{"1":10,"2":4,"3":2,"4":4,"5":51},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2814701,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2814701,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":2814741,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":2814741,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1","1.2","1.2.1","2.0.0","2.1.0","2.1.1","2.2.0","2.2.1","2.3.0","2.3.1","2.3.2","3.0.0","3.0.1","3.0.2","3.0.3","3.5.0","3.5.1","3.5.3","3.6.0","4.3.0.4","4.3.0.5","4.3.0.6","4.3.0.7","4.3.0.8","4.3.0.9","4.4.0.3","4.4.0.4","4.4.0.6","4.4.0.8","4.4.0.9","5.0.0","5.0.1","5.1.0.5","5.1.1","5.2.0","5.2.1","5.2.2","5.2.2.1","5.3.0","5.3.1","5.3.2","5.3.3","5.3.4","5.4.0","5.4.0.1","5.4.1"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2439,9229,602,600,9231],"plugin_category":[38,54],"plugin_contributors":[78764],"plugin_business_model":[],"class_list":["post-1045","plugin","type-plugin","status-publish","hentry","plugin_tags-brute-force","plugin_tags-fail2ban","plugin_tags-login","plugin_tags-security","plugin_tags-syslog","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-invisnet","plugin_committers-invisnet"],"banners":{"banner":"https:\/\/ps.w.org\/wp-fail2ban\/assets\/banner-772x250.png?rev=2814741","banner_2x":"https:\/\/ps.w.org\/wp-fail2ban\/assets\/banner-1544x500.png?rev=2814741","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wp-fail2ban\/assets\/icon-128x128.png?rev=2814701","icon_2x":"https:\/\/ps.w.org\/wp-fail2ban\/assets\/icon-256x256.png?rev=2814701","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><a href=\"http:\/\/www.fail2ban.org\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">fail2ban<\/a> is one of the simplest and most effective security measures you can implement to protect your WordPress site.<\/p>\n\n<p><em>WP fail2ban<\/em> provides the link between WordPress and <code>fail2ban<\/code>:<\/p>\n\n<pre><code>Oct 17 20:59:54 foobar wordpress(www.example.com)[1234]: Authentication failure for admin from 192.168.0.1\nOct 17 21:00:00 foobar wordpress(www.example.com)[2345]: Accepted password for admin from 192.168.0.1\n<\/code><\/pre>\n\n<p><em>WPf2b<\/em> comes with three <code>fail2ban<\/code> filters: <code>wordpress-hard.conf<\/code>, <code>wordpress-soft.conf<\/code>, and <code>wordpress-extra.conf<\/code>. These are designed to allow a split between immediate banning (hard) and the traditional more graceful approach (soft), with extra rules for custom configurations.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><p><strong>Failed Login Attempts<\/strong>\nThe very first feature of <em>WPf2b<\/em>: logging failed login attempts so the IP can be banned. Just as useful today as it was then.<\/p><\/li>\n<li><p><strong>Block User Enumeration<\/strong>\nOne of the most common precursors to a password-guessing brute force attack is <a href=\"https:\/\/wp-fail2ban.com\/features\/block-user-enumeration\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">user enumeration<\/a>. <em>WPf2b<\/em> can block it, stopping the attack before it starts.<\/p><\/li>\n<li><p><strong>Block username logins<\/strong>\nSometimes it's not possible to block user enumeration (for example, if your theme provides Author profiles). <em>WPf2b<\/em> can require users to login with their email address instead of their username.<\/p><\/li>\n<li><p><strong>Blocking Users<\/strong>\nAnther of the older <em>WPf2b<\/em> features: the login process can be aborted for specified usernames.\nSay a bot collected your site's usernames before you blocked user enumeration. Once you\u2019ve changed all the usernames, add the old ones to the list; anything using them will trigger a \"hard\" fail.<\/p><\/li>\n<li><p><strong>Empty Username Login Attempts<\/strong>\nSome 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.<\/p><\/li>\n<li><p><strong>Spam<\/strong>\n<em>WPf2b<\/em> 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.<\/p><\/li>\n<li><p><strong>Attempted Comments<\/strong>\nSome spam bots try to comment on everything, even things that aren't there. <em>WPf2b<\/em> detects these and logs them as a \"hard\" fail.<\/p><\/li>\n<li><p><strong>Pingbacks<\/strong>\nPingbacks are a great feature, but they can be abused to attack the rest of the WWW. Rather than disable them completely, <em>WPf2b<\/em> effectively rate-limits potential attackers by logging the IP address as a \"soft\" fail.<\/p><\/li>\n<li><p><strong>Block XML\u2011RPC Requests<\/strong> [Premium]\nThe only reason most sites need XML\u2011RPC (other than Pingbacks) is for Jetpack; <em>WPf2b<\/em> Premium can block XML\u2011RPC while allowing Jetpack and\/or Pingbacks.<\/p><\/li>\n<li><p><strong>Block Countries<\/strong> [Premium]\nSometimes you just need a bigger hammer - if you\u2019re seeing nothing but attacks from some countries, block them!<\/p><\/li>\n<li><p><strong>Cloudflare and Proxy Servers<\/strong>\n<em>WPf2b<\/em> will work with <a href=\"https:\/\/wp-fail2ban.com\/features\/cloudflare-and-proxy-servers\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">Cloudflare<\/a>, and the Premium version will automatically update the list of Cloudflare IP addresses.\nYou can also configure your own list of trusted proxies.<\/p><\/li>\n<li><p><strong>syslog Dashboard Widget<\/strong>\nEver 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.<\/p><\/li>\n<li><p><strong>Site Health Check<\/strong>\n<em>WPf2b<\/em> will (try to) check that your <code>fail2ban<\/code> configuration is sane and that the filters are up to date; out-of-date filters are the primary cause of <em>WPf2b<\/em> not working as well as it can.\nWhen did you last run the Site Health tool?<\/p><\/li>\n<li><p><strong><code>mu-plugins<\/code> Support<\/strong>\n<em>WPf2b<\/em> can easily be configured as a \"must-use plugin\" - see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/5.4\/configuration.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1#mu-plugins-support\">Configuration<\/a>.<\/p><\/li>\n<li><p><strong>API to Extend <em>WPf2b<\/em><\/strong>\nIf your plugin can detect behaviour which should be blocked, why reinvent the wheel?<\/p><\/li>\n<li><p><strong>Event Hooks<\/strong> [Premium]\nNeed to do something special when <em>WPf2b<\/em> detects a particular event? <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/5.4\/developers\/events.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">There's a hook for that<\/a>.<\/p><\/li>\n<\/ul>\n\n<h4>Premium<\/h4>\n\n<ul>\n<li>Web Application Firewall (WAF)<\/li>\n<li>Akismet support.<\/li>\n<li>Block XML\u2011RPC while allowing Jetpack and\/or Pingbacks.<\/li>\n<li>Block Countries.<\/li>\n<li>Auto-update Cloudflare IPs.<\/li>\n<li>Event log.<\/li>\n<li>Event hooks.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install via the Plugin Directory, or upload to your plugins directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Edit <code>wp\u2011config.php<\/code> to suit your needs - see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/5.4\/configuration.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">Configuration<\/a>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20wp%20fail2ban%20replace%20fail2ban%3F'><h3>Does WP fail2ban replace fail2ban?<\/h3><\/dt>\n<dd><p>No. <em>WP fail2ban<\/em> is an \"integration\" or \"bridge\" between WordPress and <code>fail2ban<\/code>. It enables <code>fail2ban<\/code> to recognise WordPress-specific events by providing log entries that <code>fail2ban<\/code> can monitor and act upon.<\/p>\n\n<p>In other words, <em>WP fail2ban<\/em> itself doesn't directly ban IP addresses or manage firewall rules; you must have <code>fail2ban<\/code> installed and correctly configured on your server.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>5.4.1-LTS<\/h4>\n\n<ul>\n<li>Fix compatibility for WordPress 6.8.<\/li>\n<li>Fix incorrect dependency requiring PHP&gt;=8.1. [Premium only]<\/li>\n<li>Add license for Packagist.<\/li>\n<\/ul>\n\n<h4>5.4.0-LTS<\/h4>\n\n<ul>\n<li>Add support for Composer. [Canonical only]<\/li>\n<li>Add support for AspirePress Update. [Canonical only]<\/li>\n<li>Add support for GitHub Updater. [Canonical only]<\/li>\n<li>Improve i18n.<\/li>\n<li>Fix harmless warning in Site Health filters check (h\/t Rodolphe).<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.3.4<\/h4>\n\n<ul>\n<li>Improve Site Health filter messages (h\/t @yardstudio).<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.3.3<\/h4>\n\n<ul>\n<li>Fix activation bug when <code>$wp_scripts<\/code> is uninitialised. [Premium only]<\/li>\n<li>Fix world map dashboard widget. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.3.2<\/h4>\n\n<ul>\n<li>Drop Site Health checks for free add\u2011ons.<\/li>\n<\/ul>\n\n<h4>5.3.1<\/h4>\n\n<ul>\n<li>Fix regression in plugin message registration.<\/li>\n<\/ul>\n\n<h4>5.3.0<\/h4>\n\n<ul>\n<li>Add <code>WP_FAIL2BAN_SYSLOG_TAG_HOST<\/code> to simplify <code>fail2ban<\/code> configuration with <code>journald<\/code>.<\/li>\n<li>Fix database upgrade when jQuery not loaded. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.2.2<\/h4>\n\n<ul>\n<li>Fix regression in Site Health when <code>exec<\/code> is disabled (h\/t @ahardy42).<\/li>\n<li>PHP 8.3: Fix harmless warning on About tab.<\/li>\n<li>WAF: Add support for themes that update image size options (h\/t Jerker Wredenmark). [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.2.1<\/h4>\n\n<ul>\n<li>Fix bug in WAF when not logged in (h\/t Rudi Diedrich). [Premium only]<\/li>\n<li>Site Health: Add support for <code>open_basedir<\/code> (h\/t Jaroslav Huba).<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.2.0<\/h4>\n\n<ul>\n<li>WAF: Add new filter file for WAF events. [Premium only]<\/li>\n<li>WAF: Add feature: prevent unauthorised user deletion. [Premium only].<\/li>\n<li>Fix untrusted proxy message.<\/li>\n<li>Work-around for WooCommerce bug causing double logging of password reset requests (h\/t @anuja).<\/li>\n<li>Site Health: Improve notifications.<\/li>\n<\/ul>\n\n<h4>5.1.1<\/h4>\n\n<ul>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.1.0<\/h4>\n\n<ul>\n<li><strong>Web Application Firewall<\/strong>. [Premium only]<\/li>\n<li>Add PTR record lookup to event report. [Premium only]<\/li>\n<li>Improve report performance. [Premium only]<\/li>\n<li>Site Health: Check <code>fail2ban<\/code> is running.<\/li>\n<li>Site Health: Obsolete Filters - Detect DigitalOcean Droplet and link to documentation.<\/li>\n<li>Fix harmless warning (h\/t @Yavor).<\/li>\n<li>Fix warning caused by bug in Google Sitekit (h\/t @DaWolfey).<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.0.1<\/h4>\n\n<ul>\n<li>Tweak Site Health notifications.<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>5.0.0 \"Delphi\"<\/h4>\n\n<ul>\n<li><strong>IPv6 support<\/strong>.<\/li>\n<li><strong>Akismet support<\/strong>. [Premium only]<\/li>\n<li><strong>Auto-update Cloudflare IPs<\/strong>. [Premium only]<\/li>\n<li><strong>Event hooks<\/strong>. [Premium only]<\/li>\n<li><strong>Performance improvements<\/strong>:\n\n<ul>\n<li>Improve reports. [Premium only]<\/li>\n<li>Cache IP lists. [Premium only]<\/li>\n<li>Cache Plugin API message registration. [Premium only]<\/li>\n<\/ul><\/li>\n<li>Site Health: Check installed filters against previous versions.<\/li>\n<li>Moved \"Authentication attempt for unknown user\" to <code>wordpress-soft.conf<\/code>.<\/li>\n<li>Moved \"extra\" Comment messages to <code>wordpress-soft.conf<\/code>.<\/li>\n<li>Show date\/time in local timezone (h\/t @geniusmedia). [Premium only]<\/li>\n<li>Deprecate <code>WP_FAIL2BAN_LOG_COMMENTS_EXTRA<\/code> and <code>WP_FAIL2BAN_COMMENT_EXTRA_LOG<\/code>; use <code>WP_FAIL2BAN_LOG_COMMENT_ATTEMPTS<\/code> and <code>WP_FAIL2BAN_COMMENT_ATTEMPT_LOG<\/code> instead.<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<p>Please <a href=\"https:\/\/wp-fail2ban.com\/blog\/2023\/01\/16\/upgrading-to-version-5\/\">read the notes<\/a> <strong>before<\/strong> upgrading.<\/p>\n\n<h4>4.4.0.9<\/h4>\n\n<ul>\n<li>Preparation for v5: prevent auto-updating across major release.<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.4.0.8<\/h4>\n\n<ul>\n<li>Back-port fix for <code>mu-plugins<\/code> activation.<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.4.0.7<\/h4>\n\n<ul>\n<li>Back-port fix for type error in menu-fixer when viewing Event Log (h\/t @geniusmedia). [Premium only]<\/li>\n<li>Back-port fixes for event summaries. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.4.0.6<\/h4>\n\n<ul>\n<li>Fix initialisation error in event log. [Premium only]<\/li>\n<li>Fix type error in event log when no events available. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.4.0.5<\/h4>\n\n<ul>\n<li>Fix type error on Remote IPs tab with no MaxMind database configured (h\/t @Tobias\u2011Conrad). [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.4.0.4<\/h4>\n\n<ul>\n<li>Fix warning with array of blocked users (h\/t @Znuff).<\/li>\n<li>Fix reports. [Premium only]<\/li>\n<\/ul>\n\n<h4>4.4.0.3<\/h4>\n\n<ul>\n<li>Fix type error (h\/t @brianshim).<\/li>\n<\/ul>\n\n<h4>4.4.0.2<\/h4>\n\n<ul>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.4\/defines\/WP_FAIL2BAN_USE_AUTHPRIV.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_USE_AUTHPRIV<\/code><\/a> - a single place to switch to <code>LOG_AUTHPRIV<\/code> for systems without <code>LOG_AUTH<\/code>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.4\/defines\/WP_FAIL2BAN_FREE_ONLY.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_FREE_ONLY<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.4\/defines\/WP_FAIL2BAN_PLUGIN_LOG_OTHER.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PLUGIN_LOG_OTHER<\/code><\/a> and <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.4\/defines\/WP_FAIL2BAN_PLUGIN_OTHER_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PLUGIN_OTHER_LOG<\/code><\/a>.<\/li>\n<li>Improve performance.<\/li>\n<li>Moved cron event to update trusted Cloudflare IP ranges to the Cloudflare add-on. [Premium only]<\/li>\n<li>Add support for Pingbacks while blocking XML\u2011RPC. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.3.2.2<\/h4>\n\n<ul>\n<li>Add cron event to update trusted Cloudflare IP ranges weekly. [Premium only]<\/li>\n<li>Add cron event to update trusted Jetpack IP ranges weekly. [Premium only]<\/li>\n<li>Add cron event to update MaxMind database weekly. [Premium only]<\/li>\n<li>Workaround for missing <code>syslog<\/code> constants in Windows (h\/t @dmarkowicz).<\/li>\n<li>Clarify upgrade message on Last 5 Messages widget. [Free only]<\/li>\n<li>Merge About and Status tabs. [Premium only]<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.3.2.1<\/h4>\n\n<ul>\n<li>Add support for <a href=\"https:\/\/addons.wp-fail2ban.com\/blocklist\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">WP fail2ban Blocklist<\/a>.<\/li>\n<li>Add new <a href=\"https:\/\/github.com\/wp-fail2ban\/conf.d\/\">Standard Configurations<\/a>.<\/li>\n<li>Improve Help links.<\/li>\n<li>Fix logging checkboxes [Premium only].<\/li>\n<li>Fix incorrect constant for disabling last messages (h\/t @kermina).<\/li>\n<li>Fix false positive with blocking user enumeration when a Contributor tries to list posts by another user.<\/li>\n<li>Fix index issue with ancient versions of MySQL.<\/li>\n<li>Fix harmless warning with a defined but empty <code>WP_FAIL2BAN_PROXIES<\/code> (h\/t @stevegrunwell).<\/li>\n<li>Back-port new Block event class.<\/li>\n<li>Update Freemius library.<\/li>\n<li>Change to GPLv3 with additional terms as per Section 7.<\/li>\n<\/ul>\n\n<h4>4.3.2.0<\/h4>\n\n<ul>\n<li>Add support for blocking by Country. [Premium only]<\/li>\n<li>Add XML\u2011RPC blocking; allow trusted IPs and Jetpack (h\/t @mhweb). [Premium only]<\/li>\n<\/ul>\n\n<h4>4.3.0.9<\/h4>\n\n<ul>\n<li>Fix incorrect constant for disabling last messages (h\/t @kermina).<\/li>\n<li>Fix false positive with blocking user enumeration when a Contributor tries to list posts by another user.<\/li>\n<li>Fix index issue with ancient versions of MySQL. [Premium only]<\/li>\n<li>Fix harmless warning with a defined but empty <code>WP_FAIL2BAN_PROXIES<\/code> (h\/t @stevegrunwell).<\/li>\n<li>Back-port new Block event class.<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.3.0.8<\/h4>\n\n<ul>\n<li>Workaround issue with user enumeration blocking being triggered by Gutenberg pre\u2011loading Author list. (h\/t @brrrrrrrt) [WordPress only]<\/li>\n<\/ul>\n\n<h4>4.3.0.7<\/h4>\n\n<ul>\n<li>Finish refactoring to allow inclusion of constants in <code>wp\u2011config.php<\/code> (h\/t @iCounsellor).<\/li>\n<li>Fix MaxMind database update. [Premium only]<\/li>\n<\/ul>\n\n<h4>4.3.0.6<\/h4>\n\n<ul>\n<li>Fix Forbidden error on Posts page for roles below Editor when user enumeration blocking enabled. [WordPress only]<\/li>\n<\/ul>\n\n<h4>4.3.0.5<\/h4>\n\n<ul>\n<li>Fix empty username detection for multisite.<\/li>\n<li>Fix harmless warning when activating new multisite install.<\/li>\n<li>Fix esoteric edge-case where <code>wp\u2011load.php<\/code> is loaded via a script run from the CLI in a directory with a <code>functions.php<\/code> file.<\/li>\n<\/ul>\n\n<h4>4.3.0.4 \"Columbo\"<\/h4>\n\n<ul>\n<li>Add new dashboard widget: last 5 <code>syslog<\/code> messages.<\/li>\n<li>Add full <a href=\"https:\/\/wp-fail2ban.com\/features\/multisite-networks\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">multisite support<\/a>.<\/li>\n<li>Add <a href=\"https:\/\/wp-fail2ban.com\/features\/block-username-logins\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">username login blocking<\/a> (force login with email).<\/li>\n<li>Add <a href=\"https:\/\/wp-fail2ban.com\/features\/empty-username-logging\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">separate logging<\/a> for login attempts with an empty username.<\/li>\n<li>Improve <a href=\"https:\/\/wp-fail2ban.com\/features\/block-user-enumeration\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">user enumeration blocking<\/a> compatibility with the WordPress block editor (Gutenberg).<\/li>\n<li>Bump the minimum PHP version to 5.6.<\/li>\n<\/ul>\n\n<h4>4.2.8<\/h4>\n\n<ul>\n<li>Add link to new <a href=\"https:\/\/forums.invis.net\/c\/wp-fail2ban\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">support forum<\/a>.<\/li>\n<li>Fix user enumeration conflict with Gutenberg (h\/t @dinghy).<\/li>\n<li>Fix notices wrt admin menu (h\/t @marioivangf).<\/li>\n<li>Fix harmless XDebug notice (h\/t @dinghy).<\/li>\n<li>Update Freemius library.<\/li>\n<\/ul>\n\n<h4>4.2.7.1<\/h4>\n\n<ul>\n<li>Fix error when blocking user enumeration via <code>oembed<\/code> (h\/t @wordpressfab).<\/li>\n<\/ul>\n\n<h4>4.2.7<\/h4>\n\n<ul>\n<li>Fix error when blocking user enumeration via REST.<\/li>\n<li>Fix buttons on Settings tabs.<\/li>\n<\/ul>\n\n<h4>4.2.6<\/h4>\n\n<ul>\n<li>Add support for <a href=\"https:\/\/wp-fail2ban.com\/add-ons\/remote-tools\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">Remote Tools<\/a> add-on.<\/li>\n<li>Add support for the new ClassicPress security page.<\/li>\n<li>Improved user enumeration blocking.<\/li>\n<\/ul>\n\n<h4>4.2.5.1<\/h4>\n\n<ul>\n<li>Fix premium activation issue with PHP &lt; 7.0.<\/li>\n<\/ul>\n\n<h4>4.2.5<\/h4>\n\n<ul>\n<li>Properly fix PHP 5.3 support; tested on CentOS 6. Does not support any UI or Premium features.<\/li>\n<li>Fix potential issue with <code>WP_FAIL2BAN_BLOCK_USER_ENUMERATION<\/code> if calling REST API or XML\u2011RPC from admin area.<\/li>\n<\/ul>\n\n<h4>4.2.4<\/h4>\n\n<ul>\n<li>Add filter for login failed message.<\/li>\n<li>Fix logging spam comments from admin area.<\/li>\n<li>Fix Settings link from Plugins page.<\/li>\n<li>Update Freemius library<\/li>\n<\/ul>\n\n<h4>4.2.3<\/h4>\n\n<ul>\n<li>Workaround for some versions of PHP 7.x that would cause <code>define()<\/code>s to be ignored.<\/li>\n<li>Add config note to settings tabs.<\/li>\n<li>Fix documentation links.<\/li>\n<\/ul>\n\n<h4>4.2.2<\/h4>\n\n<ul>\n<li>Fix 5.3 compatibility.<\/li>\n<\/ul>\n\n<h4>4.2.1<\/h4>\n\n<ul>\n<li>Completed support for <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.2\/defines\/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_COMMENT_EXTRA_LOG<\/code><\/a>.<\/li>\n<li>Add support for 3rd-party plugins; see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.2\/developers.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">Developers<\/a>.\n\n<ul>\n<li>Add-on for <a href=\"https:\/\/wordpress.org\/plugins\/wp-fail2ban-addon-contact-form-7\/\">Contact Form 7<\/a> (experimental).<\/li>\n<li>Add-on for <a href=\"https:\/\/wordpress.org\/plugins\/wp-fail2ban-addon-gravity-forms\/\">Gravity Forms<\/a> (experimental).<\/li>\n<\/ul><\/li>\n<li>Change logging for known-user with incorrect password; previously logged as unknown user and matched by <code>hard<\/code> filters (due to limitations in older versions of WordPress), now logged as known user and matched by <code>soft<\/code>.<\/li>\n<li>Bug-fix for email-as-username - now logged correctly and matched by <code>soft<\/code>, not <code>hard<\/code>, filters.<\/li>\n<li>Bug-fix for regression in code to prevent Free\/Premium conflict.<\/li>\n<\/ul>\n\n<h4>4.2.0<\/h4>\n\n<ul>\n<li>Not released.<\/li>\n<\/ul>\n\n<h4>4.1.0<\/h4>\n\n<ul>\n<li>Add separate logging for REST authentication.<\/li>\n<li>Fix conflict with earlier versions preinstalled in <code>mu\u2011plugins<\/code>. See <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/installation.html#is-wp-fail2ban-already-installed?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">Is <em>WPf2b<\/em> Already Installed?<\/a>.<\/li>\n<\/ul>\n\n<h4>4.0.5<\/h4>\n\n<ul>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_COMMENT_EXTRA_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_COMMENT_EXTRA_LOG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PINGBACK_ERROR_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PINGBACK_ERROR_LOG<\/code><\/a> (future functionality).<\/li>\n<li>Change <code>WP_FAIL2BAN_LOG_SPAM<\/code> to use <code>LOG_NOTICE<\/code>.<\/li>\n<li>Change <code>WP_FAIL2BAN_SPAM_LOG<\/code> to <code>LOG_AUTH<\/code>.<\/li>\n<li>Change <code>WP_FAIL2BAN_LOG_COMMENTS_EXTRA<\/code> events to use <code>LOG_NOTICE<\/code> by default.<\/li>\n<li>Fix conflict with 3.x in <code>mu-plugins<\/code>.<\/li>\n<\/ul>\n\n<h4>4.0.2<\/h4>\n\n<ul>\n<li>Fix PHP 5.3 compatibility.<\/li>\n<li>Bug-fix for <code>WP_FAIL2BAN_LOG_COMMENTS_EXTRA<\/code>.<\/li>\n<li>Bug-fix for <code>WP_FAIL2BAN_REMOTE_ADDR<\/code> summary.<\/li>\n<\/ul>\n\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>Add extra features via Freemius. <strong>This is entirely optional.<\/strong> <em>WPf2b<\/em> works as before, including new features listed here.<\/li>\n<li>Add settings summary page (Settings -&gt; WP fail2ban).<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PASSWORD_REQUEST_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PASSWORD_REQUEST_LOG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_SPAM_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_SPAM_LOG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_LOG_COMMENTS_EXTRA.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_LOG_COMMENTS_EXTRA<\/code><\/a> - enable logging for attempted comments on posts which are:\n\n<ul>\n<li>not found,<\/li>\n<li>closed for commenting,<\/li>\n<li>in the trash,<\/li>\n<li>drafts,<\/li>\n<li>password protected<\/li>\n<\/ul><\/li>\n<li>Block user enumeration via REST API.<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>Not released.<\/li>\n<\/ul>\n\n<h4>3.6.0<\/h4>\n\n<ul>\n<li>The <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/filters.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">filter files<\/a> are now generated from PHPDoc in the code. There were too many times when the filters were out of sync with the code (programmer error) - this should resolve that by bringing the patterns closer to the code that emits them.<\/li>\n<li>Added <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/tests.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">PHPUnit tests<\/a>. Almost 100% code coverage, with the exception of <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a> which is quite hard to test properly.<\/li>\n<li>Bug-fix for <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/filters.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1#wordpress-soft-conf\"><code>wordpress-soft.conf<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_XMLRPC_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_XMLRPC_LOG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_REMOTE_ADDR.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_REMOTE_ADDR<\/code><\/a>.<\/li>\n<li><a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a> now supports an array of IPs with PHP 7.<\/li>\n<li>Moved all documentation to <a href=\"https:\/\/docs.wp-fail2ban.com\/?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\">https:\/\/docs.wp-fail2ban.com\/<\/a>.<\/li>\n<\/ul>\n\n<h4>3.5.3<\/h4>\n\n<ul>\n<li>Bug-fix for <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/filters.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1#wordpress-hard-conf\"><code>wordpress-hard.conf<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>3.5.1<\/h4>\n\n<ul>\n<li>Bug-fix for <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCK_USER_ENUMERATION<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>3.5.0<\/h4>\n\n<ul>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_OPENLOG_OPTIONS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_OPENLOG_OPTIONS<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_LOG_COMMENTS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_LOG_COMMENTS<\/code><\/a> and <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_COMMENT_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_COMMENT_LOG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_LOG_PASSWORD_REQUEST.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_LOG_PASSWORD_REQUEST<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_LOG_SPAM.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_LOG_SPAM<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_TRUNCATE_HOST.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_TRUNCATE_HOST<\/code><\/a>.<\/li>\n<li><a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCKED_USERS<\/code><\/a> now supports an array of users with PHP 7.<\/li>\n<\/ul>\n\n<h4>3.0.3<\/h4>\n\n<ul>\n<li>Fix regex in <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/filters.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1#wordpress-hard-conf\"><code>wordpress-hard.conf<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>3.0.2<\/h4>\n\n<ul>\n<li>Prevent double logging in WP 4.5.x for XML\u2011RPC authentication failure<\/li>\n<\/ul>\n\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Fix regex in <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/filters.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1#wordpress-hard-conf\"><code>wordpress-hard.conf<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_SYSLOG_SHORT_TAG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_SYSLOG_SHORT_TAG<\/code><\/a>.<\/li>\n<li>Add <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_HTTP_HOST.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_HTTP_HOST<\/code><\/a>.<\/li>\n<li>Log XML\u2011RPC authentication failure.<\/li>\n<li>Add better support for MU deployment.<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>Bug-fix <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCKED_USERS<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Bug-fix in <em>experimental<\/em> <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a> code (thanks to KyleCartmell).<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Fix stupid mistake with <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCKED_USERS<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Custom authentication log is now called <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_AUTH_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_AUTH_LOG<\/code><\/a>.<\/li>\n<li>Add logging for pingbacks; see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_LOG_PINGBACKS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_LOG_PINGBACKS<\/code><\/a>.<\/li>\n<li>Custom pingback log is called <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PINGBACK_LOG.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PINGBACK_LOG<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Minor bug-fix.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Add support for blocking user enumeration; see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCK_USER_ENUMERATION.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCK_USER_ENUMERATION<\/code><\/a>.<\/li>\n<li>Add support for CIDR notation in <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Bug-fix in <em>experimental<\/em> <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a> code.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Add <em>experimental<\/em> support for X-Forwarded-For header; see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_PROXIES.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_PROXIES<\/code><\/a>.<\/li>\n<li>Add <em>experimental<\/em> support for regex-based login blocking; see <a href=\"https:\/\/docs.wp-fail2ban.com\/en\/4.1\/defines\/WP_FAIL2BAN_BLOCKED_USERS.html?utm_source=wordpress.org&amp;utm_medium=readme&amp;utm_campaign=wp-fail2ban-premium-5.4.1\"><code>WP_FAIL2BAN_BLOCKED_USERS<\/code><\/a>.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Update FAQ.<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li>Fix harmless warning.<\/li>\n<\/ul>\n\n<h4>1.1<\/h4>\n\n<ul>\n<li>Minor cosmetic updates.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"WP fail2ban uses fail2ban to protect your WordPress site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/1045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=1045"}],"author":[{"embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/invisnet"}],"wp:attachment":[{"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=1045"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=1045"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=1045"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=1045"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=1045"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=1045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}