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

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

我相信这与看起来像这样的FORWARDING规则有关:
Chain FORWARD (policy ACCEPT)target prot opt source destinationDOCKER-USER all -- anywhere anywhereDOCKER-ISOLATION-STAGE-1 all -- anywhere anywhereACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHEDDOCKER all -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHEDDOCKER all -- anywhere anywhereACCEPT all -- anywhere anywhereACCEPT 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链上的端口过滤停止除我以外的所有用户的访问?

最佳答案

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

假设您想让自己的家庭IP访问某些端口并为其他人阻止它们。使用以下2条规则:

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参数将不起作用。

关于docker - iptables中的Docker链会覆盖INPUT规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53541274/

10-13 01:58