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

      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
                      • ?
                        A Former User
                        last edited by

                        notei o seguinte:
                        minha regra atual é:

                        
                        http_reply_access deny time_quota_blk_dom !time_quota
                        
                        

                        desse jeito funciona normal. bloqueia os domínios quando a cota acaba.

                        então tentei bloqueei o facebook no squidguard e mudei a regra para:

                        
                        http_access allow time_quota_blk_dom time_quota
                        
                        

                        então fui olhar no debug do time quota e notei que ele não mais identificou as requisições. fica somente aguardando e nada!

                        mesmo que eu deixe o facebook bloqueado no squidguard, usando a primeira regra o time_quota funciona normal!
                        alguma ideia da causa desse comportamento?

                        @marcelloc:

                        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.

                        certo. já que eu tenho uma url externa para a página de erro e passo os parâmetros pelo GET (url), então não seria mais fácil eu simplesmente adicionar o sgr=ACCESSDENIED nos parâmetros passados? tipo redirect info:http://192.168.0.50/ntu.php?ip=%a&uid=%i&group=%s&target=%t&url=%u&sgr=ACCESSDENIED

                        como uso o squid3-dev eu só marquei a opção Log denied pages by squidguard

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

                          @UnDr3aD:

                          então não seria mais fácil eu simplesmente adicionar o sgr=ACCESSDENIED nos parâmetros passados? tipo redirect info:http://192.168.0.50/ntu.php?ip=%a&uid=%i&group=%s&target=%t&url=%u&sgr=ACCESSDENIED

                          É exatamente isso que estou dizendo. coloque informações no squidguard(via redirect ou sgerror) para conseguir acertar uma acl no squid.

                          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

                            fiz o que você falou marcelloc. ele até que funciona, mas nem sempre!
                            pequei aquele codigo php e modifiquei pra colocar na minha pagina personalizada… a mesma coisa! funciona, mas nem sempre! não sei porque!

                            mas marcelloc, isso realmente vai ter efeito sobre o time_quota e squidguard?
                            porque pela que tenho observado, acho que o problema é que o squidguard e o time_quota não tem nenhum tipo de "integração".
                            se eu bloqueio pelo squidguard, mesmo assim o time_quota conta a requisição. e independente da cota existente o squidguard sempre bloqueia!!!!
                            já tentei mudar a posição das declarações no arquivo de configuração (.inc) mas mesmo assim o squidguard continua bloqueando, mesmo que o time_quota esteja liberando.

                            e também tem a observação que fiz anteriormente:
                            @UnDr3aD:

                            notei o seguinte:
                            minha regra atual é:

                            
                            http_reply_access deny time_quota_blk_dom !time_quota
                            
                            

                            desse jeito funciona normal. bloqueia os domínios quando a cota acaba.

                            então tentei bloqueei o facebook no squidguard e mudei a regra para:

                            
                            http_access allow time_quota_blk_dom time_quota
                            
                            

                            então fui olhar no debug do time quota e notei que ele não mais identificou as requisições. fica somente aguardando e nada!

                            mesmo que eu deixe o facebook bloqueado no squidguard, usando a primeira regra o time_quota funciona normal!
                            alguma ideia da causa desse comportamento?

                            não estou vendo nenhuma luz no fim do túnel!  :(

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

                              pois bem, sem sucesso até então pra fazer time quota funcionar conjuntamente com o squidguard, "resolvi" meu problema apenas fazendo uma acl liberando os usuários e domínios que estarão na cota. assim o usuário vai ficar com acesso livre ao site até que o time_quota bloqueie.  ;)

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

                                Depois de um bom tempo usando o time_quota sem problemas tive um ligeiro contratempo: a atualização do pacote squid3-dev.
                                Ao atualizar o squid notei que o squid não subia o serviço. Fui iniciar ele via linha de comando e foi apresentado o seguinte erro:

                                
                                [2.1-RELEASE][root@megazord.ntu0]/root(2): squid start
                                2014/01/15 13:34:48| Can't use proxy auth because no authentication schemes are fully configured.
                                FATAL: ERROR: Invalid ACL: acl time_quota external time_quota
                                
                                Squid Cache (Version 3.3.10): Terminated abnormally.
                                CPU Usage: 0.037 seconds = 0.037 user + 0.000 sys
                                Maximum Resident Size: 40448 KB
                                Page faults with physical i/o: 0
                                
                                

                                Deu pra perceber logo que estava havendo algum problema com a acl do time_quota! Logo fui verificar se com a atualização algum caminho para o time_quota havia sido mudado ou se foi retirado do pacote, no entanto estava tudo ok.
                                Fui então ver o arquivo de configuração do squid e notei que a configuração que eu havia feito estava alterada. Na atualização do pacote o arquivo de configuração volta para o padrão (as configurações ficam, mas a posição em que elas estavam voltaram para o padrão).
                                Logo tive que fazer novamente a alteração do arquivo squid.inc e mover a declaração do custom options para exatamente antes da declaração Default block all to be sure, ficando assim:

                                
                                			// Allow the other ACLs as long as they authenticate
                                			foreach ($password as $acl)
                                				$conf .= "http_access allow password $acl\n";
                                			}
                                	}
                                
                                	// Custom User Options
                                	$conf .= "# 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";
                                
                                	return $conf;
                                }
                                
                                

                                Essa configuração eu já tinha feito antes e postado aqui, mas com a atualização do pacote ela se fez necessária novamente
                                @UnDr3aD:

                                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!

                                Mesmo depois de fazer essa alteração o squid não estava querendo subir. Tive que limpar o campo custom options na interface (recortei tudo que tinha lá e colei em um bloco de notas) e salvar a configuração para ele subir. Depois dele funcionando e verificado que as configurações estavam nos lugares corretos eu voltei as configurações existentes no custom options.

                                Está funcionando ok.
                                Pois é, essa foi mais uma experiência que tive com o time_quota. Espero que ajude a comunidade.

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