数据库一般不建议开启外网地址,外网服务器需要一台内网服务器作为中间服务器实现从内网访问数据库。
除了防火墙外还有像 rinetd
三方软件,配置简单,但要考虑安全性。
总体思路是,中间服务器开放一个端口如 9501
,只对外网服务器开放,同时开启 firewall
转发 9501
请求到云数据库的 ip
和 port
。
第一步:如果云服务器未开启防火墙,开启后注意添加使用到的端口以免影响线上。相关常用命令附另一篇文章:
云服务器端口和防火墙端口配置
第二步:防火墙开放 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
相关知识点
- 每步操作后,都需要
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