我目前使用如下规则来限制可以访问我的 SSH 服务的 IP 地址
# accept already established
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --source w.x.y.z/32 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --source a.b.c.d/32 --dport 22 -j ACCEPT
#drop everyting else
iptables -A INPUT -j DROP
iptables -P FORWARD DROP
其中 wxyz 和 abcd 是允许的 IP。
我在多台服务器上都有此规则。
能够将 IP 添加和删除到允许列表并重新加载所有服务器规则以使更改生效的最佳方法是什么?
答案1
最好的解决方案是使用某种系统管理工具,例如 Puppet、Spacewalk 等。您可以利用这些工具一次性将配置文件推送到多台计算机。从长远来看,这也有助于您处理其他事情。但是,如果您不想处理进行集中管理类型的设置的所有麻烦,您可以在所有服务器上创建 ssh 密钥,然后创建脚本来修改和重新启动 iptables。
- 拥有所有 Linux 服务器的 SSH 密钥,以便可以进行无密码 SSH 登录
- 创建 mod_iptables_servers.sh
- ssh login@server1'bash -s'<change_iptables.sh
- ssh login@server2'bash -s'<change_iptables.sh
- ssh login@server3'bash -s'<change_iptables.sh
- 创建一个 change_iptables.sh 脚本,它将修改防火墙规则并重新启动 iptables
- 运行 mod_iptables_servers.sh,它将登录到您的所有 Linux 机器并执行 change_iptables.sh 脚本。
虽然我强烈推荐中央管理解决方案,但这种方式也能完成工作。作为免责声明,我从未尝试过这种方法,但使用了这个问题的答案来获得正确的语法 -https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine。