手动添加规则至ufw的user.rules后重载消失,原因及解决方法咨询
为什么手动编辑ufw的user.rules后reload规则会消失?正确的手动添加方法是什么?
我来帮你拆解这个问题——这其实是ufw的规则存储机制导致的,不少刚接触ufw的朋友都会踩这个坑。
问题原因
ufw的规则分为持久化配置文件和运行时缓存文件两种,两者的路径和作用完全不同:
- 如果你编辑的是
/var/lib/ufw/user.rules,这是ufw当前生效的运行时缓存文件,它是ufw从持久化配置生成的临时文件。当你执行sudo ufw reload时,ufw会重新读取/etc/ufw/目录下的持久化配置,覆盖掉这个运行时缓存文件,所以你手动添加的规则自然就消失了。 - 就算你编辑的是
/etc/ufw/user.rules(持久化文件),如果规则格式不符合ufw的要求(比如iptables语法错误、缺少识别用的tuple注释),ufw reload时可能会忽略错误规则,导致你以为规则消失了。
正确手动添加规则的步骤
要让手动添加的规则持久生效,必须编辑持久化的配置文件,具体操作如下:
先停止ufw服务,避免运行时文件和持久化文件同步冲突:
sudo systemctl stop ufw编辑IPv4的持久化用户规则文件(如果是IPv6则编辑
/etc/ufw/user6.rules):sudo nano /etc/ufw/user.rules按照ufw的规则格式添加条目。ufw的规则文件兼容标准iptables语法,同时会附带
### tuple ###注释(方便ufw命令行工具识别和管理)。比如添加允许80端口TCP入站的规则:### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 -A ufw-user-input -p tcp --dport 80 -j ACCEPT如果你不需要通过
ufw status看到这条规则,也可以只保留下面的iptables规则行,但建议保留tuple注释,方便后续用ufw命令管理。检查规则语法:可以用
ufw check命令验证配置是否有错误:sudo ufw check重启ufw服务或重新加载规则:
sudo systemctl start ufw # 或者直接reload sudo ufw reload验证规则是否生效:
sudo ufw status verbose
额外注意事项
- 永远不要直接编辑
/var/lib/ufw/目录下的文件,它们都是临时的运行时缓存,重启或reload就会被覆盖。 - 如果需要添加全局的前置/后置规则(比如在所有用户规则之前/之后执行的规则),可以编辑
/etc/ufw/before.rules或/etc/ufw/after.rules文件。 - 手动编辑规则后,尽量避免再用
ufw allow/deny等命令修改同类型规则,防止出现配置冲突。
内容的提问来源于stack exchange,提问作者Waqar Afridi
相关产品推荐
相关产品推荐

