我想将 Ubuntu 上每个用户的下载数据流量限制为 50GB。
限制应基于用户 ID 或组 ID 或类似内容。不能基于 IP 或端口或应用程序。我正在尝试为使用相同端口的 SSH DIRECT 用户设置限制。
答案1
据我所知,没有“简单”的方法可以做到这一点,因为 Linux 通常不会跟踪哪些用户正在使用网络资源。但是,如果您熟悉脚本,您可以编写一些脚本来读取以iptables
监视正在使用的带宽量。
以下是一些可帮助您入门的命令:
告诉
iptables
监控特定接口上特定用户的流量:iptables -A OUTPUT -o {interface} -m owner --uid-owner {uid}
笔记:如果您希望它从启动时监视流量,则必须将此命令与启动脚本一起运行
sudo
或作为root
启动脚本运行。请确保将 替换{interface}
为网络接口,并将{uid}
替换为正在监视的用户id
。这需要为每个用户帐户执行。查询
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
禁用给定用户的网络访问:
iptables -A OUTPUT -m owner --uid-owner {uid} -j DROP
笔记:
sudo
此命令必须使用或 以运行。请确保用适当的用户root
替换。{uid}
id
补充笔记:
- 如果你还想跟踪传入
-A INPUT
网络流量,请务必在您的命令中使用iptables
。 - 如果这是作为计划进程的一部分运行的,请注意,很难将流量限制在 50GB(或任意数量)。超出限制的人仍可以访问网络,直到监控脚本运行并发出
-j DROP
。不过,每分钟运行一次脚本就足够了。 - 如果人们定期通过 SSH 进入机器进行操作,您可能需要考虑发送一条 MOTD 消息,向人们显示其剩余的带宽限额,以减少下载在 99.9% 时终止时人们可能产生的愤怒。