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
相关产品推荐
相关产品推荐

