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

Docker容器化Fail2Ban无法修改宿主机iptables以拦截NextCloud恶意连接的问题求助

Docker容器化Fail2Ban无法修改宿主机iptables以拦截NextCloud恶意连接的问题求助

我现在想用容器化的Fail2Ban来拦截对我的NextCloud容器的恶意连接,但目前遇到个棘手的问题——Fail2Ban只会修改自己容器内的iptables规则,根本碰不到宿主机的iptables,这就完全起不到拦截NextCloud流量的作用了。

当前配置情况

Docker Compose配置

app:
  image: nextcloud:latest
  container_name: nextcloud_app
  restart: always
  ports:
    - 7000:80
    - 7001:443
  # 省略其他无关配置...

fail2ban:
  image: lscr.io/linuxserver/fail2ban:latest
  container_name: nextcloud_fail2ban
  network_mode: host
  restart: always
  environment:
    - PUID=1000
    - PGID=1000
  volumes:
    - ./data/fail2ban:/config
    - ./data/nextcloud/data:/var/log:ro # 挂载NextCloud日志目录用于Fail2Ban读取
  cap_add:
    - NET_ADMIN
    - NET_RAW

Fail2Ban的jail.d/nextcloud.conf配置

[nextcloud]
enabled = true
port = 80,443,7000,7001
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log
maxretry = 3
bantime = 86400
findtime = 14400

# 我尝试过但注释掉的配置:
# banaction = docker-action
# chain = DOCKER-USER
# action = iptables[actname=iptables-input,   name=HTTPS,                       port=https, protocol=tcp]
#          iptables[actname=iptables-forward, name=HTTPS-DOCKER, chain=FORWARD, port=443, protocol=tcp]

当前遇到的现象

现在Fail2Ban确实能在自己的容器里生成正确的封禁规则,比如测试封禁IP 192.168.1.125 时,容器内的iptables规则如下:

root@grievous:/# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-nextcloud
-A INPUT -p tcp -m multiport --dports 80,443,7000,7001 -j f2b-nextcloud
-A f2b-nextcloud -s 192.168.1.125/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-nextcloud -j RETURN

但宿主机的iptables完全没有任何变化,这根本达不到我的需求——我要拦截的是到NextCloud容器的恶意流量,而不是到Fail2Ban容器的。

尝试过的解决方案(均无效)

  • 尝试配置DOCKER-USER链,但配置后连容器内的iptables规则都无法生成;
  • 试过网上找到的docker-action.conf自定义动作配置,但它依然只在Fail2Ban容器内生成规则,对宿主机无影响:
[Definition]
actionstart = iptables -N f2b-npm-docker
              iptables -A f2b-npm-docker -j RETURN
              iptables -I FORWARD -p tcp -m multiport --dports 0:65535 -j f2b-npm-docker

actionstop = iptables -D FORWARD -p tcp -m multiport --dports 0:65535 -j f2b-npm-docker
             iptables -F f2b-npm-docker
             iptables -X f2b-npm-docker

actioncheck = iptables -n -L FORWARD | grep -q 'f2b-npm-docker[ \t]'

actionban = iptables -I f2b-npm-docker -s <ip> -j DROP

actionunban = iptables -D f2b-npm-docker -s <ip> -j DROP
  • 不想采用直接在宿主机安装Fail2Ban的方案,希望保持全容器化部署。

核心疑问

我现在最想搞清楚的是——怎么让容器化的Fail2Ban修改宿主机的iptables规则,而不是局限在自己容器内部? 是不是network_mode的配置还有什么遗漏?
我看到过相关思路提到Fail2Ban需要以特定方式运行来获得修改宿主机iptables的权限,但始终没能把这些点串联起来解决问题。

求各位大佬帮忙解答,万分感激!

备注:内容来源于stack exchange,提问作者Felix Schneider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:20:29