今天踩了一个 Docker 和 UFW 的安全坑,分享一下恐怖经历

2018-06-28 19:35:44 +08:00
 Livid
在一台公网服务器上通过 Docker 安装某个网络服务用于测试,在 UFW 里添加了规则只允许内网访问。

但是没想到,docker -p 的端口映射的实现,会忽略系统的 UFW 规则,于是新安装的那个服务就对公网敞开了。

具体说明可参考这篇文章:

https://www.techrepublic.com/article/how-to-fix-the-docker-and-ufw-security-flaw/
7856 次点击
所在节点    Docker
12 条回复
defunct9
2018-06-28 20:03:53 +08:00
这不是坑,当初部署的时候就该考虑到这一点
chinvo
2018-06-28 20:09:31 +08:00
没记错 UFW 是单独的规则表,不是直接在 iptables 的 INCOMING 和 OUTGOING 上做规则的。
kslr
2018-06-28 20:55:39 +08:00
记录
How to fix this
Fortunately, there's a way to fix this. Go back to the terminal on your Docker server and issue the command sudo nano /etc/default/docker and add the following line:

DOCKER_OPTS="--iptables=false"
aoaoho
2018-06-28 22:16:25 +08:00
Shura
2018-06-28 22:17:40 +08:00
这是一个 feature
rrfeng
2018-07-03 15:31:31 +08:00
一直对 docker 使用 iptables 做端口转发怀有极大的抵触情绪。

根本不应该出现这个功能。
Cbdy
2018-07-03 15:37:10 +08:00
-p 的时候记得前面加 ip
yanaraika
2018-07-03 15:41:37 +08:00
这是一个 feature,Docker 新版添加了 DOCKER-USER chain 可以自己在里面添加规则
mritd
2018-07-03 19:38:21 +08:00
一直就是这样的🙃
Sylv
2018-12-02 13:33:43 +08:00
今天遇到同样的坑,但不同的是添加 DOCKER_OPTS="--iptables=false" 到 /etc/default/docker 文件的修复方法对于 Ubuntu 并不管用,这是因为用 systemd 来启动 docker 时并不会读取 /etc/default/docker 文件,正确的解决办法是使用 /etc/docker/daemon.json 文件:
{
"iptables": false
}

https://github.com/moby/moby/issues/9889
gamesover
2020-02-18 20:35:09 +08:00
@Sylv 用了这个方法的确让 ufw 起了原先的作用

但是外来流量进入 docker 的 ip 被改了,比如原先从 1.2.3.4 的外来公有 ip,访问 docker 里的服务,但是 docker 的服务看到的 ip 是一个内部 ip,比如 172.8.1.1 之类,不是原来的公有 ip,不知道怎么回事
Sylv
2020-02-19 01:11:26 +08:00
@gamesover 这我就不清楚了,不过似乎我用的时候看到的还是公网 IP,可能是容器的网络配置问题?

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

https://www.v2ex.com/t/466666

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

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

© 2021 V2EX