gpt4 book ai didi

linux - 允许 DOCKER-USER 链中的某些 IP 用于入站流量,拒绝所有其余 IP

转载 作者:行者123 更新时间:2023-12-02 18:07:26 28 4
gpt4 key购买 nike

我试图只允许某些 IP 地址访问主机上 docker 容器公开的端口。所有其余的外部 IP 都应该无法访问它们(即使我在 0.0.0.0 上公开了一个端口)。互联网上有很多变通办法如何实现这一点——从禁用 docker 的 iptables 管理开始,然后手动管理所有 iptables 规则(这不是很酷,特别是如果你必须处理 docker swarm 入口路由等),直到使用 cronjobs 和自定义脚本重置 iptables 规则的肮脏解决方案。但是,嘿,我们有一个 DOCKER-USER 链,它似乎适合这类东西?

Docker 与防火墙的问题

正如我们所知,docker 在启动时添加了一些 iptables 链和规则,以发挥其网络魔力。问题是它在每次 docker 服务重新启动时将这些链添加到 FORWARD 链的最顶端,这意味着您在该链上带有拒绝的所有预定义规则都变得完全无用。 Docker documentation suggests to use its DOCKER-USER chain for such kind of things (这条链中的规则从 docker 的角度来看是持久的,并且在任何其他 docker 规则之前执行)。

从 docker 文档中的示例我们看到我们可以允许访问一个 IP(并拒绝其他 IP)使用

-I DOCKER-USER -i eth0 ! -s 1.2.3.4 -j DROP

此命令有效,只有 IP 1.2.3.4 可以访问 docker 的公开端口。但问题是在这种情况下容器无法连接到 Internet

所以情况是...

Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

一切正常,所有外部流量都被允许,并且:

Chain DOCKER-USER (1 references)
target prot opt source destination
DROP all -- !1.2.3.4 0.0.0.0/0
RETURN all -- 0.0.0.0/0 0.0.0.0/0

仅允许 IP 1.2.3.4 访问 docker 的公开服务(这很好!),但容器内部没有互联网连接。那是个问题。没有添加其他 iptables 规则——只有 docker 的默认规则 + DOCKER-USER 链中的这个自定义 DROP。我正在尝试 RETURN 内部 IP 范围,例如 10.0.0.0/8172.16.0.0/12192.168.0.0/16 在此链中(一些论坛线程建议尝试这样做),所以我的链看起来像:

Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- 192.168.0.0/16 0.0.0.0/0
RETURN all -- 172.16.0.0/12 0.0.0.0/0
RETURN all -- 10.0.0.0/8 0.0.0.0/0
ACCEPT all -- 1.2.3.4 0.0.0.0/0
DROP all -- 0.0.0.0/0 0.0.0.0/0

但仍然没有成功 - docker 的公开端口只能从 1.2.3.4 访问(这又很好),但容器仍然没有互联网连接。

关于为什么会发生这种情况以及我如何允许容器在限制入站流量的同时与外界通信的任何想法?

提前致谢!

最佳答案

*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m state --state RELATED,ESTABLISHED -j ACCEPT
-A DOCKER-USER -s A.B.C.D -j ACCEPT
-A DOCKER-USER -i MY_WAN_INTERFACE_NAME -j DROP

关于linux - 允许 DOCKER-USER 链中的某些 IP 用于入站流量,拒绝所有其余 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53713413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com