作者:E4b9a6, 创建:2021-06-15, 字数:1745, 已阅:107, 最后更新:2024-03-10
给服务器做备份时候遇到一个比较复杂的Firewalld防火墙转发问题,先描述一下问题背景
A机器是准备用来备份数据库的机器,网卡IP假设是
B机器是应用服务器,有两张网卡它们IP假设分别是
C机器是数据库服务器,只有有一张网卡且IP假设是
数据库位于C机器且只监听 192.168.1.24这张网卡,应用部署于A服务器,直接通过内网网卡与B机器数据库交互
现在希望用A服务器来备份C服务器的数据库,那么思路是分为2步
按照这个思路动手,首先是Firewalld要转发端口要用到的IP伪装功能,查询IP伪装开启状态
sudo firewall-cmd --query-masquerade # 输出如果是NO说明没开启
firewall-cmd --add-masquerade --permanent # 开启IP伪装
然后将端口进行转发,假设C服务器的数据库端口是3306,我们要把B机器的33306转发到C机器的3306
在B机器上执行2个步骤如下
# 1. 将A机器访问的端口进行转发,转发到C机器上
sudo firewall-cmd --add-forward-port=port=33306:proto=tcp:toaddr=192.168.1.24:toport=3306 --permanent
# 2. 允许A机器的访问自己的转发端口且只允许来源为A机器的IP
sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="224.24.24.24" port protocol="tcp" port="33306" accept" --permanent
# 重新载入配置
sudo firewall-cmd --reload
思路觉得是没问题的,执行之后使用 sudo firewall-cmd --list-all 可以查看规则效果
但测试之后发现即使来源IP不是A机器也能访问B机器的33306端口,显然第2步的设置无效
对于防火墙的原理了解不多,猜测是直接开启端口流量转发之后是RICH规则不再对端口进行限制了
那么思路应该还是没问题的,在设置上考虑了下,也许转发可以直接在 rich rules写明才有效?于是取消掉了前面设置的端口转发
# 1. 取消 允许A机器的访问自己的某个端口且只允许来源为A机器的IP
sudo firewall-cmd --remove-rich-rule="rule family="ipv4" source address="224.24.24.24" port protocol="tcp" port="33306" accept" --permanent
# 2. 取消 将A机器访问的端口进行转发,转发到C机器上
sudo firewall-cmd --remove-forward-port=port=33306:proto=tcp:toaddr=192.168.1.24:toport=3306 --permanent
那么尝试改成
sudo firewall-cmd --add-rich-rule = "rule family="ipv4" source address="224.24.24.24" forward-port port="33306" protocol="tcp" to-port="3306" to-addr="192.168.1.24""
再测试下,发现现在只有IP为 224.24.24.24才能访问 B机器的33306端口,其他机器访问会直接显示faild