This plugin is an implementation of the fail2ban mechanism as a middleware plugin for Traefik.
This is a fork of fail2ban project, to propose X-Real-Ip headers implementation.
You can whitelist some IP using this:
testData:whitelist:files:- "tests/test-ipfile.txt"ip:- "::1"- "127.0.0.1"
Where you can use some IP in an array of files or directly in the configuration.
Like whitelist, you can blacklist some IP using this:
testData:blacklist:files:- "tests/test-ipfile.txt"ip:- "::1"- "127.0.0.1"
Where you can use some IP in an array of files or directly in the configuration.
We plan to use all default fail2ban configuration but at this time only a few features are implemented:
testData:rules:urlregexps:- regexp: "/no"mode: block- regexp: "/yes"mode: allowbantime: "3h"findtime: "10m"maxretry: 4enabled: truexrealip: true
Where:
findtime: is the time slot used to count requests (if there is too many
requests with the same ip in this slot of time, the ip goes into ban). You can
use 'smart' strings: "4h", "2m", "1s", ...bantime: correspond to the amount of time the IP is in Ban mode.maxretry: number of request before Ban mode.enabled: allow to enable or disable the plugin (must be set to true to
enable the plugin).urlregexp: a regexp list to block / allow requests with regexps on the urlxrealip: use X-Real-Ip http header value, instead of kernel visible IP sourceUrlregexp are used to defined witch part of your website will be either allowed, blocked or filtered :
testData:rules:bantime: "3h"findtime: "10m"maxretry: 4enabled: truexrealip: true
By default, fail2ban will be applied.
testData:rules:urlregexps:- regexp: "/whoami"mode: allow- regexp: "/do-not-access"mode: blockbantime: "3h"findtime: "10m"maxretry: 4enabled: truexrealip: true
In the case where you define multiple regexp on the same url, the order of process will be :
In this example, all requests to /do-not-access will be denied and all
requests to /whoami will be allowed without any fail2ban interaction.
First request, IP is added to the Pool, and the findtime timer is started:
A |------------->
↑
Second request, findtime is not yet finished thus the request is fine:
A |--x---------->
↑
Third request, maxretry is now full, this request is fine but the next wont.
A |--x--x------->
↑
Fourth request, too bad, now it's jail time, next request will go through after
bantime:
A |--x--x--x---->
↓
B |------------->
Fifth request, the IP is in Ban mode, nothing happen:
A |--x--x--x---->
B |--x---------->
↑
Last request, the bantime is now over, another findtime is started:
A |--x--x--x----> |------------->
↑
B |--x---------->
$ docker compose up
| Tom Moulard | Clément David | Martin Huvelle | Alexandre Bossut-Lasry |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |