如何使用Traefik实现fail2ban

Sef*_*off 6 docker fail2ban traefik

我有兴趣使用我的Traefik部署来设置fail2ban.我找到了一个有一些片段要点,但我不清楚如何使用它们.任何人都可以填空吗?或者,有没有更好的方法来实现与Traefik的fail2ban风格的安全性?

小智 13

我从你发布的要点开始就完成了这个任务.这是在Traefik已经工作的假设下,想要阻止具有HTTP Basic Auth失败的IP,并使用iptables禁止它们.有几件,所以让我从容器配置开始:

Traefik docker-compose.yaml

version: '2'
services:
  traefik:
    image: traefik:alpine
    volumes:
    - /apps/docker/traefik/traefik.toml:/traefik.toml:ro
    - /apps/docker/traefik/acme:/etc/traefik/acme
    - /var/log/traefik:/var/log
    ports:
    - 8080:8080/tcp
    - 80:80/tcp
    - 443:443/tcp
    command:
    - --web
    - --accessLog.filePath=/var/log/access.log
    - --accessLog.filters.statusCodes=400-499
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到我正在编写日志文件/var/log/access.log并且只获取访问代码400-499.然后我将该文件挂载到我的主机/var/log/traefik:/var/log

现在对于fail2ban部分,我使用的是fail2ban docker容器,而不是在我的主机上安装,但你也可以从技术上做到这一点.

Fail2ban docker-compose.yaml

version: '2'
services:
  fail2ban:
    image: crazymax/fail2ban:latest
    network_mode: "host"
    cap_add:
    - NET_ADMIN
    - NET_RAW
    volumes:
    - /var/log:/var/log:ro
    - /apps/docker/fail2ban/data:/data
Run Code Online (Sandbox Code Playgroud)

您可以看到我将/var/log目录作为只读挂载到fail2ban容器中.

Fail2ban配置

/apps/docker/fail2ban/data/jail.d/traefik.conf文件包含:

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https
Run Code Online (Sandbox Code Playgroud)

/apps/docker/fail2ban/data/filter.d/traefik-auth.conf文件包含:

[Definition]
failregex = ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) .+\" 401 .+$
ignoreregex =
Run Code Online (Sandbox Code Playgroud)

额外

默认禁止操作是通过iptables禁止.如果你想改变,你可以更改默认banactiontraefik.conf,例如:

[DEFAULT]
banaction = cloudflare

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https
Run Code Online (Sandbox Code Playgroud)

行动在这里:https://github.com/fail2ban/fail2ban/tree/0.11/config/action.d

如果需要修改一个,请将文件复制到/apps/docker/fail2ban/data/action.d目录并重新启动容器.

  • 我修改了两件事以使其在 2020 年 11 月开始工作--- 1. 将failregex更改为failregex = ^&lt;HOST&gt; \- \S+ \[.*] \"(GET|POST|HEAD).+\" 401 .+$ ---- 2. 在 traefik.conf 中添加 chain = DOCKER-USER (2认同)