使用 ansible 安全部署 iptables

使用 ansible 安全部署 iptables

我想使用 ansible 以“安全”的方式部署 iptables 规则,为了安全,我认为岸墙命令safe-restart

所以我正在寻找这样的工作流程:

  1. 安装新规则;
  2. 等待 30 秒以获得用户的确认(或者,在我们的例子中,等待执行剧本的机器的确认);
  3. 如果用户确认则使它们永久生效,否则恢复旧规则。

我的目标是避免由于错误的防火墙配置(例如,可能阻止 SSH)而失去对机器的控制。

答案1

由于 ansible 是无代理的,这意味着它需要打开新的连接(或重新使用现有的如果配置正确) 以恢复状态。

如果当前步骤中对防火墙的更改不允许下一次连接成功,则显然无法恢复。

因此,这意味着你必须将测试恢复任务放在主机本身上,它会尝试应用新规则,然后等待查看剧本的下一步是否成功(通常至少需要 SSH 可访问,因此剧本的测试步骤可能只是在恢复先前的规则集之前终止该脚本)。当然,它也可以进行一些自发测试。

摘要:植入一个脚本,该脚本不仅可以应用规则,而且还可以撤回这些规则,以防这些规则导致连接性回归。

直接使用以下方法iptables-apply

  1. 使用新规则集以分离方式运行(使用 screen 或 tmux 或其他方式)
  2. 在防火墙回滚到之前的规则集之前,在接下来的游戏步骤中将其杀死

答案2

这就是它的iptables-apply作用。从man我的 Debian 上的页面来看:

iptables-apply 将尝试应用新的规则文件(由 iptables-save 输出,由 iptables-restore 读取)或运行命令来配置 iptables,然后提示用户更改是否合适。如果新的 iptables 规则切断了现有连接,用户将无法肯定地回答。在这种情况下,脚本会在超时后回滚到之前工作的 iptables 规则。

答案3

找到一种带外方式来重启主机。使用可以保存状态的防火墙,例如firewalldAnsible 模块。第一次测试剧本时,使用 运行它permanent: False。如有必要,使用控制台或重启主机以恢复。一旦证明可行,请切换到permanent: True

一种替代方案是临时安排将来恢复防火墙规则,例如使用at。它也有一个 Ansible 模块。我不太喜欢这种实现,因为计划的命令只是一个 shell 脚本,而不是直接验证配置的模块。

相关内容