处理 iptables init 失败的正确方法?

处理 iptables init 失败的正确方法?

我正在使用 iptables-restore 通过 初始化我的 iptables 规则/etc/network/if-pre-up.d/iptables。这工作正常,但我有点担心如果该脚本由于某种原因失败会发生什么(可能是保存的 iptables 文件已损坏或其他原因)。

如果脚本失败,我想:

  • 启动我的网络接口,不使用任何 iptables 规则
  • 启动 OpenSSH 服务器
  • 但不包括任何其他服务,如 Web 服务器......(并且可能停止运行实例)

有没有好的规范方法可以做到这一点?进入较低init阶段?-我很久没有这样做了,我认为近年来 init 发生了很多变化(?)-我应该进入哪个阶段,OpenSSH 服务器和我的网络接口还能运行吗?

谢谢

克里斯

(在 Debian Lenny 上)

答案1

我从未尝试过,但我想到的另一个解决方案是将您的外部服务绑定到完全不可路由的内部 IP,甚至环回也可能有效。然后,作为您保存的 IP 表配置中的最后一条规则,设置到本地服务的透明代理。

如果 IP 表无法显示,您就无法连接服务。如果显示,您的服务即可使用。

您从该配置中遗漏的唯一系统是 SSH,这样您就有了带外管理。

当然,您的服务日志中可能全部都有错误的源 IP。不过,我想这应该可以解决这种特殊情况。

答案2

也许你可以通过查看 iptables-restore 返回代码来做到这一点,如下所示:

iptables-restore < /path/to/iptables.rules
if [ $? -ne 0 ]; then
    iptables -P INPUT DROP
    iptables -A INPUT -p tcp -i $INTERFACE --dport 22 -j ACCEPT
fi

这样,如果您的规则加载失败,iptables 将丢弃除 ssh 之外的所有传入连接。

相关内容