Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Cotas por usuário/tempo no SquidGuard

    Scheduled Pinned Locked Moved Portuguese
    25 Posts 3 Posters 4.8k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User
      last edited by

      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).

      1 Reply Last reply Reply Quote 0
      • L
        LFCavalcanti
        last edited by

        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.

        –

        Luiz Fernando Cavalcanti
        IT Manager
        Arriviera Technology Group

        1 Reply Last reply Reply Quote 0
        • ?
          A Former User
          last edited by

          @LFCavalcanti:

          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?

          1 Reply Last reply Reply Quote 0
          • marcellocM
            marcelloc
            last edited by

            @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.

            Treinamentos de Elite: http://sys-squad.com

            Help a community developer! ;D

            1 Reply Last reply Reply Quote 0
            • L
              LFCavalcanti
              last edited by

              @marcelloc:

              @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".

              –

              Luiz Fernando Cavalcanti
              IT Manager
              Arriviera Technology Group

              1 Reply Last reply Reply Quote 0
              • ?
                A Former User
                last edited by

                @LFCavalcanti:

                @marcelloc:

                @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?

                1 Reply Last reply Reply Quote 0
                • marcellocM
                  marcelloc
                  last edited by

                  @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.

                  Treinamentos de Elite: http://sys-squad.com

                  Help a community developer! ;D

                  1 Reply Last reply Reply Quote 0
                  • ?
                    A Former User
                    last edited by

                    @marcelloc:

                    @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

                    1 Reply Last reply Reply Quote 0
                    • marcellocM
                      marcelloc
                      last edited by

                      @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.

                      Treinamentos de Elite: http://sys-squad.com

                      Help a community developer! ;D

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User
                        last edited by

                        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=334779809883543

                        vi 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!

                        1 Reply Last reply Reply Quote 0
                        • marcellocM
                          marcelloc
                          last edited by

                          Pode seguir qualquer tutorial de time quota e colocar as configurações em custom_acl.

                          Treinamentos de Elite: http://sys-squad.com

                          Help a community developer! ;D

                          1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User
                            last edited by

                            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.

                            1 Reply Last reply Reply Quote 0
                            • marcellocM
                              marcelloc
                              last edited by

                              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 
                              

                              Treinamentos de Elite: http://sys-squad.com

                              Help a community developer! ;D

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User
                                last edited by

                                @marcelloc:

                                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?

                                1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User
                                  last edited by

                                  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 log

                                  o 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>

                                  1 Reply Last reply Reply Quote 0
                                  • ?
                                    A Former User
                                    last edited by

                                    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….

                                    1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User
                                      last edited by

                                      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 ?

                                      1 Reply Last reply Reply Quote 0
                                      • marcellocM
                                        marcelloc
                                        last edited by

                                        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.  :)

                                        Treinamentos de Elite: http://sys-squad.com

                                        Help a community developer! ;D

                                        1 Reply Last reply Reply Quote 0
                                        • ?
                                          A Former User
                                          last edited by

                                          @marcelloc:

                                          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]
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • marcellocM
                                            marcelloc
                                            last edited by

                                            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.

                                            Treinamentos de Elite: http://sys-squad.com

                                            Help a community developer! ;D

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.