Squid - Limitar Velocidade do Download e Upload por Extensão

Iniciado por ivo_b_jr, 18 de Março de 2011, 19:54

tópico anterior - próximo tópico

ivo_b_jr

Ola pessoal do fórum :), sou novo por aqui e preciso muito da ajuda de vocês. Possuo uma lanhouse a pouco tempo e usava somente o roteador com controle de banda para dividir minha banda larga de 4 megas da speedy para meus 25 computadores. Com pesquisas fiquei sabendo do squid, proxy cache... e com dicas e pesquisas na internet crieu um servidor linux (Ubuntu 10.10 Desktop) para fazer Cache de páginas e arquivos da internet. Consegui montar e fazer funcionar de forma bem simples, com poucas regras, visto que não sou usuário experiente no assunto, mas deu pra quebrar o galho e tá funcionando. Ele faz cache de algumas coisas baixadas e acessadas da internet, de videos do youtube (temporariamente), me perdoem em escrever temporariamente, é que como não entendo, depois de um tempo o video volta a ser baixado novamente pela internet e não fica no cache do squid. (já li a respeito disso num outro forum, mas não tentei ainda corrigir isso).

Bem vamos lá ao que interessa:

Minha lan, está com o seguinte problema: quando uns 7 clientes  fazem downloads de programas, videos, mp3 e outros a banda fica muito baixa, deixando a internet lenta para os outros usuários, gostaria muito de acrecentar no squid.conf alguma regra que fizesse o squid limitar a velocidade do download por extenção. ex: mp3, avi, zip, exe e outros grande arquivos, fossem baixados somente com velocidade de 50kbps por exemplo. durante o dia ou seja das 08:00 até as 14:00 sem limite de velocidade para baixar, mas apartir desse horario até a noite 23:00 que essa regra passasse a funcionar.


Vou mandar meu squid.conf para voces olharem e acrescentarem essa rotina. Na internet fala sobre isso mas de forma muito complicada para iniciantes. Se houver algo mais facil por favor me mostrem como acrescentar essas regras de velocidade de download no squid. Aqui segue meu squid.conf


#a porta onde o servidor squid ficará disponível
http_port 3128

#nome do servidor
visible_hostname proxy

error_directory /usr/share/squid/errors/Portuguese/

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 4000 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 100000 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 192.192.1.49/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl bloqueados url_regex -i "/etc/squid/bloqueado"
http_access deny bloqueados

acl redelocal src 192.168.1.0/255.255.255.0
http_access allow localhost
http_access allow redelocal
http_access deny all

zekkerj

delay_pools 2
delay_class 1 1
delay_class 2 2
delay_parameters 1 512000/512000 # 4Mbps
delay_parameters 2 512000/512000 6250/64000 # 4Mbps de agregado, 50K de banda com rajada de 64K.
acl diretoria src "lista-de-ips-sem-limitacao.txt"
acl horas_livres time MTWQF 14:00-23:00
acl downloads_limitados urlpath_regex .*\.mp3 .*\.avi .*\.zip .*\.exe
delay_access 1 allow diretoria
delay_access 1 allow horas_livres
delay_access 1 deny dowloads_limitados
delay_access 1 allow all
delay_access 2 allow all
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

CitarEle faz cache de algumas coisas baixadas e acessadas da internet, de videos do youtube (temporariamente), me perdoem em escrever temporariamente, é que como não entendo, depois de um tempo o video volta a ser baixado novamente pela internet e não fica no cache do squid. (já li a respeito disso num outro forum, mas não tentei ainda corrigir isso).
Vc reservou muito pouca memória pro cache do Squid. E também limitou muito o tamanho dos objetos em memória, forçando o cache praticamente todo a trabalhar em disco, mais lento.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

ivo_b_jr

Obrigado zekkerj, estou implementando meu squid, espero que estaja colocando no lugar certo, e tambem estou criando o arquivo ips-sem-limitação. estou lendo com cuidado e pesquisando algumas rotinas que ainda não conheço, mas o código está campeão, preciso agora testar. Estou postando novamente para que veja se estou colocando no lugar certo. se puder me dar um ok confirmando se está colocado no lugar certo eu agradeço. Caso esteja colocando no local errado gostaria de alguma sugestão para qual local devo inserir suas linhas. Veja como ficou

#a porta onde o servidor squid ficará disponível
http_port 3128

#nome do servidor
visible_hostname proxy

error_directory /usr/share/squid/errors/Portuguese/

cache_mem 64 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 4000 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 100000 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

#Ajuda dos amigos do Forum Ubuntu (limitar banda por extensão)
delay_pools 2
delay_class 1 1
delay_class 2 2
delay_parameters 1 512000/512000 # 4Mbps
delay_parameters 2 512000/512000 6250/64000 # 4Mbps de agregado, 50K de banda com rajada de 64K.
acl diretoria src "/etc/squid/lista-de-ips-sem-limitacao"
acl horas_livres time MTWQF 14:00-23:00
acl downloads_limitados urlpath_regex .*\.mp3 .*\.avi .*\.zip .*\.exe
delay_access 1 allow diretoria
delay_access 1 allow horas_livres
delay_access 1 deny dowloads_limitados
delay_access 1 allow all
delay_access 2 allow all
#Termina aqui.


acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 192.192.1.49/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl bloqueados url_regex -i "/etc/squid/bloqueado"
http_access deny bloqueados

acl redelocal src 192.168.1.0/255.255.255.0
http_access allow localhost
http_access allow redelocal
http_access deny all

ivo_b_jr

zekkerj, sobre a configuração de memoria para o cache, o que vc me recomenda, vou passar minha configuração para você analizar:

a lan tem 20 computadores
o servidor cache é uma maquina de 2 gb de ram e hd de 350gb, processador de pentium dual core 2.6, somente o ubuntu desktop e squid instalado. o que vc me recomenda para mudar no cache?

Obrigado

ivo_b_jr

Perdoe, surgiu também uma dúvida a respeito do valor colocado na rotina:
delay_parameters 1 512000/512000 # 4Mbps
delay_parameters 2 512000/512000 6250/64000 # 4Mbps de agregado, 50K de banda com rajada de 64K.

Como informei minha net é 4Mega da Speedy (telefonica).
Até pelo que sei o plano de 4 megas da speedy garante somente 10% do plano assinado. Então minha banda larga deve ser de aproximadamente 400kbps (Perdoe, se estou calculando errado) caso seja assim, está correto a linha delay_parameters 1 512000/512000 # 4Mbps e
delay_parameters 2 512000/512000 6250/64000 # 4Mbps de agregado, 50K de banda com rajada de 64K como vc me indicou ou os valores ficariam diferentes se fossem 400Kbps? Caso seja 400 ou 450 Kbps como ficariam os valores nas duas linhas informadas por você?

zekkerj

Aumente o cache de memória tanto quanto vc consiga, desde que não faça sua máquina usar swap.
Há um serviço chamado "cachemgr", que vc pode consultar, pra ver o desempenho do cache, inclusive a taxa de hit no cache. Nessa página vc pode comparar o aumento no hit com a quantidade de memória que vc aloca pro cache.

Mas, em termos mais simples, eu subiria o cache de memória pra pelo menos 512K.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

Citação de: ivo_b_jr online 19 de Março de 2011, 17:09
Até pelo que sei o plano de 4 megas da speedy garante somente 10% do plano assinado.
Isso não existe. Se vc comprou 4Mbps, tem direito a 100% de 4Mbps. Quando vc compra um quilo de arroz, aceita levar pra casa 100g? Então não faz sentido comprar 4Mbps e levar pra casa 400Kbps.

Não confunda, no entanto, Mbps (milhões de bits por segundo) com KB/s (milhares de bytes por segundo). Você comprou 4Mbps. No entanto, seu computador não lê bits, lê bytes. E ao contrário do que se pode pensar, não bastam 8 bits pra transferir um byte. É preciso gastar mais alguns bits fazendo controles, retransmissões, etc. A estimativa é que se gaste em torno de 8,8 bits pra cada byte transmitido. Arredondando, calcular 10 bits por byte é uma conta fácil de fazer, e dá resultados plausíveis.

Por isso, admite-se que uma conexão de 4Mbps é capaz de entregar aproximadamente 400KB/s de dados. Isso não é 10%, é 100% da conexão.

Assim, da próxima vez que vc ouvir alguém falando sobre "10% da conexão", faça um favor pela internet e explique a ele que isso é um mito gerado pelo entendimento errado da conversão.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

ivo_b_jr

Muito Obrigado pelo exclarecimento. Comentei isso porque outras pessoas comentam, mas agora entendo que na verdade não existe nada disso de 10% e etc, é simplesmente uma falta de saber fazer calculo. obrigado pelo esclarecimento. irei informar outros conhecidos.

ivo_b_jr

Por favor, adicionei as linhas em meu squid.conf, fiz um restart no squid, gerou alguns erros simples de digitação mas consegui colocar tudo certinho, estou parado num erro que não estou entendendo o porque aparece, ele informa que está na linha 33, vou escrever a mensagem de erro e depois em negrito a linha que encontrei.

ACL name 'all' not defined!
FATAL: Bungled squid.conf line 33: delay_access 1 allow all
Squid Cache (Version 2.7. Stable9): Terminated abnormally.


Meus squid.conf alterado:

#a porta onde o servidor squid ficará disponível
http_port 3128

#nome do servidor
visible_hostname proxy

error_directory /usr/share/squid/errors/Portuguese/

cache_mem 64 MB
maximum_object_size_in_memory 512 KB
maximum_object_size 4000 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 10000 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

