禁止Docker服务绕过ufw,通过iptables对外开放端口

为什么 Docker 映射端口会绕过 UFW?

  • Docker 会直接操作 iptables 当你运行 docker run -p 3000:3000 时,Docker 会在系统层面插入一条 iptables 规则,把外部的 3000 端口直接转发到容器里。这些规则优先级较高,UFW 默认不会拦截这类流量。

  • UFW 使用的是 user-defined chains Docker 默认插入规则在 DOCKER 和 DOCKER-USER chain,而 UFW 的规则通常放在 ufw-before、ufw-user-input 等链中。因为调用顺序的不同,数据包会先经过 Docker 的规则,直接被放行。

  • UFW 对 loopback 和容器网络控制力有限 如果容器绑定到 127.0.0.1 或 bridge 网络,UFW 没办法有效拦截这种内部网络流量,除非专门配置。

禁止Docker服务自动开放端口

sudo mkdir -p /etc/docker
echo '{"iptables": false}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

Related Posts