最佳实践:为 SSH 应用 iptables 防火墙规则

最佳实践:为 SSH 应用 iptables 防火墙规则

我需要在我们的 QA 环境中使用iptables.我必须远程进行更改。一些更改还包括禁用SSH少数网络。

我可以遵循哪些最佳实践,以便如果SSH服务因某种原因被阻止,我如何在不重新启动主机的情况下恢复访问权限。

我正在计划的一些事情是:

chkconfig iptables off 

这是为了防止我们需要重新启动主机,从而导致主机iptables无法启动。

但这是为了当我们重新启动主机时,我正在寻找一些东西,以便我们可以在不重新启动主机的情况下恢复。顺便说一句,console不适用于服务器。

有什么建议 ?

答案1

这就是iptables-apply目的。来自手册页:

iptables-apply will  try  to  apply  a  new  rulesfile  (as  output  by
   iptables-save,  read by iptables-restore) or run a command to configure
   iptables and then prompt the user whether the changes are okay. If  the
   new  iptables  rules  cut the existing connection, the user will not be
   able to answer affirmatively. In this case, the script  rolls  back  to
   the previous working iptables rules after the timeout expires.

默认超时为 10 秒。如果该时间太短,则可以更改为--timeout 30在 30 秒后未收到确认时重置规则。

答案2

对于此类任务,我通常采取的方法是确保在INPUT链的最开始有一个故障安全规则,明确允许我现有的管理连接。这将确保任何可能阻止连接的后续规则不会影响当前的规则。一旦我准备好所有规则,我就会使用应该被接受的第二个连接来测试它,但这与故障安全规则不匹配。如果有效,我知道我可以安全地断开原始会话并删除故障安全规则。

例如,假设您希望允许来自 192.168.0.0/16(192.168.2.0/24 除外)的 SSH,并且您当前从 192.168.22.22 连接到服务器。为了防止可能的拼写错误,您可以像这样设置规则:

iptables -I INPUT -p tcp -s 192.168.22.22  --dport 22 -j ACCEPT
iptables -I INPUT -p tcp                   --dport 22 -j LOG
iptables -A INPUT -p tcp -s 192.168.2.0/24 --dport 22 -j DROP
iptables -A INPUT -p tcp -s 192.168.0.0/16 --dport 22 -j ACCEPT

在这种情况下,我们插入第一条规则 ,-I因此它位于链的最开始,并且我们附加其他规则 ,-A以便它们被附加到末尾。您的规则可能比这更复杂,但重点是确保您的故障安全规则放在第一位。这样,即使您在第二行错误地输入了 192.168.22.0/24,您的故障保护线路也会首先匹配,确保您保留访问权限。

通过尝试从 192.168.0.0/16 中非 192.168.22.22 或 192.168.2.0/24 的某个位置进行连接来测试规则。无论结果如何,都应该记录到/var/log/kern.log.如果连接失败,您就会知道还有更多工作要做;该日志还可以帮助您确定失败的原因。

测试成功后,您可以安全地删除故障保护规则:

iptables -D INPUT -p tcp -s 192.168.22.22 --dport 22 -j ACCEPT

相关内容