| 开发者 |
invisnet
freemius |
|---|---|
| 更新时间 | 2026年10月21日 05:08 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv3 |
| 版权网址: | 版权信息 |
fail2ban the information it needs to block attackers at the firewall. fail2ban is a server-side service that bans abusive IP addresses; WP fail2ban tells it about brute-force attacks, user enumeration, comment abuse, spam, and more.
Once an address is banned, the firewall stops its requests before they reach your site.
Free protection from the usual suspects
The Free edition covers the attacks WordPress sites see every day:
fail2ban the information it needs to act.fail2ban.fail2ban can recognise. fail2ban watches those events and applies the rules you configure on the server. When an address crosses a threshold, it can be banned by the host firewall, so later requests are stopped before they reach WordPress.
WP fail2ban ships with filters that work well for typical sites, so most installations can start with them as they are.
The events themselves are deliberately written for humans as well as fail2ban: they tell you who is doing what, to what, and why it matters. That makes the logs useful to read directly, and makes it much easier to adapt the supplied filters or write your own if your setup needs something unusual.
WP fail2ban also handles exiting keep-alive connections. When abusive activity should result in a ban, it closes the connection so the client cannot simply keep sending requests over a connection that was opened before the firewall rule was added.
The Blocklist works a little differently: it can give the firewall hostile addresses learned from other participating sites, so your site does not have to see the attack first.
Installation and server setup →
Premium protection from the unusual suspects
Premium goes beyond fail2ban.
fail2ban the information it needs to act on everyday abuse, while Premium adds protection and intelligence that go beyond fail2ban.
If you have questions about hosting, the Blocklist, Free and Premium, version requirements, privacy, or how WP fail2ban stores data, the FAQ below covers the practical details.
fail2ban needs to know how to act on them.
WordPress
wp‑config.php. The defaults are a good starting point; change them only where your site needs different behaviour.wordpress-hard.conf and wordpress-soft.conf filters. Copy them into your fail2ban filter directory and configure jails for both.
The hard filter is for events that can normally be banned immediately. The soft filter is for events such as failed logins where several attempts may be reasonable.
Exactly where fail2ban reads its logs depends on your operating system and whether it uses traditional syslog files or the systemd journal, so use the installation documentation for the current examples.
Configure fail2ban →
Once both sides are configured, test the installation before relying on it.No. fail2ban is the service that watches logs and bans abusive IP addresses at the firewall. WP fail2ban is the bridge between WordPress and fail2ban: it tells fail2ban what is happening inside WordPress in a form it can act on.
The name dates from 2011, when “WP + something” was commonly understood to mean an integration between WordPress and that thing.
It shouldn’t. The Premium notices are provided by Freemius and use WordPress’s normal admin request handling to remember when you dismiss them. If another plugin mishandles that request before WP fail2ban or Freemius sees it, the dismissal is never saved and the notice can appear again. Because plugins are usually loaded alphabetically, this can be caused by almost any plugin loaded before WP fail2ban. There is very little WP fail2ban can do to work around another plugin breaking the request.
If you can configure fail2ban and the firewall, yes.
That normally includes VPSs, dedicated servers, and other hosting where you have control of the operating system. WP fail2ban supplies the WordPress side of the integration; fail2ban and the firewall run on the server.
On managed hosting, it depends on what your provider allows. If you cannot install or configure fail2ban yourself, ask your host whether they support it or can add the WP fail2ban filters for you.
The WP fail2ban Blocklist uses attacks seen by participating WP fail2ban sites to identify hostile IP addresses.
That means your firewall can block an address before it attacks your site, rather than waiting for your site to see enough activity for fail2ban to act.
The Blocklist is built from WP fail2ban’s own data, not third-party threat feeds. The Free edition receives a reduced list; Premium receives the full current intelligence available for your site.
Learn more about the WP fail2ban Blocklist add-on →
The WordPress.org edition remains on 5.x so it can continue to support PHP 7.4. There are still a lot of WP fail2ban sites running PHP 7.4, even though PHP itself stopped supporting it nearly four years ago. Premium is based on 6.x and requires PHP 8 or later. It has moved on significantly from 5.x as WP fail2ban continues to develop. WordPress.org does not provide parallel release channels for different major versions, so 5.x and 6.x cannot both be offered for different PHP versions. Keeping the WordPress.org edition on 5.x is therefore a compromise: it lets development continue on modern PHP without abandoning existing WP fail2ban users who have not yet been able to move away from PHP 7.4.
The Free edition covers the everyday WordPress abuse most sites need fail2ban to act on.
Premium goes further with the full Blocklist, the Web Application Firewall, persistent event history, geo‑blocking, maintained security data, and additional controls.
Compare all Free and Premium features →
It depends which kind of firewall you mean.
WP fail2ban is not a network firewall. It tells fail2ban when WordPress sees abusive behaviour, and fail2ban can then add bans to the server’s stateful network firewall. That firewall stops traffic before it reaches WordPress.
Premium also includes a Web Application Firewall (WAF). A WAF works at a different layer: it examines what a request is trying to make WordPress do and can block malicious application-level behaviour, including SQL injection.
The two complement each other. The network firewall blocks hostile sources; the WAF protects WordPress from malicious requests that reach WordPress.
They work at different layers, and they can work together.
ModSecurity and similar web-server WAFs inspect HTTP requests and responses and apply rules before or around the application. That makes them good at rejecting traffic based on what the request itself looks like.
WP fail2ban runs inside WordPress, so it can see what the request actually means to WordPress: whether a login failed, whether a username exists, whether a comment was rejected as spam, what WordPress operation was attempted, and so on. It turns that application-level knowledge into events that fail2ban can act on at the network firewall.
Premium’s WAF uses the same advantage. For SQL injection, for example, it can inspect the SQL WordPress is actually about to execute rather than trying to infer solely from the incoming request whether it contains an attack.
They are complementary, not alternatives: a web-server WAF can reject malicious-looking requests before WordPress sees them; WP fail2ban can act after WordPress has interpreted them and knows what they actually mean.
Yes, but WP fail2ban needs to know which proxies it can trust.
A reverse proxy means the connection to WordPress comes from the proxy rather than directly from the visitor. WP fail2ban uses X-Forwarded-For to recover the real client IP, but only when the connecting address belongs to a proxy you have explicitly trusted. That prevents an attacker simply supplying their own forwarding header.
WP fail2ban deliberately uses only X-Forwarded-For for client IP resolution. Keeping a single trusted path through that part of the code reduces the chances of subtle bugs or inconsistent behaviour, and X-Forwarded-For is the standard header that reverse proxies are expected to support.
Free lets you configure trusted proxy networks yourself. Premium can keep Cloudflare's published IP ranges up to date automatically, so Cloudflare's edge nodes remain recognised as trusted proxies as its network changes.
The CF-Connecting-IP header is not used to determine the client address. WP fail2ban only uses it as a signal that a site appears to be behind Cloudflare, so it can recommend the appropriate QuickStart configuration.
Read more about how WP fail2ban handles client IP addresses →
Not as part of normal operation.
WP fail2ban’s normal job is local: WordPress generates the event, WP fail2ban records it, and fail2ban acts on it on your server.
The Free edition includes Freemius, but sharing usage information with Freemius is optional: you can skip the opt-in and continue using and updating WP fail2ban. Premium uses Freemius for purchasing, licensing, and updates, so that connection is part of using the paid product. Freemius publishes what information it collects and why.
Freemius data practices
The Blocklist is a separate add-on and necessarily has its own data exchange; its README explains that separately.
WP_FAIL2BAN_PINGBACK_LOG. [Back-port from 6.3.0]$wp_scripts is uninitialised. [Premium only]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.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.