Wie kann ich die Netzwerkbandbreite pro Benutzer auf einem Ubuntu-Server überwachen?

12

Ich habe einige Shell-Benutzer auf einem Server mit 300 GB monatlicher Datenübertragung. Wie kann ich die Bandbreitennutzung pro Benutzer überwachen?

Pedram
quelle
ist das überhaupt möglich Theoretisch scheint es umständlicher zu sein, als es sich lohnt, da jeder Prozess, der das Internet verwendet, technisch gesehen die ausführende Person identifizieren und dann die kombinierte Bandbreitennutzung ermitteln muss. Gibt es bestimmte Gründe, die Sie auf Benutzerbasis überwachen möchten, abgesehen von den Shell-Benutzern, die Sie haben? Da mit 300 GB monatlichen Ein- / Ausgangsdaten es unwahrscheinlich ist, dass Sie diese Menge überschreiten: /
Thomas Ward
Ansonsten muss es möglich sein, wie ISPs die Bandbreite pro Benutzer begrenzen.
DJEIKYB
@EvilPhoenix Ich möchte die Nutzung pro Benutzer überwachen. 300 GB sind nicht so viel für einen Server mit mindestens 20 Benutzern, die diesen Server als Proxyserver verwenden.
Pedram
1
Sieht so aus, als hätten Sie eine großartige praktische Antwort von Kees Cook, aber wenn Sie immer noch nach Methoden suchen, frage ich mich, ob es hilfreich sein könnte, die Frage anders zu formulieren. Ich fand diesen Leitfaden googelnd "wie man die Benutzer-Bandbreite unter Linux begrenzt": faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
djeikyb

Antworten:

13

Als Root können Sie zumindest den ausgehenden Datenverkehr auf Benutzerbasis mit dem Modul "owner" von iptables messen. Wenn alle Benutzer, die Sie überwachen möchten, angemeldet sind /root/list-of-users.txt, haben Sie folgende Möglichkeiten :

for login in $(cat /root/list-of-users.txt);
do
    iptables -N out_user_$login
    iptables -A OUTPUT -m owner --uid-owner $(id -u $login) -j out_user_$login
done

Anschließend werden die Anzahl der Pakete und Bytes für den ausgehenden Verkehr jedes Benutzers angezeigt:

iptables -L OUTPUT -n -v | grep out_

Dies könnte mit CONNMARK erweitert werden, um auch die eingehende Seite zu verfolgen.

Kees Cook
quelle
Danke. Es ist großartig. Ich habe dies getan. Aber warum kann ich nicht dieselbe Methode für EINGABE verwenden?
Pedram
1
Der Eigentümer des Pakets ist für eingehende Pakete nicht bekannt, da es aus Sicht des Kernels von außerhalb des Computers stammt. CONNMARK könnte verwendet werden, um Pakete in TCP-Streams an ihren Absender usw. zu binden, aber ich habe kein funktionierendes Beispiel dafür.
Kees Cook
7

Ich bin gerade auf NetHogs gestoßen :

NetHogs ist ein kleines 'Net Top'-Tool. Anstatt den Datenverkehr nach Protokollen oder Subnetzen aufzuteilen, gruppiert es die Bandbreite nach Prozessen, wie es die meisten Tools tun.

Bildbeschreibung hier eingeben

Dies sollte Ihnen ermöglichen, die Bandbreite nach Benutzernamen zu verfolgen. Möglicherweise benötigen Sie noch ein paar Tools, um die Informationen zu protokollieren und alles zu addieren, aber es ist ein guter Anfang, ohne iptables direkt zu verwenden.

djeikyb
quelle
Es kann auch im Modus gestartet werden, um den Verkehr zu summieren: sudo nethogs -v 3 eth0(oder mwiederholt drücken, nachdem die Modi durchlaufen wurden). Kombiniere mit, tmuxum dauerhaft zu laufen (auch wenn deine sshSitzung abstürzt).
Tanius
6

Sie können Kakteen verwenden

Cacti ist ein vollständiges Frontend für RRDTool. Es speichert alle notwendigen Informationen, um Diagramme zu erstellen und sie mit Daten in einer MySQL-Datenbank zu füllen. Das Frontend ist komplett PHP-gesteuert. Cacti ist nicht nur in der Lage, Grafiken, Datenquellen und Round Robin-Archive in einer Datenbank zu verwalten, sondern kümmert sich auch um die Datenerfassung. Es gibt auch SNMP-Unterstützung für diejenigen, die zum Erstellen von Verkehrsgraphen mit MRTG verwendet werden.

Oder vnStat

vnStat ist ein konsolenbasierter Netzwerkverkehrsmonitor für Linux und BSD, der den Netzwerkverkehr für die ausgewählten Schnittstellen protokolliert. Es verwendet die vom Kernel bereitgestellten Netzwerkschnittstellenstatistiken als Informationsquelle. Dies bedeutet, dass vnStat tatsächlich keinen Datenverkehr aufspürt und zudem eine geringe Nutzung der Systemressourcen gewährleistet.

Beide sind großartig.

sebikul
quelle
2
Vielen Dank, aber ich habe beide bereits gesehen und es scheint, als ob sie keine Überwachung pro Benutzer bieten. Ich möchte die Nutzung pro Benutzer überwachen.
Pedram
5

Ich habe ein bisschen nachgesehen und kein umfassendes GUI-Paket gefunden, das genau das tut, was Sie wollen. Hoffentlich existiert einer und irgendwann wird jemand hier darüber posten.

Ich bin nicht wirklich ein Netzwerk - Typ, aber von dem, was ich gelesen habe, unter vielen anderen Dingen netstatund iptablesbin für die IP / Host - basierte Benutzer tun soll Buchhaltung , was die acctWerkzeuge für den Systemprozess Buchhaltung taten. Dieser Link auf cyberciti.biz könnte Sie auf den Weg bringen, ein System mit den folgenden Tools zu entwickeln:

http://www.cyberciti.biz/faq/linux-configuring-ip-traffic-accounting/

djeikyb
quelle
Vielen Dank, aber wie Sie sagten, werden sie für die IP-basierte Benutzerabrechnung verwendet. Ich habe einige Shell-Benutzer, die den Server möglicherweise an verschiedenen Standorten verwenden, insbesondere in einer Universitätsabteilung mit derselben IP-Adresse (hinter einem NAT) auf der Suche nach einer benutzerbasierten Buchhaltungslösung, wenn es möglich ist.
Pedram
netstat -eZeigt die Shell-Benutzer an, sodass Sie IP / Host mit dem Benutzernamen verknüpfen können.
DJEIKYB