# In jail.local or jail.conf
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 file:///etc/fail2ban/trusted-ips.txt
# In jail.local
[exim]
enabled = true
filter = exim[mode=aggressive]
fail2ban-client stats
fail2ban-regex /var/log/nginx/error.log filter.d/nginx-forbidden
fail2ban-client set <jail_name> unbanip <cidr_address>
fail2ban-client set myjail attempt 192.0.2.1 'Invalid password'
[DEFAULT]
ignorecache = true
ignoreip = 127.0.0.1/8 ::1
[sshd]
ignorecommand = /usr/local/bin/check_whitelist.py <ip-host> F-USER
fail2ban-client -V
# In jail.conf or custom action file, use the new netscaler action
action = netscaler[iptype=%(banfamily)s]
#!/usr/bin/env fail2ban-python
print("fail2ban modules available")
[Init?family=inet6]
# ... configuration for IPv6 only
[DEFAULT]
action = %(action_mwl)s
# Note: abuseipdb categories must be set as per documentation for this version
fail2ban-client unban <IP>
ignoreip = 127.0.0.1/8 ::1 192.168.1.1,10.0.0.5
[froxlor-jail]
enabled = true
filter = froxlor-auth
logpath = /var/log/froxlor.log
backend = auto
fail2ban-client status <jail> cymru
[sshd-journal]
enabled = true
filter = sshd
logpath = %s
journalmatch = _SYSTEMD_UNIT=ssh.service
[DEFAULT]
banaction = iptables-ipset
action = %(action_)s
[DEFAULT]
logencoding = utf-8
[nagios]
enabled = true
filter = nagios
action = iptables-multiport
[sendmail-auth]
enabled = true
filter = sendmail-auth
action = iptables-multiport
[sendmail-reject]
enabled = true
filter = sendmail-reject
action = iptables-multiport
fail2ban-client flushlogs
[jail]
ignorecommand = /usr/local/bin/check-ip-whitelist.py %(ip)s
[sshd]
action = firewallcmd-new[protocol=all, chain=INPUT]
fail2ban-client -b /etc/fail2ban/jail.local && echo 'Config valid' || echo 'Config invalid'
# Example snippet for fail2ban/jail.local
[sshd]
ignoreip = 127.0.0.1/8
ignoreregex = ^.*user=authorized.*$
# Example snippet for fail2ban/filter.d/custom-app.conf
[Definition]
failregex = ^<HOST> .* error: authentication failure$ .*$
# Example snippet for fail2ban/action.d/custom-action.conf
[Definition]
actionban = echo "Banned <ip> after <failures> failures at <time>" >> /var/log/bans.log
fail2ban-server -s /var/run/fail2ban/fail2ban.sock
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
fail2ban-client -i
fail2ban-client -s /var/run/fail2ban/fail2ban.sock ping
fail2ban-server -f 3600
ignoreip = 127.0.0.1/8 ::1/128 192.168.1.0/24
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
fail2ban-client -k; fail2ban-server --ipfw-start-rule /etc/fail2ban/ipfw.rules
fail2ban-server -e eth0
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.
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
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.
+Advanced log filtering and configurationshippedExpands 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 filtersshippedProvides 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 testingshippedProvides 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 modulesshippedAdds 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 managementshippedProvides 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 targetingshippedEnables 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 configurationshippedProvides 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 interfaceshippedProvides 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 supportshippedAdds 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 interpolationshippedSupports 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 activationshippedInstalls 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 managementshippedSupports 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 supportshippedEnsures 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 protectionshippedAdds 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 checksshippedImplements 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 logicshippedAllows 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 supportshippedAdds 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
+Exim ACL failure detectionshippedExtends 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 enhancementsshippedExtends 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 supportshippedAdds 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
+Date format customizationshippedSupports 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 architectureshippedAllows 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▸
Adds Client/Server architecture for distributed ban management
0.7.0 · Aug 2006
· source
· release history
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 matchingshippedEnhances 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 executionshippedAllows 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 supportshippedMaintains 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 actionshippedAdds 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 supportshippedAdds 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 tokensshippedAdds 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 managementshippedIsolates 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 enhancementsshippedExpands 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 processingshippedUtilizes 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 rulesshippedSupports 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 supportshippedAllows 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
Adds support for log file encoding configuration
0.9.0 · Mar 2014
· source
· release history
example
Specify a custom log file encoding for fail2ban to read.$ [DEFAULT] logencoding = utf-8
0.9.0 · Mar 2014
· source
+Log rotation capabilitiesshippedEnables 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 monitoringshippedAdds 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 monitoringshippedIntegrates 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 supportshippedEnables 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 supportshippedAdds 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 selectionshippedAllows 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
Adds -e option to set the network interface.
0.1.2 · Nov 2004
· source
· release history
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 integrationshippedUpdates 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 updatesshippedUpdates 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 supportshippedExtends 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 controlshippedAllows 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 modeshippedProvides 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 utilityshippedProvides 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 customizationshippedProvides 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 controlshippedAllows users to explicitly flush the internal log buffer via OS signals for immediate persistence.1 release · first seen Apr 2015▸
release
Flushes log buffer on USR1 signal receipt
0.9.2 · Apr 2015
· source
· release history
+Action instance stackingshippedEnables 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 defaultsshippedAllows 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 toolsshippedAdds 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 supportshippedAdds an action module for the macOS afctl firewall to manage bans on OSX systems.1 release · first seen Nov 2013▸
+Interactive shell completionsshippedProvides 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 targetingshippedEnables 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 supportshippedProvides 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 controlshippedAllows 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 reloadingshippedAllows 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.
Command line
View
Source
No command matches.
load a captured run
composed command
No matchesTry a different search, or clear a filter to see more.
option surface across analysed releases
options at that releaseadded, per releaseremoved, per release
option
found in
since
description
No matchesTry a different search, or clear a filter to see more.
option changes per release — drag across the rail to set a range
→
Values are placeholders taken from each option’s declared default.
Nothing is executed here — the output shown is a recording of a run
that already happened.
Score card
Shipping velocityreleases a month, last 12 months
Documentation qualityrelease-notes rubric, 0–100
Breaking-change disciplinehow rarely a release breaks users, and notice given
Maintenance riskquiet time against its own cadence, maintainers
Innovation & surfacenew capabilities, API and MCP surface
Community health
Contributor trenddistinct committers, this year against last
Maintainer concentrationbus factor now against a year ago
Issue backlog trendissues closed per issue opened, 12 months
Responsivenessmedian 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.
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.
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.
Contributors13−4 vs prior 12 months
Maintainers3+2 joined · −1 left, last 12 months
Bus factor2committers behind half the commits
Community-filed100%of issues opened, last 12 months
Median time to close< 1 dayfirst maintainer reply 10 hours
Open backlog162of 2,461 issues ever filed
Issues opened / month3 · 0communitymaintainers
Open backlog162
Contributors / month1
Commits / month4
Stars18,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.
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.