readonly Asked: 2010-02-25 15:16:29 +0800 CST2010-02-25 15:16:29 +0800 CST 2010-02-25 15:16:29 +0800 CST 安全地更改 iptables 防火墙规则? 772 人们在更改防火墙规则以确保不会意外将自己锁定时会怎么做? 例如,有没有办法加载防火墙规则,以便它们仅在某个测试期间处于活动状态,然后让防火墙规则恢复到以前的设置? iptables 9 个回答 Voted Kyle Brandt 2010-02-25T16:44:47+08:002010-02-25T16:44:47+08:00 另一种选择是在服务器上打开一个屏幕会话,并在屏幕会话中有一个工作,它会休眠几分钟,然后刷新表。进行更改后,您可以终止工作。您也可以让脚本将 INPUT 策略更改为 ACCEPT 或类似的东西。 可能比 cron 方便一点,但思路一样。我对路由器做类似的事情reload in 10。因此,如果我将自己锁定,路由器将重新启动并将配置恢复到我进行更改之前的状态。 Zoredache 2010-02-25T16:57:38+08:002010-02-25T16:57:38+08:00 我使用firehol作为 iptables 的前端。Firehol 有一个非常好的功能,可以让您安全地测试一组新规则。 当您运行命令firehol try时,Firehol 将自己设置为忽略 HUP,备份当前规则集,应用新规则集,然后提示用户是否要提交新规则集。如果您在三十秒内没有响应,则 firehol 会恢复之前的规则集。 rjewell 2010-02-25T15:21:30+08:002010-02-25T15:21:30+08:00 当然,理想的做法是始终拥有控制台访问权限,即使它是通过另一个界面模拟控制台访问。 如果您正在使用可以打开和关闭的 iptables 服务(如 /etc/init.d/iptables),您可以设置一个简单的 cronjob 以每 30 分钟将其关闭。更通用的解决方案是每隔一段时间运行以下命令: 如何:Linux 刷新或删除所有 iptables 规则。这可以通过 cronjob 来完成,或者只是运行 screen 并在 bash 中执行睡眠循环以偶尔运行那个小脚本。 但是,如果您正在尝试使用 iptables 并学习如何使用它,那么没有什么比插入监视器更好的了,以防万一。 einstiien 2010-02-25T15:33:22+08:002010-02-25T15:33:22+08:00 脱离 rjewell 所说的话。您可以创建一个 cron 作业,每 30 分钟从配置文件刷新和重新加载所有规则。然后,当您进行测试时,您可以直接使用命令更改规则,并且只有在您确定它有效时才将其保存到配置文件中。 Rook 2010-02-25T15:42:31+08:002010-02-25T15:42:31+08:00 对于我们的远程服务器,我们使用 KVM over IP。这允许我们拥有一个独立于我们的 iptables 规则集的远程键盘/鼠标/显示器。 Andy Smith 2010-02-25T17:32:02+08:002010-02-25T17:32:02+08:00 我要么设置一个 at 工作几分钟来重新加载之前的一组规则,但我认为更好的方法是确保您允许从您的 IP 访问作为第一条规则之一 - 如果不是第一条规则。这样,您可以在满意时将其取出。 还值得注意的是,如果您允许相关和已建立的连接(即-m state --state RELATED,ESTABLISHED -j ACCEPT)并且您设法阻止 SSH 访问,则应维护任何现有连接 - 因此请确保在注销现有会话之前再次检查您是否可以 SSH! Frenchie 2010-02-25T19:10:40+08:002010-02-25T19:10:40+08:00 作为一项规则,我从不将 INPUT 链的策略更改为 DENY。我改为添加最终规则: iptables -A INPUT -i <dev> -j REJECT 如果你的脚本在执行过程中死掉了(比如你在一个坏的链接上远程运行并断开连接)并且你设置了一个拒绝策略,你可能会锁定自己。通过这种方式,您提高了在失败的情况下至少可以访问的可能性。 您仍然需要确保您的规则授予足够的访问权限,以便最终规则不会引导您,但我认为其他回复已经足够好。 cwoebker 2017-10-31T18:29:30+08:002017-10-31T18:29:30+08:00 比这里的其他一些答案更准确。我最终做了以下事情: 我备份了我当前的 iptables 规则: sudo iptables-save > original-iptables.save 我使用 tmux 创建了一个新会话: tmux 我使用以下方法将 tmux 会话分成两个窗格: <C>-b % 在我执行的第一个窗格中:(以 root 用户身份运行sudo su) sleep 5m && sudo iptables-restore original-iptables.save 这将在 5 分钟后重置您的 iptables 规则。该命令实际上确保您不会意外地将自己锁定在服务器之外。 您可以使用另一个窗格来尝试任何新规则。(使用 切换窗格<C>-b o)如果新规则有效,您始终可以使用 -c 取消原始命令,以确保新规则保持活动状态并且不会被重置。 你可以在这里找到一份关于 tmux 的简单实用的备忘单。 Diego Velez 2017-10-31T20:49:00+08:002017-10-31T20:49:00+08:00 在这种情况下,我喜欢使用CSF,它是一个 iptables 管理器,但更简单,您可以在其中指定入站和出站端口以及 ip 范围。它还有一个测试活动,它启用了规则 5 分钟,之后规则消失了,这样你就可以确保即使你被锁定,5 分钟后你将能够再次进入。 希望这可以帮助!
另一种选择是在服务器上打开一个屏幕会话,并在屏幕会话中有一个工作,它会休眠几分钟,然后刷新表。进行更改后,您可以终止工作。您也可以让脚本将 INPUT 策略更改为 ACCEPT 或类似的东西。
可能比 cron 方便一点,但思路一样。我对路由器做类似的事情
reload in 10
。因此,如果我将自己锁定,路由器将重新启动并将配置恢复到我进行更改之前的状态。我使用firehol作为 iptables 的前端。Firehol 有一个非常好的功能,可以让您安全地测试一组新规则。
当您运行命令
firehol try
时,Firehol 将自己设置为忽略 HUP,备份当前规则集,应用新规则集,然后提示用户是否要提交新规则集。如果您在三十秒内没有响应,则 firehol 会恢复之前的规则集。当然,理想的做法是始终拥有控制台访问权限,即使它是通过另一个界面模拟控制台访问。
如果您正在使用可以打开和关闭的 iptables 服务(如 /etc/init.d/iptables),您可以设置一个简单的 cronjob 以每 30 分钟将其关闭。更通用的解决方案是每隔一段时间运行以下命令: 如何:Linux 刷新或删除所有 iptables 规则。这可以通过 cronjob 来完成,或者只是运行 screen 并在 bash 中执行睡眠循环以偶尔运行那个小脚本。
但是,如果您正在尝试使用 iptables 并学习如何使用它,那么没有什么比插入监视器更好的了,以防万一。
脱离 rjewell 所说的话。您可以创建一个 cron 作业,每 30 分钟从配置文件刷新和重新加载所有规则。然后,当您进行测试时,您可以直接使用命令更改规则,并且只有在您确定它有效时才将其保存到配置文件中。
对于我们的远程服务器,我们使用 KVM over IP。这允许我们拥有一个独立于我们的 iptables 规则集的远程键盘/鼠标/显示器。
我要么设置一个 at 工作几分钟来重新加载之前的一组规则,但我认为更好的方法是确保您允许从您的 IP 访问作为第一条规则之一 - 如果不是第一条规则。这样,您可以在满意时将其取出。
还值得注意的是,如果您允许相关和已建立的连接(即
-m state --state RELATED,ESTABLISHED -j ACCEPT
)并且您设法阻止 SSH 访问,则应维护任何现有连接 - 因此请确保在注销现有会话之前再次检查您是否可以 SSH!作为一项规则,我从不将 INPUT 链的策略更改为 DENY。我改为添加最终规则:
如果你的脚本在执行过程中死掉了(比如你在一个坏的链接上远程运行并断开连接)并且你设置了一个拒绝策略,你可能会锁定自己。通过这种方式,您提高了在失败的情况下至少可以访问的可能性。
您仍然需要确保您的规则授予足够的访问权限,以便最终规则不会引导您,但我认为其他回复已经足够好。
比这里的其他一些答案更准确。我最终做了以下事情:
我备份了我当前的 iptables 规则:
我使用 tmux 创建了一个新会话:
我使用以下方法将 tmux 会话分成两个窗格:
在我执行的第一个窗格中:(以 root 用户身份运行
sudo su
)这将在 5 分钟后重置您的 iptables 规则。该命令实际上确保您不会意外地将自己锁定在服务器之外。 您可以使用另一个窗格来尝试任何新规则。(使用 切换窗格
<C>-b o
)如果新规则有效,您始终可以使用 -c 取消原始命令,以确保新规则保持活动状态并且不会被重置。你可以在这里找到一份关于 tmux 的简单实用的备忘单。
在这种情况下,我喜欢使用CSF,它是一个 iptables 管理器,但更简单,您可以在其中指定入站和出站端口以及 ip 范围。它还有一个测试活动,它启用了规则 5 分钟,之后规则消失了,这样你就可以确保即使你被锁定,5 分钟后你将能够再次进入。
希望这可以帮助!