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

Linux系统
383
0
0
2022-07-27

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

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

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

第一步:如果云服务器未开启防火墙,开启后注意添加使用到的端口以免影响线上。相关常用命令附另一篇文章:

云服务器端口和防火墙端口配置

第二步:防火墙开放 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

相关知识点

  1. 每步操作后,都需要 firewall-cmd --reload 才生效
  2. --permanent 是永久
  3. firewall-cmd --list-all 查看所有规则
  4. linux 防火墙(firewall)转发实现外网服务器通过中间服务器访问内网数据库
  5. 添加和移除是 --add-{key}={value} --remove-{key}={value}
  6. 下方的 {} 是为了说明实际是操作key-value,实际是没有的。
  7. 例如添加
  8. --add-{port}={9501/tcp}
  9. --add-{forward-port}={port=9501:proto=tcp:toaddr=10.5.5.5:toport=3306}
  10. 删除:
  11. --remove-{port}={9501/tcp}
  12. --remove-{forward-port}={port=9501:proto=tcp:toaddr=10. 5.5.5:toport=3306}
  13. 同理,删除 rich rules 里的项也是一样,但注意 value中有空格,需要单引号包围
  14. --remove-rich-rule='rule family="ipv4" source address="8.4.2.3" port protocol="tcp" port="9501" accept'
  15. 若不能转发,可能需要将上图中的 masquerade 设置为 yes,它的作用我没有搞懂,仅供参考
firewall-cmd --permanent --zone=public --add-masquerade