Ubuntu:如何添加 UFW 无法创建的 iptables 规则

Art*_*ldt 16 ubuntu iptables ufw

UFW 对我来说工作得很好,除非它不...

我希望能够手动添加将在启动时应用的另一条规则?

  • 我应该把这条规则放在哪里?
  • 我应该如何让它在启动时启动?
  • 我如何让它与 UFW 一起玩得很好?

Ste*_*day 16

根据这个 Ubuntu wiki 页面(向下滚动到“高级功能”),您可以通过将自己的iptables规则放入以下文件来实现您想要的:

  • /etc/ufw/before.rules
  • /etc/ufw/after.rules

before任何之前的文件被评估ufw被应用规则; 在after之后的文件进行评估。(也有对应的before6after6规则文件,供你的ip6tables规则使用。)

这些规则文件应该是不iptables-restore兼容的语法,大概是因为ufw简单地使用iptables-restore. 最后,请注意,ufw在对规则文件进行任何更改后,您需要停止并重新启动。

  • 请注意,如果您在使用这些文件时忘记标准化 -I 或 -A 的使用,您可以(可能是无意地)更改 iptables 规则的优先级。-I(插入)将规则添加到链的顶部,首先评估,而 -A(附加)将它们添加到链的底部。例如,如果您在 .after 文件中使用 -I,这可能会导致意外结果。只是一个想法。 (4认同)

小智 8

UFW 将清除任何未以注释开头的手动添加的规则:/etc/ufw/user.rules

### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 out
-A ufw-user-output -p tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

当 UFW 理智检查启动时的规则时,它期望附带评论。如果它存在,即使规则的语法正确,UFW 仍会清除它。

并且不要只使用任意注释:它必须是 UFW 在通过 cli 创建用户规则时插入的注释,即:

sudo ufw allow http/tcp
Run Code Online (Sandbox Code Playgroud)

因此,如果您想在一个简单文件的规则集中预先植入一系列规则,您仍然需要通过 UFW 的 CLI 界面创建规则,以了解规则期望通过验证并保留的注释语法。 。

尝试使用或不使用注释的上述操作,并重新加载上面的示例 HTTP 规则;您只需使用注释来评论手动添加的规则是否在UFW重新启动( ufw enable )后仍然存在。

这确实是违反直觉的行为,根本没有记录。

  • 很好的解释!让我有点困惑的是,为什么我见过的大多数文档都没有清楚地阐明这一核心行为 (2认同)
  • “UFW 将清除 /etc/ufw/user.rules 中任何未以注释开头的手动添加规则:”太烦人了。他们为什么要那样做?! (2认同)
  • 这是因为不应直接编辑“user.rules”文件;ufw 使用它来存储用户通过“ufw”命令添加的规则。来自 Ubuntu 文档:`/var/lib/ufw/user[6].rules 或 /lib/ufw/user[6].rules(0.28 及更高版本):通过 ufw 命令添加的规则(通常不应由手)` (2认同)