在使用Firewalld防火墙创建白名单时,发现存在一个问题。
在使用rich rule创建规则时,端口转发规则会优先匹配,且在端口不开的情况下,参与端口转发的本地端口均可被所有IP访问。
解决方案就是,删除掉全局的端口转发,即:
<forward-port to-port="" protocol="" port=""/>
然后根据白名单设置允许的端口转发:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xxx" forward-port port=xxxx protocol=xxx to-port=xxxx' --permanent
这样就可以使用白名单限制未经允许的IP访问参与转发的端口了。
顺便提供一个firewalld添加白名单的脚本,首先确保你的firewalld zone位于public:
ip_array=('xxx.xxx.xxx.xxx/xx' 'xxx.xxx.xxx.xxx/xx')
for ip in $(ip_array[@])
do
firewall-cmd --add-rich-rule='rule family="ipv4" source address=$ip forward-port port=xxxx protocol=tcp to-port=xxxx' --permanent
done