阿里云的服务器,通过
firewall-cmd
设置只能个人使用的IP地址开放端口,但是本地使用的IP地址不是固定的,每次改变后都需要重新登录服务器,添加防火墙规则,很不方便,因此想写一服务自动添加防火墙规则
思路
- 在服务器上运行一个简单的web服务,个人电脑访问这个服务时,服务器能得到其外部IP地址,将这个IP地址添加到防火墙规则里重启防火墙即可;
验证
- 这个接口肯定不能不通过任何验证直接暴露,否则防火墙就失去了意义;
- 使用rsa签名和验签的方式对客户端进行身份验证,客户端先从服务端得到一个UUID,客户端使用私钥对此UUID进行签名,返回给服务端,服务端收到签名后,取出此客户端对应的UUID,使用此客户端对应的公钥进行验签,如果验证通过,则把客户端的IP地址添加到防火墙规则,并重启防火墙;
实施
- 服务端需要一个配置文件
clients.txt
,每行可配置一个客户端,每个客户端由两个部分组成,第一个部分是客户端的ID,第二个部分是客户端对应的公钥,由空格分隔开; - 客户端需要一个配置文件
client.txt
,共一行,也是由空格分隔的两部分,第一个部分也是客户端的ID,第二个部分是客户端的私钥; - 服务器放开端口
7749
; - 个人电脑设置客户端定时执行,IP地址不会频繁变化,一般只需要设置开机时执行,其它时候若IP确实发生变化,手动执行一下客户端;
问题
- 在添加一条新的IP规则之前,如果不删除此客户端旧的IP地址,那么防火墙的IP规则会越来越多(安全上影响不大),如果删除旧地址的话,则会出现一个问题,即如果两个客户端在同一个外部IP里面,一个客户端离开此网络并使用新IP地址后,旧IP规则被删除,导致另一个IP不变的客户端被防火墙拦截,需要手动执行一下客户端;
- 解决:删除之前查看是否还有别的客户端使用此IP地址