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

最佳答案

我能够从您发布的要点开始完成此任务。这是假设您已经使用 Traefik,想要阻止具有 HTTP 基本身份验证失败的 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 禁止。如果要更改,可以更改 banaction 中的默认 traefik.conf ,例如:
[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目录下,重启容器即可。

关于docker - 如何使用 Traefik 实现 fail2ban,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52123355/

10-13 02:31