如何使一组特定的 iptables 规则永久化?

J. *_*uni 44 server startup iptables reboot firewall

是否有“最佳实践”或标准可以使一些 iptables 规则永久化?我的意思是:在系统重新启动时自动应用?

我正在使用带有 Ubuntu Server 10.04 LTS (Lucid Lynx) 的 VPS。

谢谢你。

大编辑:我不希望保留任何规则(就像iptables-persistent包一样)。我只想重新加载我自己的特定设置...如果最终通过运行 iptables 添加了其他规则,则应丢弃这些规则...

Ric*_*rri 52

最简单的方法是使用 iptables-saveiptables-restore将当前定义的 iptables 规则保存到文件中并(重新)加载它们(例如,在重新启动时)。

因此,例如,您将运行

sudo iptables-save | sudo tee /etc/iptables.conf
Run Code Online (Sandbox Code Playgroud)

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

# Load iptables rules from this file
iptables-restore < /etc/iptables.conf
Run Code Online (Sandbox Code Playgroud)

  • +1 您的回答非常适合我最初的问题。这也让我意识到我真正想要的是什么,所以我不得不将问题从“如何使 iptables 规则永久化?” 到“如何使一组特定的 iptables 规则永久化?” (3认同)
  • 使用 `sudo sh -c "iptables-save &gt; /etc/iptables.conf"` 而不是 `sudo iptables-save &gt; /etc/iptables.conf` (2认同)

小智 32

对此进行快速更新,因为您现在可能正在使用 12.04,并且情况会更好。

iptables-persistent软件包现在解决了这个问题。安装,

sudo apt-get install iptables-persistent
Run Code Online (Sandbox Code Playgroud)

安装包时定义的规则将被保存并在每次后续启动时使用。重新启动时会丢弃加载的新规则。

该配置文件,如果你确实需要改变它们(一旦iptables-persistent安装)是 /etc/iptables/rules.v4/etc/iptables/rules.v6分别为IPv4和IPv6的iptables。


Kre*_*ker 24

比保存iptable的规则后/etc/rc.local添加一行更好/etc/network/interfaces,像这样

post-up iptables-restore < /etc/iptables.up.rules
Run Code Online (Sandbox Code Playgroud)

或者把文件放在/etc/network/if-down.d/or/etc/network/if-post-down.d//etc/network/if-pre-up.d/or里面也是一样的/etc/network/if-up.d/

  • 为什么当一个接口出现故障时,一个 post-up iptables-restore 会出现? (4认同)
  • @Kreker:请澄清一下,您的方法如何比从 `rc.local` 执行恢复脚本更好?其他方法在某些情况下不起作用吗? (2认同)
  • 将它添加到网络配置会导致在您运行“服务网络重启”命令后重新加载它。它不仅限于系统启动。 (2认同)