Question Comment puis-je limiter la bande passante par utilisateur?


Pour résumer: J'ai un serveur dédié avec quelques amis qui exécutent un client torrent avec interface graphique. Chaque utilisateur exécute un client sous son nom d'utilisateur sur le serveur. Les téléchargements sont donc placés dans son répertoire utilisateur. Seuls les utilisateurs ont accès à leurs propres fichiers, etc.

Comment puis-je surveiller et limiter la bande passante par mois, par utilisateur?

Je pensais qu'il devait y avoir un moyen d'utiliser iptables peut-être. Et en surveillant la bande passante utilisée par tous les processus de l'utilisateur X. S'ils ont utilisé plus de leur bande passante mensuelle autorisée, ils reçoivent un message l'informant que la mise en réseau est bloquée pour leur client torrent ou que le client est complètement tué. J'ai aussi pensé au calmar, mais vu qu'il utiliserait plusieurs clients torrent, cela pourrait utiliser beaucoup de ressources serveur ...

J'utilise Debian Lenny.

Je ne sais pas comment faire ça ...

cela serait-il possible? Je suis reconnaissant des solutions, même partielles, à cette question ...


32
2017-08-09 20:56


origine


Nous pourrions faire avec savoir quel système d'exploitation que vous utilisez. - Sam Cogan
debian. Ajouté dans une édition. - loco41211
Juste curieux, utilisez-vous TorrentFlux? - cop1152
c'est une des choses que j'essaye. Pour le moment, nous envisageons tout ce qui pourrait être utilisé pour un seedbox avec une limitation de l'espace disque (pour laquelle nous avons une solution) et une limitation de la bande passante sur laquelle nous sommes bloqués .... et certains de mes amis utilisent environ 1 To par mois, tandis que d'autres seulement quelques Mbs. Voudrais vraiment limiter cela par utilisateur également. - loco41211


Réponses:


Vous pouvez utiliser la commande de mise en forme du trafic 'tc'.

Donnez à chacun de vos amis un port différent à utiliser pour BitTorrent. Marquez les paquets TCP avec iptables pour chaque port.

iptables -t mangle -A FORWARD -p tcp --sport 6881 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -p tcp --dport 6881 -j MARK --set-mark 100

Utilisez ensuite la commande tc pour définir la bande passante et le débit maximum pour chaque utilisateur.

À la fin du mois, vous pouvez supprimer et ajouter les commandes 'tc' pour réinitialiser les comptages.

Vous pouvez surveiller l'utilisation pour chaque utilisateur en:

tc filter show dev ethX

Si vous utilisez shorewall pour l’installation de Debian, il est très facile de mettre en forme le trafic sans jouer avec iptables. Vous venez de modifier tcdevices, tcclasses et tcrules dans le répertoire / etc / shorewall. Plus d'infos ici: http://www.shorewall.net/traffic_shaping.htm

Comme l’a suggéré l’autre personne, il est probablement préférable de marquer les paquets par nom d’utilisateur que par port, ce qui permet de modifier les ports sans mettre à jour iptables.


13
2017-08-09 21:30



pourriez-vous donner un exemple sur la fixation d'une limite? Dites 100 Go entrants et sortants ensemble? - loco41211
torrent peut (et est en fait) utiliser d'autres ports, ainsi l'exemple ne résout pas vraiment le problème. - cstamas
cela supprime ces deux options comme solution ... - loco41211
cstamas: vous pouvez définir un ou plusieurs ports lorsque vous utilisez un client BitTorrent. regarde ça: dessent.net/btfaq/#ports - chris.moos


Vous pouvez essayer d'utiliser le --quota option dans iptables, qui vous permet de définir une limite de transfert en octets. Étant donné que vous exécutez plusieurs clients torrent, chacun sous un nom d'utilisateur différent, vous pouvez le combiner avec le --uid-owner option, comme suggéré par Katriel.

De cette manière, vous pouvez imposer une limite de transfert par période (jour / semaine / mois / etc.) sans avoir à limiter la vitesse de téléchargement de vos utilisateurs.

Pour rendre les compteurs de paquets persistants, vous devez les enregistrer régulièrement (par exemple, via un travail cron), afin de pouvoir les restaurer au cas où vous auriez besoin de redémarrer le serveur ou de vider les règles du pare-feu.


13
2017-08-10 12:21



ça sonne comme si ça marcherait. Donc, avec l’aide d’iptables, je peux marquer tout le trafic entrant et sortant pour un utilisateur donné. Et je peux le limiter pour une période donnée. Je n'arrive toujours pas à comprendre comment l'ensemble sera mis en place. La commande exacte que je pourrais utiliser pour marquer le trafic entrant et sortant est donc la suivante: "iptables -t mangle -A OUTPUT -p tcp -m propriétaire --uid-owner someuser -j MARK --set-mark 100"? Ou comment pourrais-je le faire? Par exemple, qu'est-ce que la commande permet de marquer le nom d'utilisateur bob avec l'id 56 avec une limite mensuelle de 100 Go? Je suppose qu'un travail mensuel mensuel réinitialiserait le compteur de trafic? - loco41211


Juste pour ajouter à la question ci-dessus.

Vous pouvez utiliser iptables avec une correspondance d'utilisateur pour colorer les paquets de la manière suivante:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner someuser -j MARK --set-mark 100

Et utilisez ensuite 'tc' pour limiter l'utilisateur par utilisateur.


12
2017-08-09 21:39



Pourriez-vous donner un exemple d'utilisation de tc pour définir une limite de 100 Go pour le nom d'utilisateur blablaX? Et un exemple du code qui devrait être utilisé pour réinitialiser la limite après un mois? Je vous remercie - loco41211
Ceci limitera l'utilisateur sur une base permanente, et non sur un quota chronométré - katriel


En fonction du trafic mensuel que vous souhaitez autoriser pour chaque utilisateur, vous pouvez définir une limite de bande passante en conséquence, en utilisant certains des outils suggérés par les autres utilisateurs.

Par exemple, supposons que vous souhaitiez définir une limite de téléchargement maximale de 250 Go / mois. Maintenant, si vous divisez cela par le nombre d'heures d'un mois (~ 730), puis par 3600, vous obtiendrez le taux de téléchargement maximal, qui dans cet exemple serait d'environ 100 Ko / s.

Ensuite, si vous définissez un débit DL maximal de 100 Ko / s, vous appliquerez automatiquement votre limite de téléchargement de 250 Go / mois (en supposant bien entendu que votre transformateur de trafic fonctionne correctement). Si vos utilisateurs ne peuvent pas télécharger plus rapidement que 100 Ko / s, ils ne pourront pas télécharger plus de 250 Go / mois.

Afin de limiter le taux de téléchargement, vous pouvez utiliser tc ou certains des autres outils qui ont été mentionnés. Si vous ne voulez pas traiter directement avec tc, vous pourriez utiliser cbq.init, ce qui est assez simple à mettre en place. Ce script était présent dans Debian Etch en tant que shaper paquet, mais il semble avoir été retiré après cela. Quoi qu'il en soit, ce n'est qu'un simple script que vous pouvez télécharger depuis SourceForge.

Bien sûr, cette approche pourrait ne pas être utile dans votre cas (par exemple, si vous vouliez que vos utilisateurs puissent télécharger à la vitesse maximale disponible tout en appliquant votre limite mensuelle, ma suggestion ne fonctionnerait pas).


8
2017-08-10 01:21



La raison principale pour laquelle nous utilisons un seedbox à la place juste des torrents sur nos ordinateurs car il est beaucoup plus rapide, donc malheureusement cela ne résout pas le problème ... Merci quand même - loco41211


Je sais que c’est un vieil article, mais même si j’ai trébuché dessus à la recherche de réponses aujourd’hui, j’ai finalement rassemblé quelque chose qui me convient parfaitement. J'ai une liaison descendante de 25Mbs et une liaison montante de 2,5Mbs et il y a 4 personnes et 5 serveurs partageant ce lien. Avec les serveurs, la bande passante est critique, mais la liaison descendante est utile avec 4 personnes, donc personne ne le cache.

J'exécute centos 6.3 en tant que routeur, mais ces commandes devraient fonctionner sur n'importe quel linux. eth0 est ma liaison montante au fournisseur eth1 est mon réseau local via un commutateur à 24 ports et un point d'accès wifi Je limite les téléchargements à 5 des 25 Mbs (environ 500 Ko / s) Je limite les téléchargements à 200 Ko (environ 25 Ko / s)

tc qdisc add dev eth0 root handle 1:0 htb default 99
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 200Kbit ceil 200Kbit prio 2
tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10

tc qdisc add dev eth1 root handle 2:0 htb default 99
tc class add dev eth1 parent 2:0 classid 2:1 htb rate 100Mbit ceil 100Mbit
tc class add dev eth1 parent 2:1 classid 2:11 htb rate 5Mbit ceil 5Mbit prio 2
tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10

alors pour limiter les utilisateurs vous utilisez 2 lignes iptables par utilisateur

pour limiter les téléchargements:

iptables -t mangle -A POSTROUTING -o eth0 -p tcp -s 192.168.0.100 -j CLASSIFY --set-class 1:11

limiter les téléchargements

iptables -t mangle -A POSTROUTING -o eth1 -p tcp -d 192.168.0.100 -j CLASSIFY --set-class 2:11

il suffit de changer votre adresse IP et vos ports eth pour correspondre à ceux que vous souhaitez limiter


7
2018-01-16 09:09





Pour être complet, il existe un démon d’espace utilisateur appelé trickle. Il peut être utilisé pour limiter la bande passante d'un processus unique. L'utilisation est très simple: f.e. Pour limiter la bande passante utilisée par aptitude, vous pouvez écrire: trickle -d 10 aptitude install wesnoth Cependant, comme cela fonctionne avec LD_PRELOAD, un utilisateur disposant d’un accès shell peut facilement le remplacer.


3
2017-08-09 21:46



À part moi-même, aucun des utilisateurs n'a accès au shell. De plus, avec limite de bande passante, je veux dire par mois ou une période de temps définie. Cela serait-il possible? - loco41211
Non, le ruissellement limite la vitesse en secondes. - liori


Regardez le useripacct noyau pièce (cela a en fait une assez longue l'histoire). dans le docs pour l'ancienne version il semble également assurer l'application de quotas ainsi que la surveillance, et il est également possible de fournir vos propres scripts de stratégie.

Étant donné que les créateurs d’utilisateurs devaient recourir à un correctif du noyau pour obtenir le comportement souhaité, il semble peu probable qu’une méthode plus simple soit disponible par défaut. Les seules alternatives semblent être la limitation de la bande passante (par exemple, tc ou ruissellement) comme le suggèrent la plupart des autres réponses ici (mais pas ce que vous cherchez), ou la création d'une VM pour chaque utilisateur (utilisant la virtualisation de système d'exploitation légère). par quelque chose comme OpenVZ) et le trafic comptable par machine virtuelle (ce qui est assez facile à évaluer par quelque chose comme vnstat). Cela semble toutefois exagéré (vous avez soudainement un groupe de machines virtuelles à administrer au lieu d’un système).


2
2017-08-09 22:18



c'est un peu excessif car cela épuiserait les ressources du serveur .. mais merci pour cette idée! - loco41211