docker 上的严格 Iptables

docker 上的严格 Iptables

我一直在尝试为 Docker(在 ubuntu 主机上运行)配置 iptables。我之前没有使用过 Docker,而且我被告知 Docker 需要特殊处理。

我想只允许特定范围的 IP 能够连接到 ubuntu 机器。

我还想允许 docker 创建到整个网络的 ssh/telnet/snmp 流量。

最后我想放弃所有其他类型的流量(到主机和docker)。

我不确定我应该在哪里以及如何配置规则,以便它们不会互相干扰(另外,具体来说,在 docker 上我不确定如何使用“docker-user”链)。

谢谢你!

答案1

你有两种方法,一种是让 docker 停止操作 iptables 规则,然后你来处理它(我个人不推荐这种方式)或者使用你已经提到的 docker-user 链。

根据码头工人文档也就是说,docker 和 docker-user 链是 iptables 用来过滤的第一个链,所以你可以将标准链(INPUT、OUTPUT、FORWARD)配置为默认 DROP,并在 DOCKER-USER 链中添加你的规则,这很重要,因为这是唯一一个在 docker 重启时不会被刷新的链,这样你就可以定义你的自定义规则。

在 DOCKER-USER 链中,您可以根据需要定义输入、输出和转发规则,只需在添加到链中的规则中定义接口/ip 地址/ip 地址范围/网络源/目标即可,例如假设您有 2 个接口eno1eno2

输入规则可以是:

iptables -I DOCKER-USER -i eno[1|2] -s 192.168.0.0/24 --proto tcp --dport 80 -j ACCEPT

前向规则可以是:

iptables -I DOCKER-USER -i eno[1|2] -s 192.168.0.0/24 -o eno[1|2] -d 192.168.138.0/24 --proto tcp --dport 22 -j ACCEPT

输出规则(如果您还管理输出流量)可以是:

iptables -I DOCKER-USER -o eno[1|2] -d 192.168.0.0/24 --dport 443 -j ACCEPT

等等。

我希望这能帮助你澄清你的疑问。

相关内容