linux 利用防火墙(firewall)转发实现外网服务器通过中间服务器访问内网数据库

第二步:防火墙开放 9501 端口


firewall-cmd --add-port=9501/tcp --permanent

如果对来源 ip 有所限制(此处我未验证)


firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="8.4.2.3" port protocol="tcp" port="9501" accept'

第三步: 将 9501 的请求转发至 10.5.5.5:3306


firewall-cmd --permanent --add-forward-port=port=9501:proto=tcp:toaddr=10.5.5.5:toport=3306

相关知识点


数据库一般不建议开启外网地址,外网服务器需要一台内网服务器作为中间服务器实现从内网访问数据库。


除了防火墙外还有像 rinetd 三方软件,配置简单,但要考虑安全性。


总体思路是,中间服务器开放一个端口如 9501,只对外网服务器开放,同时开启 firewall 转发 9501 请求到云数据库的 ip 和 port。


第一步:如果云服务器未开启防火墙,开启后注意添加使用到的端口以免影响线上。

 

每步操作后,都需要 firewall-cmd --reload 才生效

--permanent 是永久

firewall-cmd --list-all 查看所有规则


添加和移除是 --add-{key}={value} --remove-{key}={value}

下方的 {} 是为了说明实际是操作 key-value,实际是没有的。

例如添加

--add-{port}={9501/tcp}

--add-{forward-port}={port=9501:proto=tcp:toaddr=10.5.5.5:toport=3306}

删除:

--remove-{port}={9501/tcp}

--remove-{forward-port}={port=9501:proto=tcp:toaddr=10. 5.5.5:toport=3306}

同理,删除 rich rules 里的项也是一样,但注意 value 中有空格,需要单引号包围

--remove-rich-rule='rule family="ipv4" source address="8.4.2.3" port protocol="tcp" port="9501" accept'

若不能转发,可能需要将上图中的 masquerade 设置为 yes,它的作用我没有搞懂,仅供参考

firewall-cmd --permanent --zone=public --add-masquerade


 0
 0
 分享
评论图片
评论