docker - 如何使用 Traefik 实现 fail2ban

标签 docker traefik fail2ban

我有兴趣在我的 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 禁止。如果要更改,可以更改 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目录并重启容器。

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

相关文章:

windows - 在 Ubuntu 上启动 Docker 时出错

docker - ENV/ARG命令未在Dockerfile中填充变量

docker - 带有 Letsencrypt 的 Traefik V2.0 无法为域生成证书

docker - 具有多个子域的 Traefik 和具有子路径的 URL

logging - 使用 Fail2ban 和 Docker 保护服务器

ansible - 如何使用ansible安装fail2ban?

performance - 使用Elasticsearch优化服务器操作:解决磁盘空间不足的问题

spring-boot - Spring Cloud Consul和Consul客户端 docker 化

Docker 中的安全配置文件 (docker build --security-opt)

c# - docker 中的 ASP.NET Core kestrel windows 身份验证识别错误的用户