如何使用Traefik实现fail2ban

时间:2018-08-31 22:44:16

标签: docker traefik fail2ban

我有兴趣在Traefik部署中设置fail2ban。我找到了gist that has some snippets in it,但不清楚如何使用它们。任何人都可以填补空白吗?还是有更好的方法通过Traefik来实现fail2ban样式的安全性?

1 个答案:

答案 0 :(得分:10)

从您发布的要旨开始,我就能够做到这一点。这是在您已经有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禁止。如果要更改,可以更改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目录中,然后重新启动容器。