Para resumir: Eu tenho um servidor dedicado com alguns amigos executando um cliente de torrent com GUI da web. Cada usuário está executando um cliente com o nome de usuário no servidor, para que os downloads ocorram no diretório do usuário e somente eles tenham acesso aos seus próprios arquivos etc.
Como posso monitorar e limitar a largura de banda por mês, por usuário?
Eu estava pensando que deve haver uma maneira de usar o iptables, talvez. E monitorando a largura de banda usada por todos os processos do usuário X. E se eles usaram mais do que a largura de banda mensal permitida de Y GB, eles recebem uma mensagem dizendo que a rede é bloqueada para o cliente de torrent ou o cliente é morto completamente. Também pensei no squid, mas, como seria usar vários clientes de torrent, isso poderia usar muitos recursos do servidor ...
Estou usando o debian lenny.
Não sei bem como fazer isso ...
isso seria possível? Sou grato por soluções apenas parciais para isso ...
Respostas:
Você pode usar o comando de modelagem de tráfego 'tc'.
Dê a cada um de seus amigos uma porta diferente para usar no BitTorrent. Marque os pacotes TCP com iptables para cada porta.
Em seguida, use o comando tc para definir a largura de banda e a taxa máximas para cada usuário.
No final do mês, você pode excluir e adicionar os comandos 'tc' para redefinir as contagens.
Você pode monitorar o uso de cada usuário:
Se você estiver usando o Debian install shorewall, será realmente fácil modelar o tráfego sem mexer com o iptables. Você apenas edita tcdevices, tcclasses e tcrules no diretório / etc / shorewall. Mais informações aqui: http://www.shorewall.net/traffic_shaping.htm
Como a outra pessoa sugeriu, marcar pacotes por nome de usuário provavelmente é melhor do que por porta, dessa forma as portas podem ser alteradas sem atualizar o iptables.
fonte
Você pode tentar usar a
--quota
opção em iptables, que permite definir um limite de transferência em bytes. Como você está executando vários clientes de torrent, cada um com um nome de usuário diferente, você pode combinar isso com a--uid-owner
opção, como sugerido por katriel.Dessa forma, você pode impor um limite de transferência por período (dia / semana / mês / etc) sem precisar limitar a velocidade de download dos usuários.
Para tornar os contadores de pacotes persistentes, é necessário salvá-los periodicamente (por exemplo, através de um trabalho cron), para que você possa restaurá-los caso precise reiniciar o servidor ou liberar as regras de firewall.
fonte
Apenas para adicionar a pergunta acima.
Você pode usar o iptables com o usuário correspondente para colorir os pacotes da seguinte maneira:
E, em seguida, use 'tc' para limitar por usuário.
fonte
Dependendo da quantidade de tráfego mensal que você deseja permitir para cada usuário por mês, você pode definir um limite de largura de banda adequadamente, usando algumas das ferramentas sugeridas pelos outros usuários.
Por exemplo, digamos que você queira definir um limite máximo de download de 250 GB / mês . Agora, se você dividir isso pelo número de horas em um mês (~ 730) e depois por 3600, obterá a taxa máxima de download, que neste exemplo seria de 100 KB / s .
Então, se você definir uma taxa máxima de DL de 100 KB / s, imporá automaticamente seu limite de download de 250 GB / mês (supondo, é claro, que seu modelador de tráfego esteja funcionando corretamente). Se seus usuários não puderem baixar mais de 100 KB / s, eles não poderão baixar mais de 250 GB / mês.
Para limitar a taxa de download, você pode usar
tc
ou algumas das outras ferramentas mencionadas. Se você não quiser lidar diretamentetc
, pode usar o cbq.init , que é bastante simples de configurar. Este script estava presente no Debian Etch como oshaper
pacote, mas parece ter sido removido depois disso. Enfim, é apenas um script simples que você pode baixar do SourceForge.É claro que essa abordagem pode não ser útil no seu caso (por exemplo, se você quiser que seus usuários possam fazer o download na velocidade máxima disponível, mas ainda imponha seu limite mensal, minha sugestão não funcionará).
fonte
Eu sei que este é um post antigo, mas até eu o encontrei hoje procurando respostas e, eventualmente, reuni algo que funciona perfeitamente para mim. Eu tenho um downlink de 25 Mb e um uplink de 2.5 Mb e existem 4 pessoas e 5 servidores compartilhando esse link. com servidores, a largura de banda do uplink é crítica, mas o downlink é útil para 4 pessoas, portanto, ninguém monopoliza tudo.
Estou executando o centos 6.3 como roteador, mas esses comandos devem funcionar em qualquer linux. eth0 é o meu uplink para o provedor eth1 é a minha LAN via switch de 24 portas e ponto de acesso wifi. Limito os downloads a 5 dos 25 Mbs (aproximadamente 500 KB / s). Limito os uploads a 200 Kbits (aproximadamente 25 KB / s)
para limitar os usuários, você usa 2 linhas de tabelas de ip por usuário
para limitar envios:
limitar downloads
basta alterar seu endereço IP e portas eth para corresponder a quem você deseja limitar
fonte
Para completar, existe um daemon de espaço de usuário chamado
trickle
. Pode ser usado para limitar a largura de banda de um único processo. O uso é muito simples: fe, para limitar a largura de banda usada pelo aptitude, você pode escrever:trickle -d 10 aptitude install wesnoth
No entanto, como funciona com LD_PRELOAD, pode ser facilmente substituído por um usuário com acesso ao shell.fonte
Dê uma olhada no patch do kernel useripacct (isso realmente tem um longo histórico ). Nos documentos da versão antiga, ele parece também fornecer imposição de cotas, além de monitoramento, e também é possível fornecer seus próprios scripts de política.
Dado que os criadores de useripacct tiveram que recorrer a um patch do kernel para obter o comportamento desejado, parece improvável que exista um método mais simples disponível por padrão. As únicas alternativas parecem limitar a largura de banda (por algo como tc ou trickle), conforme sugerido pela maioria das outras respostas aqui (mas não realmente o que você está procurando), ou criar uma VM para cada usuário (usando virtualização leve do SO por algo como OpenVZ ) e tráfego de contabilidade por VM (o que é razoavelmente fácil avaliado por algo como vnstat ). Isso parece um exagero (de repente você tem várias VMs para administrar, em vez de um sistema).
fonte