You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动添加规则至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时可能会忽略错误规则,导致你以为规则消失了。

正确手动添加规则的步骤

要让手动添加的规则持久生效,必须编辑持久化的配置文件,具体操作如下:

  1. 先停止ufw服务,避免运行时文件和持久化文件同步冲突:

    sudo systemctl stop ufw
    
  2. 编辑IPv4的持久化用户规则文件(如果是IPv6则编辑/etc/ufw/user6.rules):

    sudo nano /etc/ufw/user.rules
    
  3. 按照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命令管理。

  4. 检查规则语法:可以用ufw check命令验证配置是否有错误:

    sudo ufw check
    
  5. 重启ufw服务或重新加载规则:

    sudo systemctl start ufw
    # 或者直接reload
    sudo ufw reload
    
  6. 验证规则是否生效:

    sudo ufw status verbose
    

额外注意事项

  • 永远不要直接编辑/var/lib/ufw/目录下的文件,它们都是临时的运行时缓存,重启或reload就会被覆盖。
  • 如果需要添加全局的前置/后置规则(比如在所有用户规则之前/之后执行的规则),可以编辑/etc/ufw/before.rules或/etc/ufw/after.rules文件。
  • 手动编辑规则后,尽量避免再用ufw allow/deny等命令修改同类型规则,防止出现配置冲突。

内容的提问来源于stack exchange,提问作者Waqar Afridi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:43:50