![使用 ansible 安全部署 iptables](https://linux22.com/image/723164/%E4%BD%BF%E7%94%A8%20ansible%20%E5%AE%89%E5%85%A8%E9%83%A8%E7%BD%B2%20iptables.png)
我想使用 ansible 以“安全”的方式部署 iptables 规则,为了安全,我认为岸墙命令safe-restart
。
所以我正在寻找这样的工作流程:
- 安装新规则;
- 等待 30 秒以获得用户的确认(或者,在我们的例子中,等待执行剧本的机器的确认);
- 如果用户确认则使它们永久生效,否则恢复旧规则。
我的目标是避免由于错误的防火墙配置(例如,可能阻止 SSH)而失去对机器的控制。
答案1
由于 ansible 是无代理的,这意味着它需要打开新的连接(或重新使用现有的如果配置正确) 以恢复状态。
如果当前步骤中对防火墙的更改不允许下一次连接成功,则显然无法恢复。
因此,这意味着你必须将测试恢复任务放在主机本身上,它会尝试应用新规则,然后等待查看剧本的下一步是否成功(通常至少需要 SSH 可访问,因此剧本的测试步骤可能只是在恢复先前的规则集之前终止该脚本)。当然,它也可以进行一些自发测试。
摘要:植入一个脚本,该脚本不仅可以应用规则,而且还可以撤回这些规则,以防这些规则导致连接性回归。
直接使用以下方法iptables-apply
:
- 使用新规则集以分离方式运行(使用 screen 或 tmux 或其他方式)
- 在防火墙回滚到之前的规则集之前,在接下来的游戏步骤中将其杀死
答案2
这就是它的iptables-apply
作用。从man
我的 Debian 上的页面来看:
iptables-apply 将尝试应用新的规则文件(由 iptables-save 输出,由 iptables-restore 读取)或运行命令来配置 iptables,然后提示用户更改是否合适。如果新的 iptables 规则切断了现有连接,用户将无法肯定地回答。在这种情况下,脚本会在超时后回滚到之前工作的 iptables 规则。
答案3
找到一种带外方式来重启主机。使用可以保存状态的防火墙,例如firewalld
Ansible 模块。第一次测试剧本时,使用 运行它permanent: False
。如有必要,使用控制台或重启主机以恢复。一旦证明可行,请切换到permanent: True
。
一种替代方案是临时安排将来恢复防火墙规则,例如使用at
。它也有一个 Ansible 模块。我不太喜欢这种实现,因为计划的命令只是一个 shell 脚本,而不是直接验证配置的模块。