Cotas por usuário/tempo no SquidGuard
-
Olá a todos.
Preciso fazer liberações de acessos a sites de forma mais dinâmica, do tipo: usuário X tem direito a 20 minutos de navegação em sites da categoria Y por dia.Eu tenho feito pesquisas mas não achei nada que eu pudesse aplicar nesse sentido (até que achei uma mail list sobre isso, mas parece que ainda está em desenvolvimento).
Antes do pfSense a empresa estava testando o WinConnection, que tem esse recurso facilmente implementado!Há alguma solução para esse demanda atualmente?
Obs.: Definir tempo de liberação (tipo: das 10h às 14h) não atende. Tem que ser no esquema das cotas mesmo (a qualquer hora do dia, N minutos de acesso. Venceu o tempo estimado (N), acabou o acesso).
-
Olá!
Eu realmente desconheço este recurso no PFSense, mesmo no Winconnection não sei se o funcionamento é confiavel, pois medir a utilização de um site sem ter uma aplicação local instalada é complicado, já que o tempo transmitindo informações entre o computador e o servidor do Facebook por exemplo não condiz exatamente com o tempo que o usuário passou com a página aberta na tela do computador.
-
Olá!
Eu realmente desconheço este recurso no PFSense, mesmo no Winconnection não sei se o funcionamento é confiavel, pois medir a utilização de um site sem ter uma aplicação local instalada é complicado, já que o tempo transmitindo informações entre o computador e o servidor do Facebook por exemplo não condiz exatamente com o tempo que o usuário passou com a página aberta na tela do computador.
Pois é. Contudo esse recurso do winconnection funcionava!
Eu estava vendo essa mail list: http://marc.info/?t=98959352700008&r=1&w=2, só que é de 2001. Não sei se isso foi pra frente..!
Mas vejamos. Se o Sarg consegue trazer relatórios do tempo de conexão a cada site através dos logs do Squid, creio que seja possível fazer algo do tipo para bloqueios por ACL do SquidGuard!
O recurso de cotas seria uma aquisição muito interessante para o pacote!Ví um link também (http://www.ipcop.org/2.0.0/en/admin/html/services-urlfilter.html) que o IPCop tem um recurso desse! Não seria possível portá-lo para o pfSense?
-
@UnDr3aD:
Mas vejamos. Se o Sarg consegue trazer relatórios do tempo de conexão a cada site através dos logs do Squid, creio que seja possível fazer algo do tipo para bloqueios por ACL do SquidGuard!
O tempo que aparece no sarg é o tempo de download da página. Essa informação não bate com o tempo que o usuário ficou lendo/olhando a página.
-
@UnDr3aD:
Mas vejamos. Se o Sarg consegue trazer relatórios do tempo de conexão a cada site através dos logs do Squid, creio que seja possível fazer algo do tipo para bloqueios por ACL do SquidGuard!
O tempo que aparece no sarg é o tempo de download da página. Essa informação não bate com o tempo que o usuário ficou lendo/olhando a página.
É exatamente esse o ponto da questão. Eu usei o IPCop por quase 4 anos e digo com segurança que a medida de cota dele não é precisa, justamente por causa disso. O usuário tem um tempo de download definido, mas ele pode muito bem ficar com uma página aberta lendo algum texto por horas sem fazer download de nada, ou seja, continua "ocioso".
-
@UnDr3aD:
Mas vejamos. Se o Sarg consegue trazer relatórios do tempo de conexão a cada site através dos logs do Squid, creio que seja possível fazer algo do tipo para bloqueios por ACL do SquidGuard!
O tempo que aparece no sarg é o tempo de download da página. Essa informação não bate com o tempo que o usuário ficou lendo/olhando a página.
É exatamente esse o ponto da questão. Eu usei o IPCop por quase 4 anos e digo com segurança que a medida de cota dele não é precisa, justamente por causa disso. O usuário tem um tempo de download definido, mas ele pode muito bem ficar com uma página aberta lendo algum texto por horas sem fazer download de nada, ou seja, continua "ocioso".
Mesmo assim acho que isso seria interessante!
De acordo com essas informações a cota de tempo seria algo difícil de implementar, contudo essas informações também dão a entender que seria possível fazer cotas de tráfego. Tipo, usuário pode usar apenas 3Mb de tal categoria durante o período de 24hrs…! Seria uma boa também!
Então... nota-se que não há nada do tipo para o pfSense agora! Mas saberiam se há algum projeto para algo do tipo? Ou é questão de deixar quieto/desistir mesmo?
-
@UnDr3aD:
De acordo com essas informações a cota de tempo seria algo difícil de implementar, contudo essas informações também dão a entender que seria possível fazer cotas de tráfego. Tipo, usuário pode usar apenas 3Mb de tal categoria durante o período de 24hrs…! Seria uma boa também!
Então... nota-se que não há nada do tipo para o pfSense agora! Mas saberiam se há algum projeto para algo do tipo? Ou é questão de deixar quieto/desistir mesmo?
O captive portal tem suas opções, mas cota por categoria no squid/squidguard ainda não.
Uma acl pode ser o caminho, mas nada em desenvolvimento ainda.
-
@UnDr3aD:
De acordo com essas informações a cota de tempo seria algo difícil de implementar, contudo essas informações também dão a entender que seria possível fazer cotas de tráfego. Tipo, usuário pode usar apenas 3Mb de tal categoria durante o período de 24hrs…! Seria uma boa também!
Então... nota-se que não há nada do tipo para o pfSense agora! Mas saberiam se há algum projeto para algo do tipo? Ou é questão de deixar quieto/desistir mesmo?
O captive portal tem suas opções, mas cota por categoria no squid/squidguard ainda não.
Uma acl pode ser o caminho, mas nada em desenvolvimento ainda.
Vixi, que triste! T_T
Fazer o que né! Só esperar então!
vlw -
@UnDr3aD:
Fazer o que né! Só esperar então!
Esperar é só uma das opções e no meu ponto de vista a menos interessante.
O projeto é opensource. Você pode ajudar no desenvolvimento, seja codificando ou contribuindo financeiramente.
-
continuei as pesquisas e encontrei esses links:
http://www.squid-cache.org/mail-archive/squid-dev/201104/0009.html
https://www.facebook.com/permalink.php?story_fbid=319971538051822&id=334779809883543vi também que o squid3-dev tem o time_quota compilado nele.
alguém com mais experiência e sabedoria no assunto(lê-se squid)poderia dar um help pra saber a melhor forma de configurar isso no pfSense?só pra constar, estou usando o squid autenticado no AD e gostaria de mantê-lo assim!
-
Pode seguir qualquer tutorial de time quota e colocar as configurações em custom_acl.
-
mas você saberia como eu faço pra aplicar um cota pra determinada acl?
tipo, faço uma acl com sites que eu quero liberar e coloca a quota nela. -
Não tem um exemplo no próprio documento que você postou?
CONFIGURATION This helper is also configured in squid.conf where you first declare the helper, then define a ACL which then decides when to allow or deny. Enter the following text after the user authentication. # # Define program and quota file # external_acl_type time_quota ttl=60 children-max=1 %LOGIN /usr/libexec/ext_time_quota_acl -b /var/run/squid/time_quota.db /etc/squid/time_quota # # Define ACL for time_quota helper # acl time_quota external time_quota # # Deny access if quota exceeded # http_access deny !time_quota # # If quota exceeds, tell user # deny_info TIME_QUOTA_EXCEEDED time_quota
-
Não tem um exemplo no próprio documento que você postou?
CONFIGURATION This helper is also configured in squid.conf where you first declare the helper, then define a ACL which then decides when to allow or deny. Enter the following text after the user authentication. # # Define program and quota file # external_acl_type time_quota ttl=60 children-max=1 %LOGIN /usr/libexec/ext_time_quota_acl -b /var/run/squid/time_quota.db /etc/squid/time_quota # # Define ACL for time_quota helper # acl time_quota external time_quota # # Deny access if quota exceeded # http_access deny !time_quota # # If quota exceeds, tell user # deny_info TIME_QUOTA_EXCEEDED time_quota
sou muito noob ainda! não conheço bem os esquemas do squid!
já consegui fazer funcionar, mas não da forma que eu preciso.
quero permitir o acesso a determinados sites (tipo facebook, twitter) por um tempo a escolha do usuário (time_quota ;D), contudo ele está contando geral para o tempo de quota!
como faço para especificar os destinos que eu quero fazer a cota? -
depois de pesquisas e testes consegui fazer o time_quota funcionar ok.
a primeira coisa que tive que fazer foi mudar a posição do custom options no squid.inc. Isso porque uso o custom option para configurar o time_quota e ele precisa ficar depois das declarações de autenticação do proxy. No local padrão onde o custom options fica, o time_quota sempre dará erro.
coloquei o custom options depois das declarações de configuração para autenticação externa e antes da declaração de bloqueio de tudo. veja o trecho:// Onto the ACLs $password = array('localnet', 'allowed_subnets'); $passwordless = array('unrestricted_hosts'); if ($settings['unrestricted_auth'] == 'on') { // Even the unrestricted hosts should authenticate $password = array_merge($password, $passwordless); $passwordless = array(); } $passwordless[] = 'noauth'; $password = array_filter($password, 'squid_is_valid_acl'); $passwordless = array_filter($passwordless, 'squid_is_valid_acl'); // Allow the ACLs that don't need to authenticate foreach ($passwordless as $acl) $conf .= "http_access allow $acl\n"; if ($auth_method != 'cp'){ // Include squidguard denied acl log in squid if ($settingsconfig['log_sqd']) $conf .="http_access deny password sglog\n"; // Allow the other ACLs as long as they authenticate foreach ($password as $acl) $conf .= "http_access allow password $acl\n"; } } // Custom User Options $conf .= "\n# Custom options\n".sq_text_area_decode($settingsconfig['custom_options_squid3'])."\n\n"; $conf .= "# Default block all to be sure\n"; $conf .= "http_access deny allsrc\n";
O custom option deve estar imediatamente antes do http_access deny allsrc
após o procedimento acima a configuração do time_quota pode ser feita pelo campo custom options do squid que vai funfar ok!
então entrei com a configuração do time_quota:
# Define program and quota file external_acl_type time_quota ttl=60 children-max=1 %LOGIN /usr/pbi/squid-amd64/libexec/squid/ext_time_quota_acl -b /var/squid/time_quota.db -p 90 -d -l /var/squid/time_quota.log /var/squid/acl/time_quota # # Define ACL for time_quota helper acl time_quota external time_quota acl dom_blk_quota url_regex -i facebook # # If quota exceeds, tell user #deny_info ERR_ACL_TIME_QUOTA_EXCEEDED time_quota deny_info CUSTOM_ERR_TIME_QUOTA time_quota # # Deny access if quota exceeded http_reply_access deny dom_blk_quota !time_quota
a primeira parte da configuração é a mais importante. tem que colocar os caminhos certinhos para as configurações e arquivos:
# Define program and quota file external_acl_type time_quota ttl=60 children-max=1 %LOGIN /usr/pbi/squid-amd64/libexec/squid/ext_time_quota_acl -b /var/squid/time_quota.db -p 90 -d -l /var/squid/time_quota.log /var/squid/acl/time_quota
os caminhos estão configurados para o padrão do pfsense 2.1.
a opção -b especifica o caminho do banco de dados que o time_quota vai gerar.
a opção -p especifica o tempo da pausa (se o usuário fizer uma requisição para um site e antes do tempo definido para a pausa fizer outra requisição, o tempo entre as requisições será subtraindo do tempo de cota! caso a nova requisição seja feita em um tempo superior ao definido na quota, será identificado uma pausa e o tempo começará a contar a partir dessa nova requisição)
a opção -d é para debug (recomendado, pois o log apenas não traz todas as informações)
a opção -l é o logo arquivo /var/squid/acl/time_quota, é onde são feitas as configurações.
andre.martins 30m / 1d suporte 20m / 1d
o padrão é: <usuário><cota><periodo>mais adiante na configuração criei uma acl para apontar os destinos que devem ser usados na quota:
acl dom_blk_quota url_regex -i facebook
nesse exemplo é só facebook
agora a regra para bloquear:
http_reply_access deny dom_blk_quota !time_quota
isso vai bloquear todas as requisiçoes para os sites definidos (acl bom_blk_quota) desde que a quota tenha se excedido (!time_quota)
é importante dizer que o bloqueio deve ser feito com o http_reply_access deny, pois se for somente com o http_access deny o navegador vai ficar spammando o prompt de autenticação a cada requisição.o linha deny_info CUSTOM_ERR_TIME_QUOTA time_quota define a pagina de erro para quando a quota se esgotar. nesse caso fiz uma, mas no squid já tem uma padrão!
é bom dizer também que, caso tenha feito uma cota para um usuário e queira tirar essa cota, não basta tirar o nome do usuário do arquivo de configuração (/var/squid/acl/time_quota), tem que apagar o banco de dados (/var/squid/time_quota.db).
toda vez que o squid for reiniciado ou alguma configuração for salva a cota zera, ou seja, começa a contar de novo.
o time_quota também não vai pegar https, a não ser que o squid esteja usando ssl.
o time_quota conta o tempo mesmo se o site requisitado estiver bloqueado! por exemplo: o facebook está bloqueado no squidguard. por mais que o usuário não acesse o site a requisição é identificada pelo time_quota! caso haja várias requisições antes do tempo de pausa, o time_quota vai acabar subtraindo todo esse tempo da cota!
caso tenha algum ip configurado para não autenticar é necessário mudar a linha http_reply_access deny dom_blk_quota !time_quota para http_reply_access !noauth deny dom_blk_quota !time_quota. Caso não faça isso o time_quota vai ficar dando erro de tempo esgotado.
isso foi o que eu consegui até agora.</periodo></cota></usuário>
-
essa configuração que fiz funciona deixando o site liberado até que a quota bloqueie.
não consegui fazer o contrário, bloquear o site e liberar durante o tempo de quota.
gostaria de fazer essa segunda opção funcionar, pois garantiria que ninguém acessaria o site a não ser que fosse configurado cota pra ele. no entanto, do jeito que está (primeira opção) todo mundo acessa os sites a não ser tenha cota configurada pra o usuário e expirada!
se alguém puder ajudar nisso agradeço muito!uma outra opção que acho legal seria bloquear uma categoria do squid por exemplo. se alguém puder dar uma dica de como fazer isso….
-
então pessoal, quero pedir que me ajudem nisso.
o time_quota funciona legal, entretanto ele diverge das regras do squidguard.
por exemplo: quero que alguns usuário tenham cota para usar o facebook… então, no squidguardo o facebook está liberado mas a quota bloqueia o facebook assim que for excedido o tempo limite daqueles usuários. o problema disso é que os usuários que eu não especificar no time_quota ficarão com acesso irrestrito ao facebook!
quero poder bloquear o facebook no squidguard e liberar o acesso enquanto houver tempo de quota. assim somente usarão o facebook os usuário especificados na quota e somente durante o tempo da quota!!!alguma idéia de como fazer o squidguard respeitar o time_quota ?
-
Use como base o tutorial para unificar o log do squidguard no squid.
assim você consegue chegar no seu objetivo com poucas alterações.
Não esquece de compartilhar o resultado. :)
-
Use como base o tutorial para unificar o log do squidguard no squid.
assim você consegue chegar no seu objetivo com poucas alterações.
Não esquece de compartilhar o resultado. :)
marcelloc, você deve estar falando do código a ser adicionado no arquivo sgerror.php certo?
$sge_prefix=(preg_match("/\?/",$cl['u'])?"&":"?"); $str[] = '< iframe > src="'.$cl['u'].$sge_prefix.'sgr=ACCESSDENIED" width="1" height="1" > < /iframe >';
entretanto eu estou usando uma página de erro personalizada:
$ip = addslashes($_GET[ip]); $uid = addslashes($_GET[uid]); $group = addslashes($_GET[group]); $target = addslashes($_GET[target]); $url = addslashes($_GET[url]); ?> <title>Acesso Negado!</title> ![](./ntu_logo.gif) # Acesso Negado! * * * IP: " . $ip . " ";} ?> Nome: " . $uid . " ";} ?> Grupo: " . $group . " ";} ?> Regra: ". $target . " ";} ?> URL: " . $url;} ?> * * * Seu acesso foi bloqueado por uma regra do proxy! Entre em contato com o [administrador da rede](mailto:xxxxxx) caso precise de mais informações! #### Isso é um erro? Limpe o cache do navegador!!!! eu continuo colocando o código no sgerror.php ou na minha página? obs.:essa página que eu fiz está sendo usada no squidguard (redirect mode:ext url found; redirect info:http://192.168.0.50/ntu.php?ip=%a&uid=%i&group=%s&target=%t&url=%u)[/url]
-
A idéia da alteração é fazer o squidguard incluir uma informação na url de tal forma que o squid seja capaz de identificar o "retorno". Neste caso usamos o sgr=ACCESSDENIED para acionar uma acl de bloqueio do squid.
Altere o código que o squidguard adiciona e faça a sua acl de tempo interpretar isso.