Docker 向公众开放了端口。我如何关闭它们?

goo*_*ing 5 linux docker docker-compose

令人惊讶的是,运行 docker-compose 使一些端口打开。我只想开放 80、22 和 443。我该如何实现这一目标?如何禁用 docker 打开它们?这确实感觉像是一个巨大的安全问题。

Kam*_*Cuk 4

我将回答您没有问过但您实际上想知道的问题,希望它能对未来的读者有所帮助,主要是因为我自己也遇到过这个问题。

如何安全、正确地进行呢?

我假设默认的--iptables=truedocker 配置。

--ip绑定容器端口时默认为0.0.0.0ie。所有接口。因此容器绑定到所有接口,即。该端口1234被重定向到80来自所有传入接口的端口。因为DOCKER链是添加到链中的 iptablesnat表中的PREROUTING,所以它通常会在普通防火墙插入表中的任何其他内容之前进行重定向filter

为了安全起见,请修改并指定重定向端口时容器将绑定到的/etc/docker/daemon.json默认值:ip

{
    "ip": "127.0.0.1"
}
Run Code Online (Sandbox Code Playgroud)

或将命令行选项添加--ip=127.0.0.1到您的 docker 实例。这样,ports当未指定时,只会插入本地主机的重定向。

这可能还不够,因为 iptables 规则可能很奇怪 - 因此iptables建议了解您的规则并在需要时修改它们。或者,您可以添加一些过滤规则到表DOCKER_USER中的链中filter以专门过滤流量。

对于您确实想要暴露给外界的实例,请显式设置0.0.0.0(或外部接口的 IP 编号):

ports:
- 0.0.0.0:1234:80    # global
- 127.0.0.1:1235:80  # local only
- 1236:80            # whatever defaults is set in docker.json, usually 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

我如何关闭它们?

停止docker服务。停止容器。从 iptables 中删除规则。关闭你的电脑。从您的电脑上删除网络连接。

我只想开放 80、22 和 443。我该如何实现这一目标?

因此,仅重定向这些端口,而不重定向其他端口。

如何禁用 docker 打开它们?

禁用 docker 中的 iptables 支持 - 传递--iptables=falsedockerd进行/etc/docker/daemon.json相应修改。