这两天 Hacker News 上面有一个贴子火了,这是一封发给 Docker 安全团队的邮件,主要讲的是 Docker 有一个非常离谱的安全隐患。
即使你通过像 -p 127.0.0.1:80:80这样的参数将端口暴露到回环地址,外部仍然可以访问该服务,怎么回事呢?
原因其实很简单,Docker 添加了这样一条 Iptables 规则:
🐳 → iptables -nvL DOCKER
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:80
只要外部攻击者通过这台主机将流量发送到 172.17.0.2:80,就会匹配这条规则并成功访问容器中的服务,127.0.0.1 并没有什么卵用。
尴尬的是,选择将端口映射到 127.0.0.1 的用户基本上都是觉得这样很安全,以至于他们不再想采取进一步的安全措施。现在问题来了,映射到 127.0.0.1 不能说是非常安全吧,只能说是与安全毫不相干。。。
# 概念验证
下面通过一个例子来验证。
在 A 机器上运行一个 PostgreSQL 容器,并将端口映射到 127.0.0.1。
# IP: 192.168.0.100
🐳 → docker run -e POS