【问题标题】:Docker chain in iptables overrides INPUT rulesiptables 中的 Docker 链覆盖 INPUT 规则
【发布时间】:2018-11-30 16:24:37
【问题描述】:

我有一台服务器,并且正在运行一些 docker 容器。这些容器有几个未打开的端口。我添加了 INPUT 规则,只允许从 1 个 ip 访问这些端口,之后我有一个 DROP 规则。

这应该会阻止除我的家庭 IP 之外的所有对端口的访问。现在事实证明,docker 只允许一切,并且 docker 能够以某种方式覆盖输入规则,因为输入规则不起作用。

我认为这与 FORWARDING 规则有关,如下所示:

Chain FORWARD (policy ACCEPT) target prot opt source destination DOCKER-USER all -- anywhere anywhere DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhereACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED DOCKER all -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere

我已经刷新了所有规则,然后我从 docker 收到了非常奇怪的错误,例如:

driver failed programming external connectivity on endpoint gogs (b62814647bf440e923c009da0ca76185fac2f89a9534eb11792dbcb07ef3ffbf): (iptables failed: iptables --wait -t filter -A DOCKER ! -i br-5dd41982af68 -o br-5dd41982af68 -p tcp -d 172.18.0.6 --dport 3000 -j ACCEPT: iptables: No chain/target/match by that name.

如何确保输入规则覆盖所有内容,以便 INPUT 链上的端口过滤阻止除我之外的其他所有人访问?

【问题讨论】:

    标签: docker iptables


    【解决方案1】:

    我找到了答案。事实证明,INPUT 链被跳过,而是 FORWARDING 链用于 docker。 FORWARDING 链的第一条规则是读取 DOCKER-USER 链。该链将包含未被 docker 覆盖的 docker 规则。

    假设您希望您的家庭 ip 访问某些端口并为其他人阻止它们。使用这两条规则:

    iptables -A DOCKER-USER -i eth0 -s YOURIP -p tcp -m conntrack --ctorigdstport 8000:10000 -j ACCEPT
    iptables -A DOCKER-USER -i eth0 -p tcp -m conntrack --ctorigdstport 5000:9999 -j DROP
    

    此外,您还需要使用 ctorigdstport 参数,因为正在进行某种形式的 nat 转换,而 dport 参数将不起作用。

    【讨论】:

    • 请注意,--ctorigdstport 匹配连接的第一个数据包(由conntrack 跟踪)的原始目标端口,而不是被过滤的数据包!所以丢弃规则也会丢弃对从 Docker 到 5000-9999 的 outgoing 连接的响应!将--ctdir ORIGINAL 添加到 DROP 规则以仅匹配传入的数据包。见github.com/moby/moby/issues/22054#issuecomment-466663033
    • 为了清楚起见,您所说的“FORWARDING”是指“FORWARD”链?
    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2023-01-26
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多