安全地更改iptables防火墙规则?

人们在改变防火墙规则时要做什么来确保不会意外地locking自己?

例如,是否有加载防火墙规则的方法,以便它们只在某个testing期间处于活动状态,然后让防火墙规则恢复到以前的设置?

另一个select是在服务器上打开一个屏幕会话,并在屏幕会话中有一个工作,hibernate几分钟,然后刷新表格。 在你做了修改之后,你可以杀死这个工作。 你也可以让脚本改变INPUT策略为ACCEPT,或者类似的东西。

可能会比cron方便一点,但是也是一样的想法。 路由器reload in 10我做类似的事情。 所以如果我把自己locking,路由器将重新启动并将configuration恢复到更改之前的状态。

我使用firehol作为iptables的前端。 Firehol有一个非常好的function,可以让你安全地testing一套新的规则。

当你运行命令firehol try ,Firehol设置忽略HUP,取得当前规则集的备份,应用新规则集,然后给用户一个提示,询问他们是否要提交新的规则集。 如果你在三十秒内没有回应,那么火炮恢复了以前的一套规则。

当然,即使通过另一个接口模拟控制台访问,理想的事情也总是有控制台访问。

如果您使用的是使用iptables服务(如/etc/init.d/iptables)的function,您可以设置一个简单的cronjob,以便每隔30分钟closures一次。 更通用的解决scheme是以一定的时间间隔运行以下操作: 如何:Linux刷新或删除所有的iptables规则 。 这可以通过cronjob完成,或者只是运行屏幕,并在bash中进行睡眠循环,以便偶尔运行这个小脚本。

如果您正在尝试使用iptables并学习如何使用它,那么为了以防万一,没有任何东西可以插入监视器。

离开rjewell说的。 您可以创build一个cron作业,每隔30分钟从configuration文件中刷新并重新载入所有规则。 那么当你testing的时候,你可以直接用命令来改变规则,只要你确定它可以工作,就把它保存到configuration文件中。

对于我们的远程服务器,我们使用基于IP的KVM。 这允许我们有一个独立于我们的iptables规则集的远程键盘/鼠标/显示器。

我要么在几分钟的时间内重新加载以前的一组规则,尽pipe我认为更好的办法是确保您允许从您的IP作为第一条规则之一进行访问 – 如果不是第一条规则。 那样,当你满意的时候,你可以把它拿出来。

还值得注意的是,如果你允许相关和build立连接(即-m state --state RELATED,ESTABLISHED -j ACCEPT )并且设法阻止SSH访问,则任何现有的连接都应该被保留 – 所以一定要检查你在退出现有会话之前,可以再次loginSSH!

一般来说,我从来没有把我的INPUT链的政策改为拒绝。 相反,我添加一个最后的规则:

 iptables -A INPUT -i <dev> -j REJECT 

如果你的脚本在执行过程中死掉了(比方说你在一个不好的链接上远程运行并断开连接),并且你设置了一个DENY策略,那么你可能会把自己locking。 这样你就提高了在失败的情况下你至less可以访问的几率。

您仍然需要确保您的规则授予足够的访问权限,以便最终规则不会引导您,但是我认为其他答复覆盖了这一点。

比这里的一些其他答案更精确。 我结束了以下工作:

我备份我目前的iptables规则:

 sudo iptables-save > original-iptables.save 

我使用tmux创build了一个新的会话:

 tmux 

我将tmux会话分成两个窗格,使用:

 <C>-b % 

在我执行的第一个窗格中:(以root用户sudo su

 sleep 5m && sudo iptables-restore original-iptables.save 

这将在5分钟后重置您的iptables规则。 这个命令实际上确保你不能无意中将自己locking在你的服务器之外。 您可以使用其他窗格来尝试任何新的规则。 (使用<C>-bo开关窗格)如果新规则有效,则可以始终使用-c取消原始命令,以确保新规则保持活动状态并且不会被重置。

你可以在这里find一个很好的和简单的关于tmux的cheatsheet。

在这种情况下,我喜欢使用CSF这是一个iptablespipe理器,但更简单,你可以指定入站和出站端口以及IP范围。 它也有一个testing的规则,它使规则的5分钟,在规则失效后,这样你可以确保即使你被locking,5分钟后,你将能够再次进入。

希望这可以帮助!