我在用着作为从属的 Amazon RDS 实例复制我的裸机 MySQL 服务器,作为备份。
我正在通过以下方式在服务器的防火墙中授权 RDS 实例的 IP:
# iptables \
--insert INPUT \
--source xxxxxxx.yyyyyyy.eu-west-1.rds.amazonaws.com \
--protocol tcp \
--destination-port mysql \
--jump ACCEPT
这可以正常工作,但是iptables
将实例的主机解析为其 EC2 对应主机,并存储此主机:
# iptables --list
...
ACCEPT tcp -- ec2-x-x-x-x.eu-west-1.compute.amazonaws.com anywhere tcp dpt:mysql
问题是,每当 RDS 实例重新启动/修改/升级时,它通常会被移动到另一个 EC2 实例,所以即使*.rds.amazonaws.com
宿主保持不变,宿主*.compute.amazonaws.com
也会发生变化,并且RDS 实例与我的服务器失去连接。
目前,解决方案需要我手动干预以重新发出命令iptables
。
是否有一种解决方案可以永久允许来自某个 IP 的传入连接,只要防火墙配置中的域解析为该 IP?
我也会接受涉及的解决方案firewalld
。
答案1
不。 (Linux) 防火墙是 IP 驱动的,而不是域名驱动的,并且使用的域是在防火墙加载/重新加载时解析的 - 否则会极大地影响性能。
Firewalld 没有帮助,因为它实际上是 iptables 的包装器。
通过频繁重新加载防火墙规则或使用脚本(例如通过 crontab)进行检查并在发生更改时删除并读取相应的规则,您可能会获得一些运气。