An attack does not become less expensive because WordPress says “blocked”. If the request reaches PHP, opens a database connection, increments a counter and renders a response, the attacker is still making your site work.
WP fail2ban gets the work out of PHP. WPf2b recognises WordPress-specific behaviour reliably — failed logins, blocked usernames, XML-RPC abuse, user enumeration, comment spam, suspicious password resets. WPf2b turns those events into structured syslog messages. fail2ban reads them and applies the ban at the firewall.
A firewall ban is a real ban. No PHP loop. No database counter. No "blocked" page that still costs the server work. The attacker is stopped by the part of the system meant to do that job, before WordPress is involved again.
Most WordPress security plugins fight inside PHP. They inspect every request, keep counters in the database, and try to enforce bans from PHP. It is a layer too high for the job.
WPf2b is also unusually quiet to live with. Because the heavy lifting happens outside WordPress, WPf2b has a small, well-defined surface area. Configuration constants added years ago still work. Upgrades rarely require revisiting a working setup. Install it, connect the filters, and let the operating system do the part it was built to do.
WPf2b has worked this way since 2011. The architecture hasn’t changed because the problem hasn’t.