控制(防火墙)交通到docker / docker-compose网络

时间:2016-10-22 18:45:07

标签: networking docker docker-compose

我正在运行一个为各种服务提供服务的机器。我想使用iptables控制这些服务,或者最好使用ufw(因为我不熟悉iptables本身)。

在我之前的设置中,我使用了" vanilla" docker使用名为" docker0"的虚拟接口;通过容器路由网络流量。我成功地用谷歌搜索了#34;使防火墙工作的解决方案在本文中描述: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机器。有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:0)

事实证明,使用systemd时未考虑/etc/default/docker中的配置,导致--iptables=false未设置。

systemd的docker选项在/lib/systemd/system/docker.service的服务文件中指定。可以通过在cat /etc/systemd/system/docker.service.d/docker.conf

中添加/调整插入文件来覆盖此文件中的条目

我添加了包含以下内容的drop-in文件:

[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/dockerd --iptables=false -H fd://

(实际需要第一个空的ExecStart =)

这启动了没有iptables配置的docker,并使原始步骤(请参阅原始问题中的链接)再次工作。