如何使特定的iptables规则永久生效?

有没有一种“最佳实践”或标准方法可以使一些iptables规则永久生效?我的意思是:在系统重启后自动应用?
我正在使用Ubuntu Server 10.04 LTS(Lucid Lynx)的VPS。
谢谢。
重要编辑:我不希望任何规则被持久保存(就像iptables-persistent软件包所做的那样)。我只想重新加载我自己特定的规则集...如果通过运行iptables添加了其他规则,这些规则应该被丢弃...
3个回答

最简单的方法是使用iptables-saveiptables-restore将当前定义的iptables规则保存到文件中并重新加载它们(例如,在重新启动时)。
因此,例如,您可以运行
sudo iptables-save | sudo tee /etc/iptables.conf

将当前的iptables规则保存到/etc/iptables.conf,然后在/etc/rc.local中插入这些行:

# Load iptables rules from this file
iptables-restore < /etc/iptables.conf

3+1 你的答案完美解决了我的原始问题。它还让我意识到了我真正想要的是什么,所以我不得不将问题改为“如何使特定一组iptables规则永久有效?” - J. Bruni
如果可能的话,请稍微编辑一下您的答案以反映问题的变化...我很乐意接受它!我需要使用iptables-save一次,而每次重新加载(在/etc/rc.local处iptables-restore听起来不错)。 - J. Bruni
1如果您在尝试使用>时遇到“权限被拒绝”的错误,那么这个Stack Overflow的答案会对您有帮助。 - David Tuite
2使用sudo sh -c "iptables-save > /etc/iptables.conf"代替sudo iptables-save > /etc/iptables.conf - Rajat Gupta
rc.local已经被弃用,请使用systemd - Hölderlin

这是一个快速的更新,因为你可能现在正在使用12.04版本,事情变得更好了。
现在,iptables-persistent软件包解决了这个问题。要安装,请执行以下操作:
sudo apt-get install iptables-persistent

安装软件包时定义的规则会被保存并在每次重启后使用。重新加载的新规则在重启时会被丢弃。
如果需要更改配置文件(一旦安装了iptables-persistent),可以分别使用/etc/iptables/rules.v4/etc/iptables/rules.v6来修改IPv4和IPv6的iptables规则。

如果你对/etc/iptables/rules.v4进行了编辑,你要如何[正式地]应用这些更改呢?目前我是通过执行sudo iptables-restore < /etc/iptables/rules.v4来实现的。 - Bruno Bronosky
@BrunoBronosky 也许你应该改用iptables,然后执行 sudo iptables-save > /etc/iptables/rules.v4 来使其持久化。 - pacoverflow

жҜ”`/etc/rc.local`жӣҙеҘҪзҡ„ж–№жі•жҳҜеңЁдҝқеӯҳiptables规еҲҷеҗҺпјҢеңЁ`/etc/network/interfaces`дёӯж·»еҠ дёҖиЎҢпјҢе°ұеғҸиҝҷж ·
post-up iptables-restore < /etc/iptables.up.rules

或者将文件放在/etc/network/if-down.d//etc/network/if-post-down.d//etc/network/if-pre-up.d//etc/network/if-up.d/中都是一样的。

2@Kreker:请澄清一下,你的方法比从 rc.local 执行还原脚本更好吗?另一种方法在某些情况下不起作用吗? - Rajat Gupta
2将它添加到网络配置中后,运行“service networking restart”命令会导致其重新加载。这不仅限于系统启动。 - K. Darien Freeheart
4当一个接口要关闭时,为什么要发布 iptables-restore? - alphadogg