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

Ubuntu 22.04下通过UFW添加持久化自定义iptables规则以阻止特定用户网络访问的问题

Ubuntu 22.04下通过UFW添加持久化自定义iptables规则以阻止特定用户网络访问的问题

嗨,我来帮你搞定这个问题!你想通过UFW持久化阻止特定UID用户的外部网络访问,之前把规则加到before.rules里没生效对吧?这其实是因为UFW的规则加载顺序和链的优先级问题,咱们一步步来调整:

一、正确调整规则在before.rules里的位置

before.rules确实是存放自定义前置规则的地方,但规则的放置位置很关键——必须放在UFW默认的OUTPUT链定义之后、自身默认规则之前,不然会被后面的允许规则覆盖。

具体操作:

  1. 打开/etc/ufw/before.rules文件:sudo nano /etc/ufw/before.rules
  2. 找到*filter块里的:OUTPUT ACCEPT [0:0]这一行,在它后面直接添加你的规则:
    :OUTPUT ACCEPT [0:0]
    # 阻止UID为130的用户访问外部网络(本地回环lo除外)
    -A OUTPUT ! -o lo -m owner --uid-owner 130 -j DROP
    
  3. 保存文件后,重启UFW让规则生效:sudo ufw reload

二、验证规则是否生效

  1. 先检查iptables的OUTPUT链,确认规则已加载:sudo iptables -L OUTPUT -n -v,你应该能看到那条DROP规则出现在列表的靠前位置。
  2. 切换到目标用户测试:如果是普通用户可以用su -l -u 130,系统用户的话用sudo -u 130 bash,然后尝试ping外部地址(比如ping 8.8.8.8),正常情况下应该会被完全阻止。

三、更规范的备选方案:使用UFW自定义规则目录

如果你不想直接修改before.rules,可以用UFW专门的自定义规则目录/etc/ufw/rules.d/,步骤如下:

  1. 创建一个自定义规则文件,文件名建议以00-开头(确保规则优先加载),比如:sudo nano /etc/ufw/rules.d/00-block-user.rules
  2. 写入完整的iptables规则结构:
    *filter
    -A OUTPUT ! -o lo -m owner --uid-owner 130 -j DROP
    COMMIT
    
  3. 同样执行sudo ufw reload让规则生效,这个方式的好处是不会和UFW默认的before.rules内容混在一起,更便于维护。

四、需要注意的坑点

  • 规则必须放在*filter块内部,否则UFW会忽略它;
  • DROP规则一定要在任何允许OUTPUT流量的规则之前,不然用户的流量已经被允许通过,DROP规则就起不到作用了;
  • 如果目标用户拥有sudo权限,他们可以自行修改UFW规则突破限制,这个方法只对无sudo权限的用户有效。

备注:内容来源于stack exchange,提问作者Rusty Weber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:53:01