为什么重新启动我的 Debian 系统时 iptables 规则消失了?

Jho*_*han 75 boot debian iptables

我添加了这个规则:

sudo iptables -t nat -A OUTPUT -d a.b.c.d -p tcp \
       --dport 1723 -j DNAT --to-destination a.b.c.d:10000
Run Code Online (Sandbox Code Playgroud)
  1. 当重新启动计算机规则被删除。为什么?
  2. 我能做些什么来使规则持续存在?

bah*_*mat 79

(因为有人建议将此作为自己的答案......)

在 Debian 上,安装iptables-persistent

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

该软件包将/etc/iptables/rules在启动期间自动为您加载。

每当您修改规则时,请运行/sbin/iptables-save > /etc/iptables/rules以保存它们。如果您愿意,您还可以将其添加到关闭序列中。

  • 有两个不同的规则文件:`/etc/iptables/rules.v4` 和 `/etc/iptables/rules.v6` 分别用于 IPv4 和 IPv6。如果您希望一个表适用于两种类型的连接,您必须将其保存到两个规则文件中。 (18认同)
  • **不要将其添加到您的关机顺序中!** 如果您在更改/设置期间搞砸了您的规则,至少重新启动一次良好的旧重启将使事情恢复到以前的工作状态。 (16认同)

pra*_*tri 67

iptables 中没有选项可以使您的规则永久化。但是您可以使用iptables-saveiptables-restore来完成您的任务。

首先使用您提供的命令添加 iptable 规则。

然后/etc/iptables.conf使用以下命令将 iptables 规则保存到某个文件中:

$  iptables-save > /etc/iptables.conf
Run Code Online (Sandbox Code Playgroud)

添加以下命令/etc/rc.local以在每次重新启动时重新加载规则。

$  iptables-restore < /etc/iptables.conf
Run Code Online (Sandbox Code Playgroud)

  • 在 Debian 上有 `iptables-persistent` 包可以做到这一点。 (20认同)
  • 将它放在 `rc.local` 中是一个相当糟糕的主意,因为服务启动和防火墙策略应用之间会有一个开放的窗口差距。我更喜欢在`/etc/network/interfaces` 中使用`pre-up` *hook for loopback interface* 来克服这个问题。 (11认同)
  • @bahamat:安装该软件包是最好的解决方案,它值得拥有自己的答案。 (3认同)