我有一个 Ubuntu 服务器,大约有 20 个用户,主要将其用于 SSH 隧道。
我想知道是否有任何方法可以确定每个用户在特定时间段(例如过去一周或一个月)传输的数据量。
答案1
一个好问题,我找到了一个视图答案:
-
iftop -i "$iface" -nPf "tcp and port $sport and port $dport"
ssh 连接的数据包将在哪个
$iface
接口上发送/接收,以及$sport/$dport
源和目标 TCP 端口。您还可以通过指定源 IP 地址和目标 IP 地址来进一步细化过滤器。 -
您应该运行
tcpdump -ni eth0 -w dump port 22
以捕获所有数据包,然后tcpdump -nX -r dump
查看它们。 -
我会使用 iptables 所有者模块(可能与其他配额/报告模块一起使用)。
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid someuser -j ACCEPT
然后查看输出以
iptables -vL
查看通过此规则的数据包/字节数,或使用某些分析器解析 iptables 统计信息。
要跟踪特定时间段内的数据,您可能需要定期重置统计信息并定期(例如每周或每月)收集数据。
将输出重定向iptables -vL
到文件以进行分析。
iptables -vL > ssh_traffic.txt
重置统计数据:
iptables -Z
iptables
重置跟踪 SSH 流量的规则的统计信息。
您还可以编写并使用或bash script
运行它,以按所需的时间间隔自动执行脚本以收集和分析流量。cron
anacron
还有另一种选择一起使用iptables
,conntrack
和connmark
,但你必须自己看看。