# Debian 10 docker 设置 fail2ban 过滤 traefik中BasicAuth失败的IPs
现在fail2ban也上docker了。
补充一::因为我的系统是Debian10,根据我上一篇教程直接安装fail2ban时会把iptables模块启用。所以直接按照下面的配置来即可。
补充二:查看crazymax的说明文档https://github.com/crazy-max/docker-fail2ban/blob/master/CHANGELOG.md
在0.11.1-RC3 (2020/07/30)日志中,移除了F2B_IPTABLES_CHAIN这个参数,所以网上有些教程不适合新的版本了。
整体结构如下:
./fail2ban
├── docker-compose.yml
├── fail2ban.env
└── fail2ban_data
docker-compose.yml内容如下:
services:
fail2ban:
image: crazymax/fail2ban:latest
container_name: fail2ban
network_mode: "host"
env_file:
- "./fail2ban.env"
privileged: true
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- ./fail2ban_data:/data
# 下面的文件路径你根据需要换成traefik的logs的路径
- /home/wwwroot/traefik/data/logs:/var/log:ro
restart: always
fail2ban.env内容如下:
TZ=Asia/Shanghai
F2B_LOG_TARGET=STDOUT
F2B_LOG_LEVEL=INFO
F2B_DB_PURGE_AGE=1d
SSMTP_HOST=smtp.example.com
SSMTP_PORT=587
SSMTP_HOSTNAME=example.com
SSMTP_USER=smtp@example.com
SSMTP_PASSWORD=
SSMTP_TLS=YES
进入文件夹,启动容器
docker-compose up -d
在fail2ban_data/filter.d下建立文件traefik-botsearch.conf,内容如下:
[INCLUDES]
before = botsearch-common.conf
[Definition]
failregex = ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) \/<block> \S+\" 404 .+$
在fail2ban_data/jail.d下建立文件traefik.conf,内容如下:
[traefik-auth]
enabled = true
chain = DOCKER-USER
port = http,https
filter = traefik-auth
mode = aggressive
logpath = /var/log/access.log
[traefik-auth-ddos]
filter = traefik-auth[mode=ddos]
[traefik-botsearch]
enabled = true
chain = DOCKER-USER
port = http,https
filter = traefik-botsearch
logpath = /var/log/access.log
一些有用的命令:
sudo docker exec fail2ban fail2ban-client status
上面将列出您的 Fail2ban jail
sudo docker exec fail2ban fail2ban-client status traefik-auth
提供有关traefik-auth 的具体信息 - 包括任何被禁止的IP地址。
sudo docker exec fail2ban fail2ban-client set traefik-auth banip 1.1.1.1
将禁止特定 IP - 在所示示例中,它是 1.1.1.1 - 根据需要进行更改。
sudo docker exec fail2ban fail2ban-client set traefik-auth unbanip 1.1.1.1
以上将取消禁止特定IP - 在所示示例中,它是 1.1.1.1 - 根据需要进行更改。
(可选)
在fail2ban_data下建立文件jail.local,内容如下:
[DEFAULT]
# action = %(action_mwl)s
ignoreip = 192.168.1.0/24
这样可以告诉fail2ban忽略来自局域网的IP
(进阶)使用cloudflare来禁IP
根据你的需要拷贝文件cloudflare.conf到action.d,重启容器,这里不展开了
END