如何限制特定用户的下载数据流量?

如何限制特定用户的下载数据流量?

我想将 Ubuntu 上每个用户的下载数据流量限制为 50GB。

限制应基于用户 ID 或组 ID 或类似内容。不能基于 IP 或端口或应用程序。我正在尝试为使用相同端口的 SSH DIRECT 用户设置限制。

答案1

据我所知,没有“简单”的方法可以做到这一点,因为 Linux 通常不会跟踪哪些用户正在使用网络资源。但是,如果您熟悉脚本,您可以编写一些脚本来读取以iptables监视正在使用的带宽量。

以下是一些可帮助您入门的命令:

  1. 告诉iptables监控特定接口上特定用户的流量:

    iptables -A OUTPUT -o {interface} -m owner --uid-owner {uid}
    

    笔记:如果您希望它从启动时监视流量,则必须将此命令与启动脚本一起运行sudo或作为root启动脚本运行。请确保将 替换{interface}为网络接口,并将{uid}替换为正在监视的用户id。这需要为每个用户帐户执行。

  2. 查询iptables每个受监控用户使用了多少带宽:

    iptables -L -v -n
    

    笔记:此命令必须使用 或sudo作为运行root

    输出将会像这样:

    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
    
    Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
     9646 1470K            all  --  *      wlp4s0  0.0.0.0/0            0.0.0.0/0            owner UID match 1000
    
  3. 禁用给定用户的网络访问:

    iptables -A OUTPUT -m owner --uid-owner {uid} -j DROP
    

    笔记:sudo此命令必须使用或 以运行。请确保用适当的用户root替换。{uid}id

补充笔记:

  1. 如果你还想跟踪传入-A INPUT网络流量,请务必在您的命令中使用iptables
  2. 如果这是作为计划进程的一部分运行的,请注意,很难将流量限制在 50GB(或任意数量)。超出限制的人仍可以访问网络,直到监控脚本运行并发出-j DROP。不过,每分钟运行一次脚本就足够了。
  3. 如果人们定期通过 SSH 进入机器进行操作,您可能需要考虑发送一条 MOTD 消息,向人们显示其剩余的带宽限额,以减少下载在 99.9% 时终止时人们可能产生的愤怒。

相关内容