我在群晖中使用 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 ,是不是理论可以随意攻击我的局域网了。
请各位指教一下。
1
yinmin 2 天前 via iPhone 2
( 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 安全就可以用弱密码。 |
2
Cineray OP @yinmin 啊我以为你说的( 123 )是我的个人问题,好像默认确实是这样,我搜索了豆包应该给了我误导性答案。那这个默认行为确实会给宿主机带来巨大安全隐患,相当于提供了跳板机。我去尝试一下群晖实现你说的第 4/5 点试试。另外设置了 none 是不是也无法连接 internet 了
|
3
Jacksu 2 天前 1
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 网络 |
4
Jacksu 2 天前 1
针对 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 "禁止局域网其它机器访问容器" ``` |
5
n2l 2 天前 via iPhone
[ [入门篇] Docker 网络模式 Linux - Bridge | Host | None-哔哩哔哩] https://b23.tv/y7w5B72
|