Comment surveiller la bande passante réseau par utilisateur sur le serveur Ubuntu?

12

J'ai des utilisateurs shell sur un serveur avec 300 Go de transfert de données mensuel. Comment puis-je surveiller l'utilisation de la bande passante par utilisateur?

Pedram
la source
Est-ce seulement possible? Il semble que, théoriquement, ce serait plus compliqué que cela en vaut la peine, car il faudrait techniquement que chaque processus utilisant Internet identifie qui l'exécute, puis détermine l'utilisation combinée de la bande passante. Y a-t-il des raisons spécifiques que vous souhaitez surveiller par utilisateur en dehors des utilisateurs shell que vous avez? Parce qu'avec 300 Go de données mensuelles d'entrée / sortie, il semble peu probable que vous dépassiez ce montant: /
Thomas Ward
Cela doit être possible, sinon comment les FAI plafonnent-ils la bande passante par utilisateur?
djeikyb
@EvilPhoenix Je veux surveiller l'utilisation par utilisateur. 300 Go n'est pas tant que ça pour un serveur avec au moins 20 utilisateurs qui utilisent ce serveur comme serveur proxy.
Pedram
1
On dirait que vous avez une excellente réponse pratique de Kees Cook, mais si vous cherchez toujours des méthodes, je me demande si une formulation différente de la question pourrait aider. J'ai trouvé ce guide sur Google "comment limiter la bande passante des utilisateurs sur linux": faqs.org/docs/Linux-HOWTO/Bandwidth-Limiting-HOWTO.html
djeikyb

Réponses:

13

En tant que root, vous pouvez au moins mesurer le trafic sortant par utilisateur en utilisant le module "propriétaire" d'iptables. Si tous les utilisateurs que vous souhaitez surveiller se trouvent /root/list-of-users.txt, vous pouvez:

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

Et puis le nombre de paquets et d'octets pour le trafic sortant de chaque utilisateur est visible:

iptables -L OUTPUT -n -v | grep out_

Cela pourrait être étendu davantage avec CONNMARK pour suivre également le côté entrant.

Kees Cook
la source
Merci, c'est super, je l'ai fait, mais pourquoi ne puis-je pas utiliser la même méthode pour INPUT?
Pedram
1
Le propriétaire du paquet n'est pas connu pour les paquets entrants car du point de vue du noyau, il est venu de l'extérieur de la machine. CONNMARK pourrait être utilisé pour lier des paquets dans des flux TCP à leur expéditeur, etc., mais je n'ai pas d'exemple de travail.
Kees Cook
7

Je viens de rencontrer NetHogs :

NetHogs est un petit outil «net top». Au lieu de décomposer le trafic par protocole ou par sous-réseau, comme la plupart des outils, il regroupe la bande passante par processus.

entrez la description de l'image ici

Cela devrait vous permettre de suivre la bande passante par nom d'utilisateur. Il se peut que vous ayez encore besoin de quelques autres outils pour enregistrer les informations et les additionner, mais c'est un bon début sans utiliser directement iptables.

djeikyb
la source
Il peut également être démarré dans le mode pour résumer le trafic: sudo nethogs -v 3 eth0(ou appuyez mplusieurs fois après avoir commencé à parcourir les modes). À combiner avec tmuxpour une exécution persistante (même si votre sshsession plante).
tanius
6

Vous pouvez utiliser Cacti

Cacti est une interface complète pour RRDTool, il stocke toutes les informations nécessaires pour créer des graphiques et les remplir avec des données dans une base de données MySQL. Le frontend est entièrement piloté par PHP. En plus de pouvoir conserver des graphiques, des sources de données et des archives Round Robin dans une base de données, cactus gère la collecte de données. Il existe également une prise en charge SNMP pour ceux qui sont habitués à créer des graphiques de trafic avec MRTG.

Ou vnStat

vnStat est un moniteur de trafic réseau basé sur console pour Linux et BSD qui conserve un journal du trafic réseau pour les interfaces sélectionnées. Il utilise les statistiques d'interface réseau fournies par le noyau comme source d'information. Cela signifie que vnStat ne reniflera en fait aucun trafic et garantit également une utilisation légère des ressources système.

Les deux sont super.

sebikul
la source
2
Merci mais je les ai déjà vus tous les deux et il semble qu'aucun d'entre eux n'offre de surveillance par utilisateur. Je veux surveiller l'utilisation par utilisateur.
Pedram
5

J'ai regardé un peu, et je n'ai pas trouvé de package gui complet qui fait ce que vous voulez. Avec un peu de chance, il en existe un et quelqu'un finira par en parler ici.

Je ne suis pas vraiment un gars en réseau, mais de ce que j'ai lu, parmi beaucoup d' autres choses netstatet iptablessont censés faire pour la comptabilité utilisateur à base IP / hôte ce que les acctoutils ont pour la comptabilité des processus système. Ce lien cyberciti.biz pourrait vous mettre sur la voie du développement d'un système avec ces outils:

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

djeikyb
la source
Merci, mais comme vous l'avez dit, ils sont utilisés pour la comptabilité des utilisateurs sur IP. J'ai un utilisateur shell qui peut utiliser le serveur à différents endroits, spécialement dans un département universitaire avec la même adresse IP (derrière un NAT). à la recherche d'une solution de comptabilité basée sur l'utilisateur, si c'est possible.
Pedram
netstat -emontre les utilisateurs du shell, vous permettant de lier ip / host au nom d'utilisateur.
djeikyb