我一直在尝试为 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 个接口eno1和eno2
输入规则可以是:
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
等等。
我希望这能帮助你澄清你的疑问。