验证此解决方案:

验证此解决方案:

出于某种原因,我需要通过编辑 user.rules 向 ufw 添加规则,当我向其中添加规则并执行 时sudo ufw reload,规则就消失了。发生这种情况的原因是什么?我如何通过手动编辑文件来添加规则user.rules

答案1

我刚刚碰到了这个用于自动化主机构建的脚本规则集。 问题在于 UFW 如何验证/etc/ufw/user.rules

仅手动添加一条规则,/etc/ufw/user.rules例如:

-A ufw-user-output -p tcp --dport 80 -j ACCEPT

当 UFW 启动时对规则集进行健全性检查时将被清除没有随附的评论:

### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 out

因此,为了手动添加允许 TCP/80 在 UFW 重新加载后继续存在的规则,请执行以下操作:

### 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

请注意:

手动添加的规则前面的注释不能是任意的:它必须是通过 CLI 添加规则时 UFW 生成的注释。在此示例中,使用 TCP/80 的注释为:

sudo ufw allow http/tcp

验证此解决方案:

重现步骤过错

  • sudo ufw disable

  • sudo vi /etc/ufw/user.rules

  • 添加-A ufw-user-output -p tcp --dport 80 -j ACCEPT而不评论

  • 保存并关闭/etc/ufw/user.rules

  • sudo ufw enable

您手动添加的规则将是清除;它将无法在 UFW 重启后继续存在

重新创建的步骤解决方案

  • sudo ufw disable

  • sudo vi /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

  • 保存并关闭/etc/ufw/user.rules

  • sudo ufw enable

您手动添加的规则将坚持

是的,一条语法正确但没有注释的规则会验证失败并被清除,这太疯狂了。对于一个自称是简单 ;-)。

这让我很抓狂。希望这个解决方案能为其他人省去不少麻烦。

答案2

如果您在 /etc/ufw/before*.rules 或 after*.rules 中添加自定义规则,则它在重新加载后不会消失。

有效时间联邦快递在 shell 上输入命令,即自定义用户规则,它们进入 /etc/ufw/user*.rules 文件,并且这些文件会持续存在。

root@ubuntu:~# ufw allow 22/tcp
Rule added
Rule added (v6)
root@ubuntu:~# grep tcp.*22 /etc/ufw/user*.rules
/etc/ufw/user6.rules:### tuple ### allow tcp 22 ::/0 any ::/0 in
/etc/ufw/user6.rules:-A ufw6-user-input -p tcp --dport 22 -j ACCEPT
/etc/ufw/user.rules:### tuple ### allow tcp 22 0.0.0.0/0 any 0.0.0.0/0 in
/etc/ufw/user.rules:-A ufw-user-input -p tcp --dport 22 -j ACCEPT
root@ubuntu:~# iptables -L -n | grep dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

如果你直接编辑 user*.rules,则添加的规则(如果有效)将加载ufw 重新加载但在下次重新启动 ufw 服务时不会继续存在。

因此,请在 /etc/ufw/before*.rules 或 after*.rules 中添加自定义规则。

参考:

相关内容