You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iptables-allports对Docker部署在81端口的站点封禁失效求助

解决Fail2ban无法封禁Docker 81端口暴力破解IP的问题

你遇到的核心问题其实是Docker容器的网络流量优先级高于Fail2ban默认添加的iptables规则,导致81端口的封禁没生效。下面给你一步步的排查和解决方法:

问题根源分析

Docker启动时会自动创建专属的iptables链(比如DOCKER、DOCKER-USER),所有流向Docker容器的流量都会先经过这些链。而Fail2ban默认的iptables-allports action是把封禁规则添加到INPUT链里,由于链的执行顺序问题,INPUT链的规则还没生效,流量已经被Docker的链处理了,所以81端口(容器端口)的封禁没起作用。

解决方案:自定义Fail2ban Action适配Docker网络

我们需要创建一个自定义的action,让Fail2ban把封禁规则加到Docker预留的DOCKER-USER链——这个链是专门给用户添加自定义规则用的,所有Docker流量都会先经过它。

步骤1:创建自定义Action文件

在/etc/fail2ban/action.d/目录下新建iptables-docker-allports.conf文件,内容如下:

[Definition]
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I DOCKER-USER -p tcp -j fail2ban-<name>
              iptables -I DOCKER-USER -p udp -j fail2ban-<name>

actionstop = iptables -D DOCKER-USER -p tcp -j fail2ban-<name>
             iptables -D DOCKER-USER -p udp -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

actioncheck = iptables -n -L DOCKER-USER | grep -q fail2ban-<name>

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

步骤2:修改你的Jail配置

打开你的Fail2ban jail配置文件(比如/etc/fail2ban/jail.d/mysite.conf),把action字段改成我们刚创建的自定义action:

[mysite]
enabled = true
port = http,https,81
filter = mysite
logpath = /var/log/mysite.log
maxretry = 10
findtime = 3600
bantime = 30
action = iptables-docker-allports

步骤3:重启Fail2ban服务

执行命令重启服务让配置生效:

systemctl restart fail2ban

步骤4:验证配置是否生效

  1. 用一个测试IP触发暴力破解(比如连续10次访问登录接口失败)
  2. 查看Fail2ban日志确认IP被封禁:
    tail -f /var/log/fail2ban.log
    
  3. 检查iptables规则,确认DOCKER-USER链里已经添加了封禁规则:
    iptables -n -L DOCKER-USER
    
  4. 测试被封禁的IP是否无法访问81端口的站点。

额外检查:确保Filter规则匹配81端口日志

还要确认你的mysite filter(/etc/fail2ban/filter.d/mysite.conf)能正确识别81端口的暴力破解日志条目。比如你的日志格式如果包含端口信息,正则规则要能覆盖到,示例如下:

[Definition]
# 请根据你的实际日志格式调整正则
failregex = ^<HOST> -.*"POST /login HTTP/1.1" 401 .*:81$
            ^<HOST> -.*"GET /admin HTTP/1.1" 403 .*:81$
ignoreregex =

这样调整后,Fail2ban就能正确封禁访问81端口的暴力破解IP了。

内容的提问来源于stack exchange,提问作者JemoeE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:06:27