#Ajuda dos amigos do Forum Ubuntu (limitar banda por extensão)
delay_pools 2
delay_class 1 1
delay_class 2 2
delay_parameters 1 512000/512000 # 4Mbps
delay_parameters 2 512000/512000 6250/64000 # 4Mbps de agregado, 50K de banda com rajada de 64K.
acl diretoria src "/etc/squid/lista-de-ips-sem-limitacao"
acl horas_livres time MTWHF 14:00-23:00
acl downloads_limitados urlpath_regex .*\.mp3 .*\.avi .*\.zip .*\.exe
delay_access 1 allow diretoria
delay_access 1 allow horas_livres
delay_access 1 deny downloads_limitados
delay_access 1 allow all
delay_access 2 allow all
#Termina aqui.



acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 192.192.1.49/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl bloqueados url_regex -i "/etc/squid/bloqueado"
http_access deny bloqueados

acl redelocal src 192.168.1.0/255.255.255.0
http_access allow localhost
http_access allow redelocal
http_access deny all

Onde Está o erro por gentileza?

zekkerj

Coloque o trecho novo no final do arquivo, ou pelo menos depois de onde a acl "all" está definida.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

ivo_b_jr

Olá, gostaria de informar que fiz o solicitado colocando no final como indicado e funcionou perfeitamente. Agora preciso tirar algumas dúvidas a respeito do funcionamento do cache.

Testei usando dois navegadores configurados com o proxy (IE e Firefox), horário de download 15:10 aprox, site de downloads (Baixaki), arquivos baixados IE9 e Avast Antivírus Free (gosto de testar baixando esse Avast no Baixaki pois sempre tenho resultados de download altos, mostrando na maioria das vezes até 280 Kbs e até mais alto no download), e depois testei tirando os proxy dos navegadores. O resultado foi o seguinte:

Com o proxy, os downloads ficam oscilando, caem para 49, 50 ... e voltam para 160 kbs. Sem o proxy os downloads estabilizam mais, em cerca de 150 Kbs ou mais, eles não oscilam tanto para baixo no download. Percebi que alguns arquivos ficam no cache pois ao fazer download novamente eles são baixados de forma rapida na velocidade de minha rede, mas alguns arquivos maiores como o AVast de 50 Mb fazem novamente o download em velocidade oscilando, ou seja é como se eles não estivessem sendo colocados no cache.

1 - Aí fica minha grande dúvida: Porque alguns downloads de arquivos ex: Exe ficam no cache e as vezes não? alguns momentos ele baixa do squid, outro momento parece estar fazendo download novamente. Isso acontece tambem com videos do Youtube que as vezes ficam no cache e as vezes não.

2 - O código enviado limita o download a aproximadamente 50 kbs. porque ele está subindo a 150, 170 e depois caindo? a linha do script está funcionando ou precisa mudar algo? ou simplemente é assim que funciona, ou seja, ele não estabiliza o download em somente 50 kbs? Ele fica mais baixo, mas não mantem 50.

Se puder me explicar agradeço. obrigado mais uma vez



zekkerj

Se você desabilita os "delay_pools" (comentando o trecho novo), como ficam os downloads?

Esses arquivos que você baixou, qual o tamanho deles? Não ficou claro, mas eu passei a configuração de forma que arquivos de 64K ou menos são baixados em uma só rajada.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

ivo_b_jr

Olá, até o momento fico muito agradecido pelos exclarecimentos, irei testar sim desativando o bloco informado anteriormente no squid, mas pelo que comentou deve sim estar funcionando, os donwloads que baixei são aprox 50 mb e 19 mb.

Bem talvez aqui não seria o local mais adequado para falar sobre o servidor Samba, mas é uma orientação muito simples que preciso e tem a ver com o servidor squid que estou criando pois usaria a mesma maquina para fazer os dois. Veja:

Tenho uma máquina na qual especifiquei a configuração em um dos post desse mesmo topico (hd 320, 2GB de Ram, processador Intel Dual 2.6), achei um tutorial ensinando configurar o samba somente para armazenar arquivos em rede, sem precisar dar permissão, senhas e etc. Como disse outras vezes tenho uma Lanhouse e instalo os jogos online em casa maquina individual, isso me dá um monte de dor de cabeça visto que tenho que ficar atualizando esses jogos em casa maquina. Minha dúvida é a seguinte:

Se eu criar esse servidor SAMBA, com acesso completo, criando uma partição separada para os jogos, eu poderia instalar os games online diretamente nesse servidor numa pasta, ou seja, todas as maquinas iriam puxar os jogos de um só lugar, atualizando um, as demais estações estariam atualizadas visto que todas puxariam do mesmo local. Bem na teoria minha isso seria muito fácil e ótimo, visto que poderia fazer um backup depois de atualizar um jogo, caso algum erro acontecesse, mas aí vai minha real dúvida: Isso deixaria o acesso muito lento, visto que seriam 25 maquinas puxando o mesmo jogo de um local só?, o que vc recomendaria?

zekkerj

CitarComo disse outras vezes tenho uma Lanhouse e instalo os jogos online em casa maquina individual, isso me dá um monte de dor de cabeça visto que tenho que ficar atualizando esses jogos em casa maquina.
As máquinas são iguais? Crie uma imagem da instalação padrão, já com os jogos...
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D