每次启动时都需要恢复 iptable 规则吗?

cap*_*gon 23 iptables

每次我重新启动时,我都会失去让我如此漫长进入的 iptables 规则。我知道我可以保存它们并在启动时恢复它们,但是无论如何可以永远保存它们?我真的需要每次都在启动时恢复它们吗?严重地?

问题是我有一个巨大的 IP列表,我在其中使用了一个 while 循环来加载它们。这可能需要 10 分钟以上的时间。

这是我的家庭 FTP 服务器。这是一个具有 1gb ram 和非常低的处理能力的小型虚拟机。有这么多IP是因为我几乎已经放弃了亚洲大陆。我不需要他们每天用蛮力攻击我的 FTP 服务器。我也阻止政府。监视器、跟踪器和垃圾邮件发送者。

这是我用来加载列表的 while 循环。

grep INPUT block.list | while read LISTA; do sudo iptables -A $LISTA; done
Run Code Online (Sandbox Code Playgroud)

小智 27

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

在安装时,它应该保存您当前的 iptables 配置。否则,您可以将它们保存到这些文件(取决于 v4 或 v6)并且 iptables-persistent 将在启动时加载它们:)

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (2认同)

pan*_*rma 23

首先,创建一个包含以下内容的文件iptables-save

sudo iptables-save > /etc/iptables_rules
Run Code Online (Sandbox Code Playgroud)

你把文件放在哪里并不重要,你所要做的就是确保下一行引用同一个文件。接下来,打开/etc/rc.local并添加这一行:

/sbin/iptables-restore < /etc/iptables_rules
Run Code Online (Sandbox Code Playgroud)

从现在开始,每次您的计算机启动或重新启动时,iptables 都会从您指定的文件中加载规则。

  • 我不建议为此使用`/etc/rc.local`。它在系统启动的其余部分之后执行,并可能使您的系统处于非防火墙状态。我建议将此单行脚本放在`/etc/network/if-up.d/firewall`(新文件)中。这确保每次启用网络接口时都会执行它。 (10认同)
  • 我不得不使用 `sudo sh -c '/sbin/iptables-save &gt; /etc/iptables.save'` 来绕过 `Permission denied` 错误。[参考](http://articles.slicehost.com/2011/2/21/introducing-iptables-part-1) (5认同)
  • 权限错误是正常的/预期的。sudo 仅适用于“&gt;”之前的命令,文件重定向由您的 shell 单独完成。 (2认同)