互联网技术 / 互联网资讯 · 2023年12月30日

Docker教程:利用iptables规则实现网络隔离的云计算核心技术

在linux上,DockeR操纵IPtables规则以提供网络隔离。尽管这是实现的详细信息,并且您不应修改DockeR在IPtables策略中插入的规则,但是如果您想要拥有自己的策略(而不是由DockeR管理的策略),它确实会对您需要执行的操作产生一些影响。

如果您在暴露于InteRnet的主机上运行DockeR,则可能需要适当的IPtables策略,以防止未经授权访问您主机上运行的容器或其他服务。此页面描述了如何实现此目标以及需要注意的注意事项。

添加IPtables政策的规则

DockeR安装了两个名为DOCKER-User和的自定义IPtables链DOCKER,它确保始终由这两个链首先检查传入的数据包。

DockeR的所有IPtables规则都已添加到DOCKER链中。请勿手动操作此链条。如果您需要添加在DockeR规则之前加载的规则,则将它们添加到DOCKER-User链中。在DockeR自动创建任何规则之前,将应用这些规则。

在这些链之后,FORWARD将评估添加到链中的规则(手动添加或通过另一个基于IPtables的防火墙)。这意味着,如果您通过DockeR公开端口,则无论防火墙配置了什么规则,该端口都会公开。如果您希望即使在通过DockeR公开端口时也要应用这些规则,则必须将这些规则添加到 链中。

限制与DockeR主机的连接

默认情况下,允许所有外部源IP连接到DockeR主机。要仅允许特定的IP或网络访问容器,请在DOCKER-User过滤器链的顶部插入一个否定的规则。例如,以下规则限制从以下所有IP地址进行的外部访问192.168.1.1:

$ IPtables -I DOCKER-User -i ext_if ! -s 192.168.1.1 -j DROP

请注意,您将需要更改ext_if以与主机的实际外部接口相对应。您可以改为允许来自源子网的连接。以下规则仅允许从子网进行访问192.168.1.0/24:

$ IPtables -I DOCKER-User -i ext_if ! -s 192.168.1.0/24 -j DROP

最后,您可以指定要接受的IP地址范围–sRc-Range (请记住-M IPRange在使用–sRc-Range或时也要添加–dst-Range):

$ IPtables -I DOCKER-User -M IPRange -i ext_if ! –sRc-Range 192.168.1.1-192.168.1.3 -j DROP

您可以结合使用-s或–sRc-Range与-d或–dst-Range一起控制源和目标。例如,如果DockeR守护程序同时监听 192.168.1.99和10.1.2.3,则可以制定特定于10.1.2.3并保持 192.168.1.99打开的规则。

DockeR路由

DockeR还将FORWARD链的策略设置为DROP。如果您的DockeR主机也充当路由器,这将导致该路由器不再转发任何流量。如果希望系统继续充当路由器,则可以ACCEPT向DOCKER-User链中添加明确的规则以允许它:

$ IPtables -I DOCKER-User -i sRc_if -o dst_if -j ACCEPT

防止dockeR操作IPtables

可以在DockeR引擎的配置文件中将IPtables密钥设置FAlse为/etc/dockeR/daeMon.json,但是此选项不适用于大多数用户。完全阻止DockeR创建IPtables规则是不可能的,事后创建规则非常复杂,超出了这些说明的范围。设置IPtables为FAlse很有可能会破坏DockeR引擎的容器网络。

设置容器的默认绑定地址

默认情况下,DockeR守护程序将公开0.0.0.0地址上的端口,即主机上的任何地址。如果要更改该行为以仅公开内部IP地址上的端口,则可以使用该–IP选项指定其他IP地址。但是,设置–IP仅更改 默认值,它不会将服务限制为该IP。

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.

登录免费注册