firewalld 无法限制容器端口流量

一、 异常说明

某生产服务器 10.21.196.96 运行一个redis(容器), 存在高危漏洞, 历史遗留问题, 无法升级redis, 只能通过防火墙去限制redis端口的流量

无论怎么配置firewall, 对redis的6379端口就是不生效

二、 详情

2.1 猜测是因为容器的原因

添加容器相关接口:
firewall-cmd --zone=public --add-interface=docker0 --permanent
图
图

2.2 firewalld 添加接口报错

ERROR: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.5 (legacy): interface name `vethd6d63cd@if18' must be shorter than IFNAMSIZ (15)
图

添加接口的时候, 注意接口名称, ip link showifconfig 输出不一样

添加名称 vethd6d63cd@if18 这样的接口, 导致firewalld奔溃.

编辑配置文件: /etc/firewalld/zones/public.xml 删除<interface /> 重启 firewalld 即可

2.3 猜测 ipv6 的原因

同是ipv6, 2375端口就可以被firewalld控制, 6379不可以, 排除该选项!
图

2.4 关闭docker的iptables选项

编辑文件: /etc/docker/daemon.json

添加配置:

{
"iptables": false
}

重启docker后, firewall 可以正常控制端口流量.

三、 原因分析

下载了docker配置 "iptables": false 前后 iptables -nL 的输出

然而并没有什么不同.