由于某种原因,我需要通过编辑 user.rules 向 ufw 添加规则,当我向其中添加规则并执行 do 时sudo ufw reload
,规则消失了。发生这种情况的任何原因以及如何通过手动编辑user.rules
文件来添加规则?
小智 7
如果您在 /etc/ufw/before*.rules 或 after*.rules 中添加自定义规则,则重新加载后它不会消失。
当在 shell 上输入有效的ufw命令(即自定义用户规则)时,它们会进入 /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
Run Code Online (Sandbox Code Playgroud)
如果直接编辑 user*.rules,添加的规则(如果有效)将通过ufw 重新加载来加载,但在下次重新启动 ufw 服务时不会保留。
因此,请在 /etc/ufw/before*.rules 或 after*.rules 中添加自定义规则。
参考:
我刚刚遇到了这个脚本,用于自动化主机构建的规则集。 问题在于 UFW 如何验证/etc/ufw/user.rules
只需手动添加规则/etc/ufw/user.rules
即可:
-A ufw-user-output -p tcp --dport 80 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
当 UFW 启动时,在没有附带注释的情况下对规则集进行健全性检查时,将被清除:
### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 out
Run Code Online (Sandbox Code Playgroud)
因此,为了手动添加允许 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
Run Code Online (Sandbox Code Playgroud)
手动添加的规则前面的注释不能是任意的:它必须是您通过 CLI 添加规则时 UFW 生成的注释。在此使用 TCP/80 的示例中,将是:
sudo ufw allow http/tcp
Run Code Online (Sandbox Code Playgroud)
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
您手动添加的规则将持续存在
是的,绝对疯狂的是,具有正确语法但未以注释开头的规则将无法通过验证并被清除。对于自称不复杂的防火墙界面来说是多么讽刺 ;-)。
这让我抓狂。希望这个解决方案可以挽救其他人的悲伤-