Skip to content
🐳 Fail2ban Docker image based on Alpine Linux
Branch: master
Clone or download
Latest commit f9069c4 Jun 23, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Update FUNDING Jun 23, 2019
.res Update logo Jun 7, 2018
examples Add F2B_LOG_TARGET var (Issue #22) May 2, 2019
.dockerignore Update build script Jan 8, 2019
.editorconfig Add ip6tables Apr 24, 2019
.gitattributes Update attributes Apr 28, 2019
.gitignore Initial version based on Fail2ban Apr 24, 2018
.travis.yml Remove MicroBadger May 1, 2019 Alpine Linux 3.10 Jun 23, 2019
Dockerfile Alpine Linux 3.10 Jun 23, 2019
LICENSE New year Jan 8, 2019 Update README May 2, 2019 Remove MicroBadger May 1, 2019 Add F2B_LOG_TARGET var (Issue #22) May 2, 2019

Latest Version Build Status Docker Stars Docker Pulls Docker Repository on Quay Code Quality Donate Paypal


🐳 Fail2ban Docker image based on Alpine Linux.
If you are interested, check out my other 🐳 Docker images!


Environment variables

  • TZ : The timezone assigned to the container (default UTC)
  • F2B_LOG_TARGET : Set the log target. This could be a file, SYSLOG, STDERR or STDOUT (default STDOUT)
  • F2B_LOG_LEVEL : Log level output (default INFO)
  • F2B_DB_PURGE_AGE : Age at which bans should be purged from the database (default 1d)
  • F2B_MAX_RETRY : Number of failures before a host get banned (default 5)
  • F2B_DEST_EMAIL : Destination email address used solely for the interpolations in configuration files (default root@localhost)
  • F2B_SENDER : Sender email address used solely for some actions (default root@$(hostname -f))
  • F2B_ACTION : Default action on ban (default %(action_)s)
  • F2B_IPTABLES_CHAIN : Specifies the iptables chain to which the Fail2Ban rules should be added (default DOCKER-USER)
  • SSMTP_HOST : SMTP server host
  • SSMTP_PORT : SMTP server port (default 25)
  • SSMTP_HOSTNAME : Full hostname (default $(hostname -f))
  • SSMTP_USER : SMTP username
  • SSMTP_PASSWORD : SMTP password
  • SSMTP_TLS : SSL/TLS (default NO)

⚠️ If you want email to be sent after a ban, you have to configure SSMTP env vars and set F2B_ACTION to %(action_mw)s or %(action_mwl)s


  • /data : Contains customs jails, actions and filters and Fail2ban persistent database

Use this image

Docker Compose

Docker compose is the recommended way to run this image. Copy the content of folder examples/compose in /var/fail2ban/ on your host for example. Edit the compose and env files with your preferences and run the following commands :

docker-compose up -d
docker-compose logs -f

Command line

You can also use the following minimal command :

docker run -d --name fail2ban --restart always \
  --network host \
  --cap-add NET_ADMIN \
  --cap-add NET_RAW \
  -v $(pwd)/data:/data \
  -v /var/log:/var/log:ro \



In Docker 17.06 and higher through docker/libnetwork#1675, you can add rules to a new table called DOCKER-USER, and these rules will be loaded before any rules Docker creates automatically. This is useful to make iptables rules created by Fail2Ban persistent.

If you have an older version of Docker, you may just change F2B_IPTABLES_CHAIN to FORWARD. This way, all Fail2Ban rules come before any Docker rules but these rules will now apply to ALL forwarded traffic.

More info :


If your Fail2Ban container is attached to DOCKER-USER chain instead of INPUT, the rules will be applied only to containers. This means that any packets coming into the INPUT chain will bypass these rules that now reside under the FORWARD chain.

This implies that sshd jail for example will not work as intended. You can create another Fail2Ban container. Take a look at this example.

Use fail2ban-client

Fail2ban commands can be used through the container. Here is an example if you want to ban an IP manually :

docker exec -t <CONTAINER> fail2ban-client set <JAIL> banip <IP>

Custom actions and filters

Custom actions and filters can be added in /data/action.d and /data/filter.d. If you add an action/filter that already exists, it will be overriden.

⚠️ Container has to be restarted to propagate changes

Jail examples

Jail examples can be found in examples/jails to work with this image.

How can I help ?

All kinds of contributions are welcome πŸ™Œ!
The most basic way to show your support is to star 🌟 the project, or to raise issues πŸ’¬
But we're not gonna lie to each other, I'd rather you buy me a beer or two 🍻!



MIT. See LICENSE for more details.

You can’t perform that action at this time.