[RESOLVIDO] ACL noauth do Squid



  • olá galera, tenho um pfSense 2.1.2 com squid3-dev e squidguard-squid3.
    já a algum tempo (mesmo na versão anterior) percebi que a acl noauth não tem funcionado corretamente quando configurada com mais de uma subnet.

    verifiquei o squid.conf e está da seguinte forma:

    
    # Always allow access to whitelist domains
    http_access allow whitelist
    acl sglog url_regex -i sgr=ACCESSDENIED
    acl noauth src 192.168.0.xxx/32
     192.168.0.xxx/32
     192.168.0.xxx/32
    auth_param basic program ...
    
    

    creio que o problema seja a quebra de linha. se for esse o caso, a configuração deveria ficar da seguinte forma:

    
    # Always allow access to whitelist domains
    http_access allow whitelist
    acl sglog url_regex -i sgr=ACCESSDENIED
    acl noauth src 192.168.0.xxx/32 192.168.0.xxx/32 192.168.0.xxx/32
    auth_param basic program ...
    
    

    Dei uma olhada no squid.inc e está assim:

    
    		$noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
    		if (!empty($noauth)) {
    			$conf .= "acl noauth src $noauth\n";
    			$valid_acls[] = 'noauth';
    		}
    
    

    nota-se que houve a preocupação de se retirar a quebra de linha, entretanto, na prática parece não ter funcionado muito bem.

    alguém teria alguma dica pra resolver esse problema?



  • Altere a linha

    $noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
    

    por esta

    $noauth = preg_replace("/\s+/"," ", base64_decode($settings['no_auth_hosts']));
    

    em forma de patch para melhor entendimento

    --- squid.inc   2014-04-23 01:13:21.000000000 -0300
    +++ /root/squid.inc     2014-04-23 01:21:32.000000000 -0300
    @@ -1721,7 +1721,7 @@
                            $conf .= "http_access allow $acl\n";
            }
            else {
    -               $noauth = preg_replace("/\s+/"," ", base64_decode($settings['no_auth_hosts']));
    +               $noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
                    if (!empty($noauth)) {
                            $conf .= "acl noauth src $noauth\n";
                            $valid_acls[] = 'noauth';
    
    


  • simplesmente espetacular, marcelloc!
    funcionou perfeitamente:

    squid.inc

    
                    $noauth = preg_replace("/\s+/"," ", base64_decode($settings['no_auth_hosts']));
    		//$noauth = implode(' ', explode("\n", base64_decode($settings['no_auth_hosts'])));
    		if (!empty($noauth)) {
    			$conf .= "acl noauth src $noauth\n";
    			$valid_acls[] = 'noauth';
    
    

    squid.conf

    
    http_access allow whitelist
    acl sglog url_regex -i sgr=ACCESSDENIED
    acl noauth src 192.168.0.xxx/32 192.168.0.xxx/32 192.168.0.xxx/32
    auth_param basic ...
    
    

    entretanto tenho mais uma questão (não diretamente relacionada a esse caso):
    nas ACLs do squidguard tenho declarados os logins dos usuários e, agora, estou tentando declarar também os ips dos que não forem autenticar, nessa mesma ACL. Entretanto ao acessar sem autenticação, os bloqueios aplicados são os da regra padrão, e não da ACL que eu configurara anteriormente.
    Há alguma limitação em relação a tipos diferentes de origem de bloqueio na mesma ACL?

    abaixo os clientes (source) declarados na interface da ACL do squidguard:

    
    192.168.0.xxx 'fulano.silva' 'ciclano.santos' 'beltrano.souza'
    
    


  • Melhor abrir um novo tópico para isso.
    Não uso squidguard.  Veja se a documentação dele esclarece este ponto.



  • ok. vlw marcelloc.