【发布时间】:2016-10-22 18:45:06
【问题描述】:
我正在运行 docker 一台为各种服务提供服务的机器。我想使用 iptables 或最好使用 ufw 来控制这些服务(因为我对 iptables 本身并不熟练)。
在我之前的设置中,我使用了“vanilla”docker,它使用名为“docker0”的虚拟接口通过容器路由网络流量。我成功地“google”了一个解决方案,使本文描述的防火墙工作:https://svenv.nl/unixandlinux/dockerufw(注意:即使我写了这篇文章,它只是互联网知识的总和)。
我发现的东西之一就是这件作品:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
哪个(我假设)确保一切都正确进入 docker0。
现在我已经更改了设置并开始使用“docker-compose”,它会在隔离的网络中自动启动 docker 容器。再次,docker 为此使用了一个以网络 ID 命名的虚拟设备:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
(...)
207a57fc0080 dockeropenvpndata_network-vpn bridge local
(...)
还有……
$ ifconfig | grep 207a57fc0080
br-207a57fc0080 Link encap:Ethernet HWaddr 02:42:ce:c5:81:04
我假设将上面发布的 iptables 配置更改为新的网络设备可能解决问题:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o br-207a57fc0080 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
但是我不知道如何测试这个。
- 接口的名称(网络 ID)似乎是(伪)随机的
- 接口名称(网络ID)只有在
docker-compose up之后才知道 - 据我所知,该规则在引导时应用,此时 id 仍然未知。
简而言之,我正在寻找一种方法来再次为我的 docker 机器设置防火墙。有谁知道如何做到这一点?
【问题讨论】:
-
否,上述后路由规则不控制流向 docker 的流量。它只是伪装到主机网络(或互联网)的流量,这意味着您的容器可以访问互联网/主机网络。
-
你的问题不够清楚!你说你做了什么,但我不明白你到底要做什么。
-
感谢信息,基本上,我只想能够使用防火墙。 Docker 不听我的防火墙并绕过它:(
-
如果有什么我可以进一步清除的,请告诉我。
标签: networking docker docker-compose