Controle de banda no Squid por usuário [RESOLVIDO]

1. Controle de banda no Squid por usuário [RESOLVIDO]

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 07/06/2010 - 17:52h

Olá Galera,

Estou tentando implementar um controle de banda no squid através de delay_pools, no entanto, gostaria que houvesse umas exceções por usuário. Todas as dicas na internet, o pessoal só sabe usar até o tipo de delay_class 3, porém a documentação fala sobre o tipo 4 e 5, que utiliza autenticação e acl externa, respectivamente..
Não consegui encontrar nenhum exemplo, nem mesmo na documentação, sobre a utilização dessas classes de delay_pools.

A minha necessidade é fazer um controle de downloads para todos, exceto por alguns usuários informados em uma lista.

Se alguém souber de alguma dica. Ficarei grato. Abraço


  


2. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 07/06/2010 - 20:58h

Uai, pra fazer isso não precisa da classe tipo 4 e 5. Basta vc colocar isso d uma forma no squid q a lista desejada fique liberada (sem delay pools) e o restante com o download limitado. Coloque o seu squid.conf pra t mostrar melhor.


3. squid.conf

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 08/06/2010 - 00:38h

Olá Renato,

Esqueci de mencionar um detalhe.. Estou usando Squid+Dansguardian
Os usuários são liberados de filtros no proxy através do dansguardian, que na realidade é quem faz todo o meu controle de conteúdo. Não implemento praticamente nada no squid.conf, apenas a autenticação em banco mysql.
Agora com essa minha necessidade, gostaria de continuar com a minha integração, sem repetir informação, ou seja, quero usar a lista de usuários liberados do dansguardian para dizer quem não pegará o controle da delay_pools. Explicando melhor: O dansguardian tem um arquivo filtergrouplist, onde eu coloco o nome do usuário, e o filtro a qual esse usuário pertence, ex: esdras=filtro1. Daí a intenção de usar ACL externa, pois utilizo um script que testa o usuário autenticado no squid, trata de limpar e pegar somente o "campo" do usuário neste arquivo do dansguardian e imprimir OK/ERR se o usuário estiver listado:

server:/etc/squid3# /usr/lib/squid3/user_free.sh
esdras
OK
fulano
ERR

Segundo o que li na documentação do Squid, para usar delay_pools neste caso, teria que usar a delay_class tipo 5, que é quem trata de acl externa, porém, não encontrei exemplos. Já tentei inventar de tudo pra fazer isso funcionar, e desisti.

Se você souber de uma forma mais simples de fazer isso, seria uma ótima ajuda.

Obrigado por responder.

Segue meu squid.conf .....

##############################################################

auth_param basic program /usr/lib/squid3/mysqlt_auth
auth_param basic children 15
auth_param basic realm Internet Restrita
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl auth_users proxy_auth REQUIRED
external_acl_type user_free %LOGIN /usr/lib/squid3/user_free.sh
acl usuario_livre external user_free
acl extensoes url_regex -i ftp .exe$ .mp3$ .wav$ .mpeg$ .flv$ .mov$ .zip$ .rar$ .mp4$ .3gp$ .rmvb$ .iso$
.mpg$ .avi$ .wmv$ .nrg$

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

delay_pools 1

#delay_class 1 5
#delay_parameters 1 -1/-1 -1/-1
#delay_access 1 allow usuario_livre

delay_class 1 2
delay_parameters 1 -1/-1 500/5000
delay_access 1 allow extensoes

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

http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?

cache_mem 1536 MB
maximum_object_size_in_memory 80 KB
cache_dir ufs /var/spool/squid1 3000 16 256
cache_dir ufs /var/spool/squid2 3000 16 256
cache_dir ufs /var/spool/squid3 3000 16 256
cache_dir ufs /var/spool/squid4 3000 16 256
cache_dir ufs /var/spool/squid5 3000 16 256
cache_dir ufs /var/spool/squid6 3000 16 256
cache_dir ufs /var/spool/squid7 3000 16 256
cache_dir ufs /var/spool/squid8 3000 16 256
cache_swap_low 95
cache_swap_high 98
access_log /var/log/squid3/access.log squid

refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

pconn_timeout 120 seconds
icp_port 3130
error_directory /usr/share/squid3/errors/Portuguese
coredump_dir /var/spool/squid3
visible_hostname Proxy



4. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/06/2010 - 08:46h

Pegadinha do Malandro? Pow, c nem avisou q tinha dansguardian! Hehehehe! Neste caso eu até queria saber tb como fazer, pq a gente tá querendo fazer isso tb aki no nosso trampo. O dansguardian é fera...


5. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 08/06/2010 - 09:54h

Então.. é isso =(
Vamos trocar umas figurinhas pra descobrir uma maneira.

Segundo definições na documentação, analise sobre delay_class e como setar o delay_parameters das classes nos links:

delay_class = http://www.squid-cache.org/Versions/v3/3.0/cfgman/delay_class.html
delay_parameters = http://www.squid-cache.org/Versions/v3/3.0/cfgman/delay_parameters.html

Repare que na página de delay_parameters, ele só mostra exemplo até a class 4. Aí fica difícil adivinhar como fazer com a 5. Veja o que você consegue interpretar.



6. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/06/2010 - 10:00h

Ok... vou ler enquanto eu estiver almoçando. Depois t passo o q eu entendi.


7. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/06/2010 - 14:43h

Pelo q entendi é o seguinte: existem 3 parâmetros pra definir o delay_pools:

- delay_pools;
- delay_class;
- delay_parameters.

O delay_pools é a quantidade d delay_pools q vc vai colocar. Se tiver um d classe 2 e um d classe 3, o número será 2. Ex.: delay_pools 2
O delay_class é a classificação q vc vai determinar o seu delay. As determinações estão naquele link q vc me passou. Ex.: delay_class 1 3. Isso significa q o pool nº 1 tem classe 3.
O delay_parameters é o principal deles, pois é com ele q vc vai implementar as regras. Segundo o manual do squid (http://www.squid-cache.org/Versions/v3/3.0/cfgman/delay_parameters.html), para cada classe existe uma forma d implementar os requisitos. Veja:

Para a classe 1:

delay_parameters pool aggregate

Para a classe 2:

delay_parameters pool aggregate individual

Para a classe 3:

delay_parameters pool aggregate network individual

Para a classe 4:

delay_parameters pool aggregate network individual user

Para a classe 5:

delay_parameters pool tag

E o significado d cada um:

pool um número pool - ex.: um número entre 1 e o número especificado
no delay_pools usado como nas linhas do delay_class.

aggregate o "delay parameters" para o espaço agregado
(classes 1, 2, 3).

individual o "delay parameters" para o espaço individual (class 2, 3).

network o "delay parameters" para o espaço de rede
(classe 3).

user o "delay parameters" para o espaço usuário
(classe 4).

tag o "delay parameters" para o espaço etiqueta
(classe 5).

Cada item desse deve t o formato restore/maximum. O restore é a velocidade e o maximum é a velocidade máxima (em bytes). Tem alguns exemplos no manual. Veja:

Para classe 1 - delay_parameters 1 -1/-1 8000/8000
Note q o -1 é ilimitado.

Lá tem mais alguns exemplos. D uma olhada e depois me fala.




8. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 08/06/2010 - 15:18h

Isso.. foi tudo que entendi também.

Não estou com dúvidas sobre como usar os parametros de delay, o problema é que não encontro exemplo de como usar a classe 5, que é a classe que aceita acl externa. Na classe 4, ele pega o usuário autenticado e atribui a delay_parameters configurada.

Com os exemplos citados na documentação, deveriamos ter algo como:

# nosso número de delays, no caso 1 somente pra testar uma
delay_pools 1

# a delay 1 é do tipo 5
delay_class 1 5

# Comportamento da delay_pool 1
delay_parameters 1 -1/-1 -1/-1 -1/-1 -1/-1 # Esse é um exemplo de config para classe 4, onde o último "-1/-1" significa que o usuário autenticado, não teria limites de banda. segundo seu padrão "delay_parameters pool aggregate network individual user"

# Vinculando a delay_pool 1 para ACL usuario_livre (que é uma acl externa)
delay_access 1 allow usuario_livre

A pergunta é: O que é esse padrão da classe 5 "delay_parameters pool tag"

Ficaria algo como: delay_parameters 1 [?tag?]

Já fiz vários testes, e definitivamente essa "tag", não é algo como -1/-1 ou 8000/8000, indicando os bytes a trafegar.

Já não tenho mais certeza, se esse é o caminho para a solução desejada.



9. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/06/2010 - 15:28h

A tag acredito q seja um nome (ou apelido, sei lá). Vou tentar pesquisar algum exemplo...


10. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 08/06/2010 - 15:50h

Kra, acho q descobri (lendo os manuais). Vá em delay_class. Ele fala sobre a classe 5 e disse pra v como funciona a tag d acordo com o parâmetro external_acl_type, ou seja, colocar a tag da msm forma q se coloca o external_acl_type. Esse helper (programa externo) só confere se o usuário existe, dando OK ou ERR. Teste e depois me fala.


11. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 08/06/2010 - 16:50h

Já tentei colocar de vários modos a sintaxe da acl externa, mais só retorna o erro abaixo. Também não vejo muita lógica nisso, o delay_parameters precisa de algum argumento que identifique como vai tratar a velocidade de transferência..

######################################################
server:/etc/squid3# squid3 -k reconfigure
FATAL: Bungled squid.conf line 41: delay_parameters 1 external_acl_type user_free %LOGIN /usr/lib/squid3/user_free.sh
Squid Cache (Version 3.0.STABLE8): Terminated abnormally.
CPU Usage: 0.008 seconds = 0.000 user + 0.008 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
######################################################

Vou testar outras coisas que me passaram na cabeça agora, depois posto os resultados.





12. Re: Controle de banda no Squid por usuário [RESOLVIDO]

Esdras La-Roque
esdras_laroque

(usa Debian)

Enviado em 09/06/2010 - 15:59h

Então.. resolvi o problema sem usar acl externa nem class 4 ou 5..
Fiz muitos³ teste com a acl externa, e cheguei a minha conclusão de que ela não funciona com delay_access.. testei a mesma acl externa para http_access e funcionou perfeitamente.

A solução foi a seguinte:

Criei uma acl de proxy_auth diferente da padrão e apontei um arquivo que lista os usuários:
acl auth_masters proxy_auth "/etc/squid3/usuario_livre"

Criei um delay_parameters sem limites com classe 2 e atribuí ele para a acl auth_masters:
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow auth_masters
delay_access 1 deny all

E; Por último, para não ficar editando 2 arquivos para liberar o usuário no squid e no dansguardian, criei um shellzinho que lista os usuários livres do dansguardian, limpa a saída para ficar no formato que o squid precisa e cria a lista /etc/squid3/usuario_livre. Esse script é chamado toda vez que o dansguardian faz reload, force-reload, restart e start, colocando para executar no script de inicialização do serviço dansguardian (/etc/init.d/dansguardian). Assim, toda vez que o arquivo de usuários liberados do dansguardian for editado e o serviço reinicializado para levantar as novas configurações, ele automagicamente recria a lista com os devidos usuários para o squid.

Enfim.. não ficou em apenas uma lista como eu queria, mas ficou funcionando do jeito que eu preciso.

Vou criar um artigo sobre isso para compartilhar o conhecimento. Obrigado pela ajuda.

Abraço



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts