PAGES
← all tools
◆ IDS / IPS

Fail2ban

1.1.1 open-source

Fail2Ban scans log files and bans IP addresses conducting too many failed login attempts by updating system firewall rules to reject new connections.

Summary

Fail2ban is an open-source intrusion prevention tool that scans log files such as auth.log or web server logs and bans IP addresses responsible for repeated failed login attempts, updating firewall rules (iptables or nftables) to reject their connections for a configurable period. It runs as a background service on a Linux host, reading whichever logs it is pointed at, and is aimed at system administrators securing SSH, mail, web, or VPNVPNA virtual private network, an encrypted tunnel between devices or networks. It carries traffic across another network as though the endpoints had a private connection. services against brute-force login attempts rather than at teams wanting network-wide detection. It ships with filters for common services like sshd and Apache and can be extended with custom jails, such as its OpenVPN filter, and it reduces the rate of credential-stuffing attempts without replacing proper authentication controls. Its own documentation notes it does not eliminate the need for two-factor or key-based authentication.

Fail2Ban scans log files and bans IP addresses conducting too many failed login attempts by updating system firewall rules to reject new connections.

How Fail2ban helps

Which of my accounts on this server are being hit by repeated failed logins right now?

watches the log for the service in question, such as auth.log or an Apache log, and identifies source IP addresses that cross the failure threshold defined for that jail

What happens to an IP address after it's caught brute-forcing my SSH or mail login?

inserts a rule into the host's firewall (iptables or nftables) rejecting new connections from that address for the ban period configured in the jail

Which of my own IP addresses or trusted networks will never get caught in a ban?

checks each candidate against an ignore list of IPs, subnets, or hostnames before banning, and can reload that list automatically from a shared file when it changes on disk

Is my OpenVPN or mail service exposed to the same brute-force scanning my SSH port gets?

applies a purpose-built filter with regex patterns for that service's log format, so failed authentication attempts against it are matched and counted the same way SSH attempts are

Are attackers hiding failed logins behind country-level ACL drops instead of plain auth failures?

with aggressive mode enabled on the relevant filter, matches log lines showing ACL-dropped connections, such as country bans, in addition to standard authentication failures, and counts them toward a ban

Did a manually-issued ban actually register against a repeat offender's history?

feeds manually added bans into the observer module so the running ban count for that IP reflects the manual action, not just automatic detections

all 56 features, with the evidence for each →

Languages

Not documented

Features

56 capabilities

Built from Fail2ban's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

What Fail2ban offers you

  • Command-line interface9
  • Plugin system1
  • User-defined detection rules1
All capabilities 56 capabilities
Advanced log filtering and configuration shipped Expands log processing capabilities with CIDR support, findtime overrides, and centralized log target configuration. 26 releases · 3 other sources · first seen Jul 2005

release 26 total

  • backend systemd accepts new parameter rotated (default false) to ignore rotated journal files and reduce file descriptors 1.1.1 · Aug 2026 · source · release history
  • Adds <CIDR> and <SUBNET> failregex replacement tags to match IP addresses with CIDR masks 0.10.5 · Jan 2020 · source · release history
  • Adds support for Portsentry log parsing in fail2ban filters 0.9.1 · Oct 2014 · source · release history
  • Adds apache-shellshock filter to detect Shellshock exploitation attempts in Apache logs 0.9.1 · Oct 2014 · source · release history
  • Adds Guacamole, Kerio, Stunnel, Counter Strike, Squirrelmail, and Tine20 filters 0.9.0 · Mar 2014 · source · release history
  • Adds sendmail-auth and sendmail-reject jails for sendmail log analysis 0.8.13 · Mar 2014 · source · release history

example

  • Add a new jail configuration to detect nagios unauthorized access attempts. [nagios] enabled = true filter = nagios action = iptables-multiport 0.8.13 · Mar 2014 · source
  • Specify a custom log file encoding for fail2ban to read. [DEFAULT] logencoding = utf-8 0.9.0 · Mar 2014 · source
  • Use the new <HOST> tag in a custom filter to correctly extract IP addresses from non-standard log formats. # Example snippet for fail2ban/filter.d/custom-app.conf [Definition] failregex = ^<HOST> .* error: authentication failure$ .*$ 0.7.5 · Dec 2006 · source
Extended service log filters shipped Provides dedicated log parsing filters for a wide range of additional services including pop3, dns, webmail, voip, proxy, and gaming applications. 16 releases · 1 other source · first seen Jan 2014

release 16 total

  • Adds new filter definitions filter.d/dante.conf, filter.d/nginx-forbidden.conf, and filter.d/routeros-auth.conf 1.1.0 · Apr 2024 · source · release history
  • Adds filter.d/softether.conf and a jail for recognizing failed SoftEtherVPN application logins 0.11.2 · Nov 2020 · source · release history
  • Adds filter.d/gitlab.conf and a jail for recognizing failed GitLab application logins 0.11.2 · Nov 2020 · source · release history
  • Adds filter.d/grafana.conf and a jail for recognizing failed Grafana application logins 0.11.2 · Nov 2020 · source · release history
  • Adds filter.d/domino-smtp filter for IBM Domino SMTP task 0.9.7 · May 2017 · source · release history
  • Adds filter.d/mongodb-auth.conf for MongoDB authentication log parsing 0.9.6 · Dec 2016 · source · release history

example

  • Use the new froxlor-auth filter for Froxlor logs [froxlor-jail] enabled = true filter = froxlor-auth logpath = /var/log/froxlor.log backend = auto 0.9.3 · Aug 2015 · source
Advanced regular expression testing shipped Provides dedicated CLI tools and interactive modes to validate failregex patterns against log files. 12 releases · 3 other sources · first seen Sep 2006

Also counts toward: Command-line interface

release 12 total

  • Fail2ban-client can now unban IP ranges by subnet (CIDR/mask) or hostname (DNS) 0.11.2 · Nov 2020 · source · release history
  • iptables-common.conf is replaced by iptables-blocktype.conf; existing customizations must be migrated. 0.9.1 · Oct 2014 · source · release history
  • Introduces print-all-matched option to fail2ban-regex for detailed regex testing 0.9.1 · Oct 2014 · source · release history
  • Adds Cloudflare API action for automated IP banning via Cloudflare's firewall rules 0.9.1 · Oct 2014 · source · release history
  • Supports multi-line filter patterns in jail configurations 0.9.0 · Mar 2014 · source · release history
  • Enables multiple instances of the same action in a single jail via [DEFAULT] block in jail.local using action = %(action_)s and banaction = iptables-ipset 0.9.0 · Mar 2014 · source · release history

example

  • Unban a specific IP range using its CIDR notation via the command line client. fail2ban-client set <jail_name> unbanip <cidr_address> 0.11.2 · Nov 2020 · source
  • Switch an existing jail from the old long action name to the new short one. [sshd] action = firewallcmd-new[protocol=all, chain=INPUT] 0.8.12 · Jan 2014 · source
  • Test a regular expression against log files to verify failregex matching fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf 0.7.2 · Sep 2006 · source
Expanded ban action modules shipped Adds support for new ban technologies including badips, firewallcmd-ipset, ufw, blocklist_de, Cloudflare API, and route-based banning. 11 releases · 1 other source · first seen Jan 2014

release 11 total

  • action.d/firewallcmd-ipset.conf: parameter ipsettype is renamed to ipsetbackend; use ipsettype only for the real set type value 1.1.1 · Aug 2026 · source · release history
  • Adds new action definition action.d/mikrotik.conf for MikroTik RouterOS integration 1.1.0 · Apr 2024 · source · release history
  • Adds action.d/netscaler action to block IPs on Citrix Netscaler ADC 0.9.7 · May 2017 · source · release history
  • Adds action.d/npf.conf to support NetBSD's NPF packet filter 0.9.6 · Dec 2016 · source · release history
  • Adds action.d/firewallcmd-rich-logging action for rich logging via firewalld. 0.9.5 · Jul 2016 · source · release history
  • Adds action.d/firewallcmd-rich-rules action to use rich rules in firewalld. 0.9.5 · Jul 2016 · source · release history

example

  • Block attackers directly on a Citrix Netscaler ADC instead of just iptables # In jail.conf or custom action file, use the new netscaler action action = netscaler[iptype=%(banfamily)s] 0.9.7 · May 2017 · source
daemon lifecycle management shipped Provides mechanisms to control the cyber tool's process state, including graceful shutdown via SIGTERM and standard configuration file loading. 8 releases · 4 other sources · first seen Oct 2004

Also counts toward: Command-line interface

release 8 total

  • Adds fail2ban-client set <jail> attempt <ip> command to manually report failure attempts to the daemon 0.10.5 · Jan 2020 · source · release history
  • Adds Client/Server architecture for distributed ban management 0.7.0 · Aug 2006 · source · release history
  • Adds <section> keyword support in email subject and body parsing 0.5.5 · Oct 2005 · source · release history
  • Adds -f command-line parameter to configure [findtime] 0.5.5 · Oct 2005 · source · release history
  • maxretry and bantime can be overridden in each section 0.5.2 · Aug 2005 · source · release history
  • ignoreip now supports CIDR masks for network range exclusions 0.5.0 · Jul 2005 · source · release history

example

  • Manually report a brute-force attempt from a specific IP without waiting for log matches. fail2ban-client set myjail attempt 192.0.2.1 'Invalid password' 0.10.5 · Jan 2020 · source
  • Configure a jail to dynamically determine if an IP should be ignored using an external script. [jail] ignorecommand = /usr/local/bin/check-ip-whitelist.py %(ip)s 0.8.12 · Jan 2014 · source
  • Run fail2ban in client/server mode to connect to a remote jail server. fail2ban-client -s /var/run/fail2ban/fail2ban.sock ping 0.7.0 · Aug 2006 · source
  • Exclude an entire subnet using CIDR notation in ignoreip ignoreip = 127.0.0.1/8 ::1/128 192.168.1.0/24 0.5.0 · Jul 2005 · source
Flexible log source targeting shipped Enables direct configuration of specific log files or syslog facilities as data sources. 9 releases · 1 other source · first seen Sep 2005

release 9 total

  • automatic switch to backend systemd when backend = auto is set, no log files match logpath, and an optional journalmatch filter exists 1.1.1 · Aug 2026 · source · release history
  • Extends jail configuration to allow backend-specific options via new syntax (e.g., backend = systemd[journalpath=/...]) in /etc/fail2ban/jail.local or per-jail configs 0.9.6 · Dec 2016 · source · release history
  • Adds journalmatch support for pure-ftpd in filter.d/pureftpd-journal.conf. 0.9.5 · Jul 2016 · source · release history
  • Adds journald journalmatch support for pure-ftpd 0.9.5 · Jul 2016 · source · release history
  • Adds webmin, Sogo, Roundcube, Exim, and mysqld filters for new log sources 0.8.9 · Jul 2013 · source · release history
  • Ban IP subcommand added to interactively ban an IP address. 0.8.4 · Sep 2009 · source · release history

example

  • Configure a jail to use the systemd journal backend for log matching. [sshd-journal] enabled = true filter = sshd logpath = %s journalmatch = _SYSTEMD_UNIT=ssh.service 0.9.0 · Mar 2014 · source
Enhanced mail notification configuration shipped Provides advanced email notification options including local/GMT time reporting and dynamic section placeholders. 5 releases · 1 other source · first seen Oct 2005

release

  • Adds optional TLS support to smtp.py via the ssl argument 1.1.0 · Apr 2024 · source · release history
  • Enables fail2ban-client to fetch the running server version via a new query command 0.9.1 · Oct 2014 · source · release history
  • Adds Date: header support for sendmail*.conf actions 0.8.6 · Nov 2011 · source · release history
  • Adds option to report local time (including timezone) or GMT in mail notifications 0.6.0 · Nov 2005 · source · release history
  • Adds <section> keyword support in email subject and body parsing 0.5.5 · Oct 2005 · source · release history

example

  • Set a global default action and ban technology for all jails defined in jail.local. [DEFAULT] banaction = iptables-ipset action = %(action_)s 0.9.0 · Mar 2014 · source
Version query interface shipped Provides a command-line interface to fetch the running version of the cyber tool's server component. 4 releases · 2 other sources · first seen Oct 2014

Also counts toward: Command-line interface

release

  • Enables -V flag on fail2ban-client, fail2ban-server, and fail2ban-regex to return version in normalized machine-readable short format without logo info 0.10.4 · Oct 2018 · source · release history
  • Adds optional [flavor] argument to fail2ban-client status <jail> for extended output like cymru 0.9.2 · Apr 2015 · source · release history
  • recidive jail now uses iptables-allports banaction by default instead of the previous default 0.9.2 · Apr 2015 · source · release history
  • Enables fail2ban-client to fetch the running server version via a new query command 0.9.1 · Oct 2014 · source · release history

example

  • Get a machine-readable version string for scripting or CI checks. fail2ban-client -V 0.10.4 · Oct 2018 · source
  • Check jail status with ASN and geolocation data for banned IPs fail2ban-client status <jail> cymru 0.9.2 · Apr 2015 · source
CSF firewall action support shipped Adds a new action module for ConfigServer Firewall (CSF) to manage bans. 5 releases · first seen Nov 2004

release

  • Adds a new CSF (ConfigServer Firewall) action, comparable to the existing APF action. 1.1.1 · Aug 2026 · source · release history
  • action.d/firewall-cmd-direct-new.conf added for firewalld support 0.8.11 · Nov 2013 · source · release history
  • Added -s command-line option to specify the socket path 0.7.4 · Nov 2006 · source · release history
  • Added initial support for hosts.deny and shorewall jail actions. 0.6.1 · Mar 2006 · source · release history
  • Adds ipfw and ipfwadm support for managing firewall rules, using logic from BlockIt. 0.1.2 · Nov 2004 · source · release history
Dynamic value interpolation shipped Supports dynamic variable substitution in configuration files using Python's ConfigParser interpolation features. 5 releases · first seen Mar 2006

release

  • Enables <known/parameter> interpolation syntax to extend parameters of stock filters or actions directly in jail.local 0.9.4 · Mar 2016 · source · release history
  • Adds <<PREF>HOST>> recursive embedded substitution to jail config, allowing <IPV4HOST> or direct IP resolution via PREF=<value> 0.9.2 · Apr 2015 · source · release history
  • Adds %(known/parameter)s interpolation in config readers for extending stock filter/jail regexps without overwriting 0.9.2 · Apr 2015 · source · release history
  • Supports comma-separated values in action options using quote escaping 0.7.6 · Jan 2007 · source · release history
  • Added interpolations in fail2ban.conf leveraging Python's ConfigParser module. 0.6.1 · Mar 2006 · source · release history
Fail2ban socket activation shipped Installs and enables a systemd-managed fail2ban socket for optimized service startup. 3 releases · 1 other source · first seen Aug 2026

release

  • The debian package now installs fail2ban.socket managed by systemd 1.1.1 · Aug 2026 · source · release history
  • Debian package now installs and enables a systemd-managed fail2ban.socket (gh-4220). 1.1.1 · Aug 2026 · source · release history
  • fail2ban-server supports systemd socket activation (sd_listen_fds(3)) with an optional fail2ban.socket unit provided 1.1.1 · Aug 2026 · source · release history

example

  • Enable socket-based startup instead of traditional daemon initialization [Unit] Description=fail2ban socket [Socket] ListenStream=/var/run/fail2ban/fail2ban.sock [Install] WantedBy=sockets.target 1.1.1 · Aug 2026 · source
File-based IP set management shipped Supports loading and dynamically reloading IP sets from external files, including lazy loading and comment handling. 3 releases · 1 other source · first seen Aug 2026

release

  • Implements FileIPAddrSet in ipdns.py supporting file-based IP sets with lazy load and dynamic reload on file change; comments after # or ; are ignored. 1.1.1 · Aug 2026 · source · release history
  • Extends ignoreip with file:... (or file://path/file-with-ip-set) syntax to load ignored IPs, subnets, DNS/FQDN, or raw strings from an external file; the file is read lazily and reloaded dynamically when it changes. 1.1.1 · Aug 2026 · source · release history
  • configuration ignoreip and fail2ban-client commands addignoreip/delignoreip support file:... syntax for external IP lists 1.1.1 · Aug 2026 · source · release history

example

  • Allow fail2ban-client to import trusted IPs from an external file using the new syntax fail2ban-client addignoreip file:/etc/fail2ban/whitelist.txt 1.1.1 · Aug 2026 · source
Multi-platform init system support shipped Ensures reliable service startup across diverse Linux environments via dedicated initialization scripts. 4 releases · first seen Jun 2005

release

  • filter.d/exim.conf rules that relied on mode = normal moved to mode = more; set mode = more in the jail config to preserve previous behavior 1.1.1 · Aug 2026 · source · release history
  • Adds webmin authentication filter (filter.d/webmin.conf) to detect Webmin login failures 0.8.1 · Aug 2007 · source · release history
  • Initd script provided for RedHat/Fedora systems 0.5.0 · Jul 2005 · source · release history
  • Adds initd script for Gentoo Linux system initialization 0.4.1 · Jun 2005 · source · release history
OpenVPN jail protection shipped Adds a dedicated jail and filter rules for OpenVPN to detect and ban malicious connection attempts. 3 releases · 1 other source · first seen Oct 2004

Also counts toward: Command-line interface

release

  • Adds a new OpenVPN jail (filter.d/openvpn.conf). 1.1.1 · Aug 2026 · source · release history
  • Adds flushlogs command to rotate logs without reloading fail2ban or syncing jail.conf with /etc/logrotate.d/fail2ban 0.8.12 · Jan 2014 · source · release history
  • Rewrite log reader to be service centered. Sshd support added. Match Failed password and Illegal user 0.1.1 · Oct 2004 · source · release history

example

  • Rotate fail2ban logs via CLI without triggering a full service reload, keeping the daemon state intact. fail2ban-client flushlogs 0.8.12 · Jan 2014 · source
System health and consistency checks shipped Implements automatic firewall chain consistency verification to ensure the cyber tool remains functional. 3 releases · 1 other source · first seen Oct 2005

Also counts toward: Command-line interface

release

  • Adds fail2ban-client status --all stats to return a Python dictionary of statistics for all jails 1.1.0 · Apr 2024 · source · release history
  • Adds status --all flag to fail2ban-client to display status of all configured jails in one invocation 1.1.0 · Apr 2024 · source · release history
  • Adds fwcheck option to verify firewall chain consistency and auto-restart on failure 0.5.5 · Oct 2005 · source · release history

example

  • Get a quick tabular overview of ban counts across all jails without parsing JSON. fail2ban-client stats 1.1.0 · Apr 2024 · source
Dynamic IP exclusion logic shipped Allows jails to dynamically determine if an IP should be ignored by executing an external script or command. 2 releases · 2 other sources · first seen Jan 2014

release

  • Extends ignorecommand to support tag interpolation (e.g., <ip-host>, F-USER) for dynamic actions 0.10.4 · Oct 2018 · source · release history
  • Adds ignorecommand option for dynamic IP exclusion logic in jails 0.8.12 · Jan 2014 · source · release history

example

  • Use dynamic tag interpolation in ignorecommand to handle complex logic. [sshd] ignorecommand = /usr/local/bin/check_whitelist.py <ip-host> F-USER 0.10.4 · Oct 2018 · source
  • Configure a jail to dynamically determine if an IP should be ignored using an external script. [jail] ignorecommand = /usr/local/bin/check-ip-whitelist.py %(ip)s 0.8.12 · Jan 2014 · source
OSX ipfw filter support shipped Adds a dedicated log filter for OpenBSD/OSX systems using ipfw with random rule numbers. 3 releases · 1 other source · first seen Nov 2013

release

  • Enables syslog format parsing in the asterisk jail 0.8.13 · Mar 2014 · source · release history
  • Adds solid-pop3d, nsd, openwebmail, horde, freeswitch, squid, and groupoffice new filters 0.8.12 · Jan 2014 · source · release history
  • filter.d/osx-ipfw.conf action filter for OSX based on random rule numbers 0.8.11 · Nov 2013 · source · release history

example

  • Enable the new sendmail authentication filtering jails. [sendmail-auth] enabled = true filter = sendmail-auth action = iptables-multiport [sendmail-reject] enabled = true filter = sendmail-reject action = iptables-multiport 0.8.13 · Mar 2014 · source
Exim ACL failure detection shipped Extends Exim filtering to catch authentication failures and connections dropped by Access Control List (ACL) rules. 2 releases · 1 other source · first seen Oct 2004

release

  • Adds filter.d/exim.conf mode more (several rules split out from mode normal) and extends mode aggressive to catch ACL-dropped failures such as ACL: Country is banned. 1.1.1 · Aug 2026 · source · release history
  • Rewrite log reader to be service centered. Sshd support added. Match Failed password and Illegal user 0.1.1 · Oct 2004 · source · release history

example

  • Enable aggressive exim filtering to also block connections dropped by ACL rules (e.g. country bans) in addition to normal authentication failures. # In jail.local [exim] enabled = true filter = exim[mode=aggressive] 1.1.1 · Aug 2026 · source
SSH DDoS mode enhancements shipped Extends SSH filter modes to detect timeout-before-authentication connections for DDoS and aggressive protection. 3 releases · first seen Oct 2004

release

  • Extends filter.d/sshd.conf modes ddos and aggressive with regex for timeout-before-authentication connections. 1.1.1 · Aug 2026 · source · release history
  • Adds recidive filter/jail to ban repeated offenders by monitoring fail2ban.log 0.8.7 · Jul 2012 · source · release history
  • Add -r option which allows to set the maximum number of login failures 0.1.1 · Oct 2004 · source · release history
pf (OpenBSD packet filter) action support shipped Adds a dedicated action module for the OpenBSD pf firewall to manage bans. 3 releases · first seen Jul 2013

release

  • Extends pf action in action.d/pf.conf with support for the protocol=all argument 1.1.0 · Apr 2024 · source · release history
  • The pf-action configuration for jails using banaction pf now requires anchor handling; rewrite in jail.local by overwriting banaction = pf[pfctl="pfctl"] to use obsolete handling. 0.10.2 · Jan 2018 · source · release history
  • Adds pf (OpenBSD packet filter) action 0.8.9 · Jul 2013 · source · release history
Date format customization shipped Supports custom date formats and timezone-aware date/time parsing in log filters for improved compatibility. 3 releases · first seen Mar 2014

release

  • Adds %k and %l date-pattern directives for precise parsing of hours without zero-padding. 0.10.2 · Jan 2018 · source · release history
  • Adds new date pattern supporting year after day (e.g., Sun Jan 23 2005 21:59:59) to log parsers 0.9.4 · Mar 2016 · source · release history
  • Supports custom date formats and timezone-aware date/time log formats in filters 0.9.0 · Mar 2014 · source · release history
Distributed client-server architecture shipped Allows the cyber tool to operate in a client/server mode for remote management and distributed ban enforcement. 2 releases · 1 other source · first seen Aug 2006

release

example

  • Run fail2ban in client/server mode to connect to a remote jail server. fail2ban-client -s /var/run/fail2ban/fail2ban.sock ping 0.7.0 · Aug 2006 · source
Advanced filter pattern matching shipped Enhances log detection by supporting multi-line patterns, HTTP referrer bit analysis, and Shellshock exploitation detection. 3 releases · first seen Jan 2014

release

  • Adds apache-shellshock filter to detect Shellshock exploitation attempts in Apache logs 0.9.1 · Oct 2014 · source · release history
  • Supports multi-line filter patterns in jail configurations 0.9.0 · Mar 2014 · source · release history
  • Adds HTTP referrer bit support to apache filters for improved detection 0.8.12 · Jan 2014 · source · release history
Custom command execution shipped Allows users to define and run custom start, end, and shutdown scripts via configuration. 2 releases · 1 other source · first seen Jul 2005

release

  • Expands supported tags in action(un)ban scripts to include <ip>, <failures>, and <time> for dynamic action construction 0.7.5 · Dec 2006 · source · release history
  • Custom start and end commands can now be defined in the configuration file 0.5.0 · Jul 2005 · source · release history

example

  • Configure custom startup and shutdown scripts in the config file bantime = 600 findtime = 600 maxretry = 5 # New configuration options for lifecycle management [init] start = /path/to/start_script.sh end = /path/to/stop_script.sh 0.5.0 · Jul 2005 · source
Dynamic allowlist support shipped Maintains a shared allowlist of trusted IPs and subnets that can be automatically reloaded without restarting the service. 1 release · 1 other source · first seen Aug 2026

release

  • Extends ignoreip with file:... (or file://path/file-with-ip-set) syntax to load ignored IPs, subnets, DNS/FQDN, or raw strings from an external file; the file is read lazily and reloaded dynamically when it changes. 1.1.1 · Aug 2026 · source · release history

example

  • Maintain a shared allowlist file of trusted IPs and subnets that Fail2ban reloads automatically — useful for dynamic allowlists shared across jails. # In jail.local or jail.conf [DEFAULT] ignoreip = 127.0.0.1/8 ::1 file:///etc/fail2ban/trusted-ips.txt 1.1.1 · Aug 2026 · source
Route-based ban action shipped Adds a 'route' action module to enforce bans by manipulating network routing tables. 2 releases · first seen Jul 2013

release

  • new jail option skip_if_nologs ignores a jail if no logpath matches are found, allowing other jails to start 1.1.1 · Aug 2026 · source · release history
  • Adds route action allowing bans at the network routing level 0.8.9 · Jul 2013 · source · release history
Systemd-journal filter support shipped Adds regex pattern matching capabilities for systemd-journal logs in vsftpd and lighttpd authentication filters. 2 releases · first seen Jul 2012

release

  • Adds systemd-journal regex support to filter.d/vsftpd.conf and filter.d/lighttpd-auth.conf. 1.1.1 · Aug 2026 · source · release history
  • Adds lighttpd-auth filter/jail for lighttpd authentication logs 0.8.7 · Jul 2012 · source · release history
Enhanced date pattern tokens shipped Adds new regex datepattern tokens ({UNB}, {NONE}) for flexible log timestamp handling. 2 releases · first seen Nov 2020

release

  • New datepattern token {UNB} disables word boundaries in regex matching 0.11.2 · Nov 2020 · source · release history
  • New datepattern token {NONE} allows failure detection without datetime in logs, using current time 0.11.2 · Nov 2020 · source · release history
Dedicated firewall chain management shipped Isolates filter rules into separate chains per jail to improve clarity and performance. 2 releases · first seen Jul 2005

release

  • Introduces nftables jail action that isolates rules into a dedicated table and chain, replacing nftables-common and deprecating nftables-allports/nftables-multiport in favor of type options 0.10.5 · Jan 2020 · source · release history
  • Creates a separated iptables chain for each jail section 0.5.1 · Jul 2005 · source · release history
Log timestamp parsing enhancements shipped Expands log date detection to include epoch milliseconds/microseconds and custom regex patterns for flexible datetime parsing. 2 releases · first seen Apr 2018

Also counts toward: User-defined detection rules

release

  • Adds LEPOCH pattern to the date-detector for parsing milliseconds/microseconds POSIX dates. 0.10.3.1 · Apr 2018 · source · release history
  • Allows specifying a custom regex-pattern to match epoch date-time via new configuration option. 0.10.3.1 · Apr 2018 · source · release history
Multithreaded log processing shipped Utilizes separate threads for reading logs and executing actions per jail to improve concurrency and performance. 2 releases · first seen Aug 2006

release

  • Speeds up SQLite database operations by disabling synchronous writes, using memory journal mode, and keeping temp stores in memory 0.9.5 · Jul 2016 · source · release history
  • Introduces multithreading with separate threads for log reading and actions per jail 0.7.0 · Aug 2006 · source · release history
Port knocking and pass rules shipped Supports specific jail configurations for port knocking logic and conditional IP allowance based on service interactions. 2 releases · first seen Aug 2015

release

  • Adds pass2allow-ftp jail for allowing FTP traffic after HTTP auth 0.9.3 · Aug 2015 · source · release history
  • Adds pass2allow operation type enabling port knocking via Fail2ban 0.9.3 · Aug 2015 · source · release history
Log encoding support shipped Allows explicit configuration of log file encoding to ensure correct parsing of non-standard character sets. 1 release · 1 other source · first seen Mar 2014

release

example

  • Specify a custom log file encoding for fail2ban to read. [DEFAULT] logencoding = utf-8 0.9.0 · Mar 2014 · source
Log rotation capabilities shipped Enables the cyber tool to rotate its own logs via command-line interface without requiring a full service reload or configuration sync. 1 release · 1 other source · first seen Jan 2014

Also counts toward: Command-line interface

release

  • Adds flushlogs command to rotate logs without reloading fail2ban or syncing jail.conf with /etc/logrotate.d/fail2ban 0.8.12 · Jan 2014 · source · release history

example

  • Rotate fail2ban logs via CLI without triggering a full service reload, keeping the daemon state intact. fail2ban-client flushlogs 0.8.12 · Jan 2014 · source
Roundcube authentication monitoring shipped Adds a specific log filter for Roundcube webmail version 0.9 and above to detect authentication failures. 2 releases · first seen Jun 2013

release

  • config/filter.d/roundcube-auth.conf now supports Roundcube 0.9+ 0.8.10 · Jul 2013 · source · release history
  • Adds support for Roundcube 0.9+ via filter.d/roundcube-auth.conf 0.8.10 · Jun 2013 · source · release history
File-system change monitoring shipped Integrates Gamin as a backend to detect file and directory changes for real-time log tracking. 2 releases · first seen Sep 2006

release

  • Adds pyinotify backend for log monitoring (default when backend='auto' and available) 0.8.7 · Jul 2012 · source · release history
  • Adds Gamin file and directory monitoring backend for real-time log tracking 0.7.3 · Sep 2006 · source · release history
Multi-action execution support shipped Enables the definition and triggering of multiple distinct actions in response to a single jail event. 2 releases · first seen Aug 2006

Also counts toward: Plugin system

release

  • New action plugins to report abuse via ISP, DShield, and myNetWatchman protocols. 0.8.4 · Sep 2009 · source · release history
  • Supports executing several actions per jail event 0.7.0 · Aug 2006 · source · release history
ipfw firewall action support shipped Adds support for the ipfw and ipfwadm firewalls to manage bans via a dedicated action module, utilizing logic from BlockIt. 1 release · 1 other source · first seen Nov 2004

release

  • Adds ipfw and ipfwadm support for managing firewall rules, using logic from BlockIt. 0.1.2 · Nov 2004 · source · release history

example

  • Start Fail2ban with IPFW firewall rule support enabled fail2ban-client -k; fail2ban-server --ipfw-start-rule /etc/fail2ban/ipfw.rules 0.3.0 · Feb 2005 · source
network interface selection shipped Allows the cyber tool to bind and monitor a specific network interface rather than using the default system interface. 1 release · 1 other source · first seen Nov 2004

Also counts toward: Command-line interface

release

example

  • Run fail2ban on a specific network interface (e.g., eth0) instead of the default. fail2ban-server -e eth0 0.1.2 · Nov 2004 · source
Ban count observer integration shipped Updates manually added ban attempts to inform the observer module regarding known ban counts for specific IPs. 1 release · first seen Aug 2026

release

  • Makes manually added ban attempts inform the observer module, taking the known ban-count of bad IPs into account. 1.1.1 · Aug 2026 · source · release history
OpenRC init script updates shipped Updates the OpenRC initialization script to ensure proper startup order relative to nftables and iptables. 1 release · first seen Aug 2026

release

  • Updates OpenRC init script (files/fail2ban-openrc.init.in) to start after nftables in addition to iptables. 1.1.1 · Aug 2026 · source · release history
Incremental ban support shipped Extends existing bans with incremental logic rather than replacing them entirely. 1 release · first seen Jan 2020

release

  • Adds incremental ban logic for enhancing existing bans. 0.11.1 · Jan 2020 · source · release history
Log type prefix control shipped Allows explicit configuration of log type prefixes (e.g., short, rfc5424) to standardize filter parsing. 1 release · first seen Jan 2020

release

  • Adds logtype configuration parameter to filters (e.g., logtype=short, logtype=rfc5424) to control prefix handling 0.10.5 · Jan 2020 · source · release history
Aggressive SSH filter mode shipped Provides a specific aggressive filtering mode for jails to detect and mitigate DDoS and brute-force attempts more effectively. 1 release · first seen Jan 2018

release

  • Adds mode parameter support in jail.local jails that provide an aggressive filter mode. 0.10.2 · Jan 2018 · source · release history
Configuration dump utility shipped Provides command-line options to export the current cyber tool configuration in a formatted, human-readable structure for inspection and debugging. 1 release · first seen Oct 2017

Also counts toward: Command-line interface

release

  • Adds --dp and --dump-pretty command-line options to dump the configuration using a more human readable representation. 0.10.1 · Oct 2017 · source · release history
Iptables target customization shipped Provides configuration variables to control the specific iptables target used for ban actions. 1 release · first seen Aug 2015

release

  • Adds <returntype> variable to control the iptables target for bans 0.9.3 · Aug 2015 · source · release history
Log buffer flushing control shipped Allows users to explicitly flush the internal log buffer via OS signals for immediate persistence. 1 release · first seen Apr 2015

release

Action instance stacking shipped Enables multiple instances of the same action to be triggered in a single jail via configuration variable interpolation. 1 release · first seen Mar 2014

release

  • Enables multiple instances of the same action in a single jail via [DEFAULT] block in jail.local using action = %(action_)s and banaction = iptables-ipset 0.9.0 · Mar 2014 · source · release history
Global jail configuration defaults shipped Allows setting a global default action and ban technology for all jails defined in the local configuration file. 1 other source · first seen Mar 2014

example

  • Set a global default action and ban technology for all jails defined in jail.local. [DEFAULT] banaction = iptables-ipset action = %(action_)s 0.9.0 · Mar 2014 · source
Enhanced regex debugging tools shipped Adds CLI flags and generation of external debugging URLs (Debuggex) to validate regular expressions against logs. 1 release · first seen Nov 2013

release

  • fail2ban-regex -D generates debuggex.com URLs for debugging regular expressions 0.8.11 · Nov 2013 · source · release history
OSX afctl firewall action support shipped Adds an action module for the macOS afctl firewall to manage bans on OSX systems. 1 release · first seen Nov 2013

release

Interactive shell completions shipped Provides autocompletion for fail2ban-cli commands in interactive shell environments. 1 release · first seen Jul 2013

release

  • Adds interactive shell completions for fail2ban-* commands 0.8.9 · Jul 2013 · source · release history
IP set-based ban targeting shipped Enables banning entire IP sets via the 'iptables-ipsets' action instead of individual IPs. 1 release · first seen Jul 2013

release

  • Adds iptables-ipsets action allowing bans to target IP sets instead of individual IPs 0.8.9 · Jul 2013 · source · release history
Anti-reoffender jail support shipped Provides a dedicated filter and jail mechanism to monitor ban logs and impose extended bans on IPs that repeatedly attempt unauthorized access. 1 release · first seen Jul 2012

release

  • Adds recidive filter/jail to ban repeated offenders by monitoring fail2ban.log 0.8.7 · Jul 2012 · source · release history
DNS resolution control shipped Allows users to disable DNS lookups for banned IPs via configuration parameters, optimizing performance and preventing DNS-based delays or failures. 1 release · first seen Jul 2012

release

  • Adds usedns parameter to jail configurations to disable DNS lookups 0.8.7 · Jul 2012 · source · release history
Selective jail reloading shipped Allows users to reload the configuration of a specific jail without restarting the entire service. 1 release · first seen Mar 2008

Also counts toward: Command-line interface

release

  • reload <jail> subcommand added to fail2ban-client to reload a single jail configuration 0.8.2 · Mar 2008 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for Fail2ban, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail Fail2ban puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Releases

Show

49 entries

  1. August 20261
  2. April 20241
  3. July 20211
  4. November 20201
  5. January 20202
  6. October 20181
  7. April 20181
  8. January 20181
  9. October 20171
  10. August 20171
  11. May 20171
  12. December 20161
  13. July 20162
  14. March 20161
  15. August 20151
  16. April 20151
  17. October 20141
  18. March 20142
  19. January 20141
  20. November 20131
  21. July 20131
  22. June 20131
  23. December 20121
  24. July 20121
  25. November 20111
  26. September 20091
  27. March 20081
  28. August 20071
  29. February 20071
  30. January 20071
  31. December 20061
  32. November 20061
  33. September 20062
  34. August 20061
  35. March 20061
  36. November 20051
  37. October 20051
  38. September 20051
  39. August 20051
  40. July 20052
  41. June 20051
  42. February 20051
  43. November 20041
  44. October 20041
    Show

    49 entries

    Project health

    Issue, contributor and maintainer activity in fail2ban/fail2ban, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 13 −4 vs prior 12 months
    2. Maintainers 3 +2 joined · −1 left, last 12 months
    3. Bus factor 2 committers behind half the commits
    4. Community-filed 100% of issues opened, last 12 months
    5. Median time to close < 1 day first maintainer reply 10 hours
    6. Open backlog 162 of 2,461 issues ever filed
    1. Issues opened / month 3 · 0 communitymaintainers
    2. Open backlog 162
    3. Contributors / month 1
    4. Commits / month 4
    5. Stars 18,655
    Issue themes, last 12 months
    • bugs 33%
    • features 25%
    • questions 9%
    • docs 4%
    • other 29%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Articles

    3 articles · updated Nov 4, 2026

    Where Fail2ban turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.

    Tutorials & guides 3

    • How To Protect SSH with Fail2Ban in 5 Easy Steps TecAdmin
      One of the best tools to protect your SSH server is Fail2Ban.
      2 more quotes
      In this article, we’ll guide you through securing your SSH server in 5 easy steps using Fail2Ban on Debian and RHEL-based systems.
      Step 1: Install Fail2Ban First, you need to install Fail2Ban on your server.
    • How to Install and Configure Fail2ban on Ubuntu 24.04 TecAdmin
      Fail2ban is a powerful tool that can help protect your server by automatically blocking suspicious activity.
      2 more quotes
      In this guide, we’ll walk you through the steps to install and configure Fail2ban on your Ubuntu 24.04 server.
      Step 2: Installing Fail2ban First, you need to install Fail2ban on your Ubuntu 24.04 server.
    • Defend against Brute Force Attack with Fail2ban Hacking Articles
      Introduction to fail2ban Lab Setup Requirement Brute Force Attack in Absence of IPS Intrusion Prevention Lab Set-Up Configure Fail2Ban Protect SSH Against Brute Force Attack Testing Fail2ban How to unban IP in fail2ban…
      2 more quotes
      Introduction to fail2ban Fail2ban scans log files (e.g.
      Generally, Fail2Ban is then used to update firewall rules to reject the IP addresses for a specified amount of time.

    Libraries its release ships

    What its latest release locks, checked against known advisories.

    None of its release's images build from a lockfile we can read.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →