群晖下 docker 容器 bridge 隔离网可以直接访问宿主机

16 天前
 Cineray

我在群晖中使用 docker 部署服务,网络 network 使用的默认的 bridge ,不是 host 也不是 bridge-host ,理论上是不是不应该可以访问宿主机网段?

docker 服务的 network 是默认的:172.17.0.0/16

我任意进入在这个网路的服务,/bin/sh 去 ping - 192.168.0.0/24 的服务都是可以 ping 通的。

然后我去 用这个 172.17.0.0/16 - ping 另一个 docker 创建的网络 172.19.0.0/16 也是可以 ping 通的,完全没有隔离,是我哪里理解错了吗?

我之所以纠结这个问题,就是如果我的某个 docker 有漏洞,有人拿了我 docker 的 shell ,是不是理论可以随意攻击我的局域网了。

请各位指教一下。

1738 次点击
所在节点    程序员
8 条回复
yinmin
16 天前
( 1 ) bridge 网络的容器当然可以访问局域网。
( 2 ) 2 个 bridge 网络仅网关是互通的,容器之间不通。
( 3 )被黑的容器可以做跳板机攻击局域网的。
( 4 )可以将容器配置成 internal 网络,这个网络是无法访问局域网的,当然也是无法访问 internet 的。
( 5 )可以设置 iptables 禁止 bridge 容器访问局域网 ip 地址段,容器能访问 internet 又能阻止访问局域网。
( 6 )最安全的方式是网络使用 none ,也就是无网卡,容器之间使用 unix socket 通信(使用-v 在容器之间共享 unix socket 的文件句柄)

另外,很多网管都忽略的一个安全隐患:局域网的其他电脑将网卡网关配置成 docker 主机的 ip ,就能访问容器的内网 ip 了,所以别以为 bridge 内网 ip 安全就可以用弱密码。
Cineray
16 天前
@yinmin 啊我以为你说的( 123 )是我的个人问题,好像默认确实是这样,我搜索了豆包应该给了我误导性答案。那这个默认行为确实会给宿主机带来巨大安全隐患,相当于提供了跳板机。我去尝试一下群晖实现你说的第 4/5 点试试。另外设置了 none 是不是也无法连接 internet 了
Jacksu
15 天前
nftables/iptables 可以配置容器无法访问主机所在的局域网段的其它主机,但无法禁止容器访问宿主机(本身容器上网需要走宿主机,除非设置无网络也就是 none )
我自己的容器 nat 表下的 masquerade 规则如下
```ini
chain POSTROUTING {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 172.18.0.118 ip daddr 192.168.0.6 tcp dport {8080, 8096} masquerade comment "允许 moviepilot 容器访问 windiws 主机 qb 网页端口和 emby 网页端口"
ip saddr 172.18.0.113 ip daddr 192.168.0.0/24 masquerade comment "允许 homepage 容器访问局域网(监控)"
ip saddr 172.18.0.0/16 ip daddr {192.168.0.0/24, 10.0.0.0/24} drop comment "禁止其它容器访问局域网"
oifname != "br-52a1ae707854" ip saddr 172.18.0.0/16 masquerade comment "允许容器访问外网"
ip saddr 172.18.0.103 ip daddr 172.18.0.103 tcp dport 3306 masquerade comment "端口开放"
ip saddr 172.18.0.116 ip daddr 172.18.0.116 tcp dport 8066 masquerade comment "端口开放"
ip saddr 172.18.0.115 ip daddr 172.18.0.115 tcp dport 8060 masquerade comment "端口开放"
oifname "ens32" masquerade comment "接受局域网机器的设备的透明"
}
```
我这里因为需要自定义容器的 IP ,所以使用了自定义的桥接网络,不使用默认的 docker0 网络
Jacksu
15 天前
针对 2 楼说的问题,防止局域网其它机器把网关改成 docker 宿主机去直接访问容器 IP ,可以添加一条规则(仅允许 192.168.0.6 这台电脑访问容器):

```ini
ip saddr {192.168.0.1-192.168.0.5, 192.168.0.7-192.168.0.254} ip daddr 172.18.0.0/16 drop comment "禁止局域网其它机器访问容器"
```
n2l
15 天前
[ [入门篇] Docker 网络模式 Linux - Bridge | Host | None-哔哩哔哩] https://b23.tv/y7w5B72
julyclyde
13 天前
@Cineray 不要把学习和工作推给别人(工智能)
学习是你自己的责任
Cineray
13 天前
@julyclyde 我遇到问题都是先搜索网络包括询问 GPT4/豆包/Kimi/deepseek 没找到我想要的答案才来问的。如果这里问问题都是错的话我想要不人均先考个网络工程师证再来注册?
julyclyde
13 天前
@Cineray 看着不像

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1108124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX