出于某种原因,我需要通过编辑 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 中添加自定义规则。
参考: