如何使用 Traefik 实现 fail2ban

How to implement fail2ban with Traefik

我有兴趣在我的 Traefik 部署中设置 fail2ban。我找到了 gist that has some snippets in it,但我不清楚如何使用它们。请问有人可以填空吗?或者,是否有更好的方法来使用 Traefik 实现 fail2ban 风格的安全性?

我能够从您发布的要点开始完成这项工作。这是在您已经使用 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

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

现在对于 fail2ban 部分,我使用的是 fail2ban docker container 而不是安装在我的主机上,但从技术上讲,您也可以在那里安装。

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

你可以看到我将 /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

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

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

额外

默认的禁止操作是通过iptables 禁止。如果你想改变,你可以在traefik.conf中改变默认的banaction,例如:

[DEFAULT]
banaction = cloudflare

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

操作在这里:https://github.com/fail2ban/fail2ban/tree/0.11/config/action.d

如果需要修改,将文件复制到/apps/docker/fail2ban/data/action.d目录,然后重启容器。