我有我使用泊坞窗机与Ubuntu-18-04-64图像产生的一个数字海洋滴。我使用搬运工-撰写,其中之一是具有80和8080端口转发到0.0.0.0,从而侦听所有接口的nginx的部署三个容器到它。
nginx:
image: noumena/nrg-vpp/nginx:latest
ports:
- "80:80"
- "8080:8080"
depends_on:
- engine
- api
防火墙被配置为阻止在eth0所有流量(DO公共接口),除了为2376泊坞窗,和开放的端口22,80,8080上的eth1(DO专用接口)。
22/tcp on eth1 ALLOW Anywhere
8080/tcp on eth1 ALLOW Anywhere
80/tcp on eth1 ALLOW Anywhere
2376/tcp on eth0 ALLOW Anywhere
Anywhere on eth0 DENY Anywhere
Anywhere on eth1 DENY Anywhere
22/tcp (v6) on eth1 ALLOW Anywhere (v6)
8080/tcp (v6) on eth1 ALLOW Anywhere (v6)
80/tcp (v6) on eth1 ALLOW Anywhere (v6)
2376/tcp (v6) on eth0 ALLOW Anywhere (v6)
Anywhere (v6) on eth0 DENY Anywhere (v6)
Anywhere (v6) on eth1 DENY Anywhere (v6)
然而,通过搬运工(80,8080)转发的端口仍然在eth0可见,任何其他端口上没有ETH 0(例如22)可见
17:10 $ telnet public-ip 22
Trying x.x.x.x...
telnet: connect to address x.x.x.x: Operation timed out
telnet: Unable to connect to remote host
17:16 $ telnet public-ip 80
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
^]
telnet> Connection closed.
17:17 $ telnet public-ip 8080
Trying x.x.x.x...
Connected to x.x.x.x.
Escape character is '^]'.
^]
telnet> Connection closed.
到底为什么这些端口是开放的?是否涉及防火墙之前转发发生的呢?
我已经固定通过限制容器只在私人IP听的尖锐问题,但它需要额外的逻辑来查询其私有IP液滴与泊坞窗,撰写文件成为一个模板,这是烦人。这将是一个简单得多,如果我可以依靠在防火墙上保留转发的端口关闭。
有没有人碰到这种类型的行为之前?我真的想明白发生了什么。
这是由于码头工人处理网络的方式。总之,从容器暴露的端口您指示泊坞把ACCEPT
为特定端口规则的防火墙(至少UFW)之前有机会运用自己的规则。
在GitHub上跟踪这一行为主体,最明智的问题似乎#22054。根据您的具体配置防火墙(UFW?),一个评论(尤其是一次更新,因为2017年左右)可以保持你的解决方案。
另请参见this answer to similar question on ServerFault,这是由同一人one of successful advices on #22054 issue。