Registrar os acessos negados do squidguard no log do squid/sarg



  • Pessoal, recebi uma demanda recente para unificar os logs do squidguard e squid e para nossa alegria :) recebi autorização para publicar a alteração.

    Um pouco sobre o problema:
    A forma de integração do squid com o squidguard é via redirect o que, até onde consegui pesquisar, só retorna status em branco quando a página não precisa de alteraçoes ou reescrita ou com uma nova url. Mensagem de erro continuam registradas com TCP_MISS no log porque o squid passa a url com sucesso para o squidguard.

    Depois de várias tentativas, consegui encontrar uma solução simples, prática e funcional para o problema com apenas dois passos:

    • incluir uma acl no squid que bloqueia urls com parametro sgrd=ACCESSDENIED

    • Incluir no sgerror.php um iframe invisível que força o cliente enviar uma segunda requisição da página com o parametro de bloqueio adicionado

    Como aplicar a configuração:

    No campo custom options do squid, inclua a seguinte configuração:
    squid2

    acl sglog url_regex -i .*sgrd=ACCESSDENIED;http_access deny sglog;
    

    squid3

    acl sglog url_regex -i .*sgrd=ACCESSDENIED
    http_access deny sglog
    

    Edite o arquivo sgerror.php que fica em /usr/local/www incluia apos a linha 232 este código entre o $str[] = ""; e $str[] = "";

    
    $sge_prefix=(preg_match("/\?/",$cl['u'])?"&":"?");
    $str[] = '<iframe src="'.$cl['u'].$sge_prefix.'sgrd=ACCESSDENIED" width="1" height="1"></iframe>';
    

    Benefícios com esta configuração:

    Com isso, o relatório do sarg passa a mostrar o que o squidguard bloqueou, mostrando imediatamente após uma tentativa de acesso um log de erro da página.
    No relatório do squid você vê que bloqueou e no relatorio do squidguard você vê o motivo do bloqueio.

    Para ambientes com autenticação:
    A regra de denied precisa ser incluida após a declaração da acl de autenticação

    acl sglog url_regex -i .*sgrd=ACCESSDENIED
    http_access deny password sglog
    

    Vou incluir este procedimento na proxima atualização da gui do squid3, só não sei ainda quando.

    att,
    Marcello Coutinho



  • Valeu marcelo, parabens!!!!



  • parabens marcelo..



  • Muito bom excelente atualização marcelo!



  • Parabéns marcello.
    Galera fiz está modificação porem o sarg continua não apresentando a mensagem de DANIED no relatório do squid.
    Tentei utilizando o squidguard.
    Com a alteração do marcello o log access.log aparece o log de DANIED do squidguard no squid mas o sard não ta conseguindo mostrar isso.
    Mas se eu colocar o endereço da url bloqueada no navegador e na frente passar .*sgrd=ACCESSDANIED ai o sarg consegue gerar i relatório com a a url negada.



  • Olá Marcelloc

    Muito Bom!!! parabéns!!! valeu!!!!!!

    fiz a implementação aqui.. e fiquei com 2 duvidas:

    1º duvida…

    no item:

    Para ambientes com autenticação:
    A regra de denied precisa ser incluída após a declaração da acl de autenticação

    
    acl sglog url_regex -i .*sgrd=ACCESSDENIED
    http_access deny password sglog
    
    

    onde coloco esse código? no próprio custom options? substituo o 1º código que vc informou ou coloco na blacklist do squid3?

    aqui está funcionando perfeitamente, exibe uma tela de denied access ( no local onde mostra o redirector) e criou uma nova aba com o ip da maquina ( aonde fica o usuário bloqueado) só q não está resolvendo o usuário q bloqueou.. provavelmente pq coloquei esse código ai em cima no local errados.. rs

    2º duvida,

    os sites com https, não exibem a tela de bloqueio( sgerror.php) e consequentemente não retornam os bloqueios no denied…
    como resolvo isso? vi no  fórum um post sobre vhosts, mas não consegui implementar.. tem alguma dica?

    abraços

    diego



  • @didonsom:

    onde coloco esse código? no próprio custom options? substituo o 1º código que vc informou ou coloco na blacklist do squid3?

    Não, esta alteração precisa ser feita no squid.inc. Mas só recomento para quem conhece php.

    @didonsom:

    os sites com https, não exibem a tela de bloqueio( sgerror.php) e consequentemente não retornam os bloqueios no denied…
    como resolvo isso? vi no  fórum um post sobre vhosts, mas não consegui implementar.. tem alguma dica?

    Provavelmente só com interceptação de ssl que vai sair na próxima release do pacote.



  • Galera o meu aqui finalmente funcionou.
    Para funcionar só precisei fazer a modificação no arquivo.
    /usr/local/www/sgerror.php incluindo a linha abaixo apos a linha 232 este código entre o $str[] = ""; e $str[] = "";
    $sge_prefix=(preg_match("/?/",$cl['u'])?"&":"?");
    $str[] = '<iframe src="'.$cl['u'].$sge_prefix.'sgrd=ACCESSDENIED" width="1" height="1"></iframe>';

    Funcionou perfeitamente.
    Estava tentando adicionar ACL e tambem configurando o squid.inc mas se eu fizer isso simplesmente o log não fica como danied do squid.
    Se configurar tanto o sgerror.php como o squid.inc o log fica do squid fica como danied porem o sarg não gera com o danied na frente.
    Então deixei apenas o sgerrro.php conforme o Marcello informou e funfou de boa.
    Marcello novamente muito obrigado pela solução apresentada para o SARG apresentar o acesso negado pois isso facilita muito para os gestores da empresa analisar o acesso ao conteúdo.

    Bom não funcionou assim perfeitamente.
    Funcionou mas o SARG simplesmente parou de mostrar o DANIED gerado pelo squidguard.
    Interessante que o log ta certinho



  • Olá Pessoal,

    Funcionou perfeitamente aqui está gerando o relatório de Denied conforme o esperado! Por usuário.

    Para ajudar quem estiver com dificuldade, abaixo o procedimento que realizei.

    Utilizo o Squid 3 com autenticação Ldap.

    estou disponibilizando 2 arquivos.

    1 - Sgerror.php

    o meu sgerror.php é personalizado ( personalizei com um post do próprio fórum, méritos para o autor do modelo).
    fica na pasta /usr/local/www/

    como ele é personalizado a inclusão do código na sgerror.php, ficou depois da linha 248 que é o local onde está os campos

    
    $str[] = "";
    $str[] = ""; 
    
    

    2 - arquivo Squid.inc com a alteração depois da linha 1371, essa alteração é para quem tem autenticação.
    o arquivo fica em /usr/local/pkg/

    inclusão das linhas

    
    acl sglog url_regex -i .*sgrd=ACCESSDENIED
    http_access deny password sglog
    
    

    Abraços

    Diego

    squid.txt
    sgerror.txt



  • @didonsom:

    código squid.inc

    Anexa o arquivo com extensão .txt, seu post não ficou completo.



  • Opa Marcello,

    Nem tinha percebido que o post não estava completo.. valeu pela dica..

    Post corrigido..

    Abraços,

    Diego



  • Obrigadão Marcelo, por sua dica!!

    Eu não entendo muito de HTML/PHP e por isso, quando eu vi seu post, sai fazendo tudo que dizia até que notei que não funcinou…
    Ai fui colocar a cabeça pra pensar pra ver qual era a lógica do negócio até meio que entender o que eu teria que fazer e entender o motivo de não estar funcionando.

    Foi então que eu percebi que o meu problema é que eu não uso um "int error page" e sim um "ext url error page" redirecionando para um arquivo .html

    No caso, eu assumo que eu deveria colocar o

    <iframe src="'.$cl['u'].$sge_prefix.'sgrd=ACCESSDENIED" width="1" height="1"></iframe>
    

    dentro dessa minha pagina externa…

    mas eu não sei como fazer referente a linha

    $sge_prefix=(preg_match("/\?/",$cl['u'])?"&":"?")
    

    Acredito que só funcione com PHP por ser uma variável… não sei.
    Pergunto isso porque tenho várias páginas de erro em HTML dependendo do conteúdo.... e por isso, se eu fizer via sgerror.php, ele só vai funcionar com ela e as minhas outras páginas de erro passariam a ser todas a mesma que fica dentro do sgerror.php

    Tem como me dá uma mão?
    Obrigado!



  • @ploquets:

    Acredito que só funcione com PHP por ser uma variável… não sei.

    Sim. este trecho do código verifica se a url tem ou não parâmetros.

    Se tiver o php instalado no servidor, acredito que um resolva a questão.



  • muito bom apliquei aqui nos meus servidores esta funcionando tudo.



  • Olá Marcello,

    Já existe alguma solução definitiva para essa situação (algum release que tenha isso corrigido) ?

    Obrigado!



  • Já está no squid3-dev desde a primeira versão…



  • Bom dia pessoal,

    Gostaria se possivel de uma ajuda, instalei o PFsense 2.2 com squid 2.7(autenticado) e squidguard e ambos estão funcionando 100%, mas me deparei na mesma necessidade do Marcelo, segui as dicas mas não obtive sucesso, seguindo a dica para o squid 2.7(autenticado) no log access.log do squid não aparece DENIED, apenas MISS, entao fui testar a dica para squid2.7 sem ser autenticado e nesse passou a aparecer o bloqueio realizado pelo squidguard, porem não informa o usuario logado, apenas o IP.

    no teste com a dica do squid 2.7 sem autenticação apenas coloquei no custom:acl sglog url_regex -i .*sgrd=ACCESSDENIED;http_access deny sglog; funcionou mas não parace o usuario bloqueado, apenas IP.

    no teste com a dica do squid2.7 com autenticação coloquei no custom:"acl sglog url_regex -i .sgrd=ACCESSDENIED" e no squid.inc adicionei na linha 1104:
            $conf .= "# Default block all to be sure\n";
    **    $conf .= "http_access deny password sglog\n";
    *
            $conf .= "http_access deny all\n";
    Assim como mencionado no post, o deny ficou apos a ACL de autenticação no squid.conf, mas não aparece o bloqueio do squidguard no access.log do squid.

    Fiz algo errado?

    Abraço



  • Já que está na 2.2 melhor ir para o Squid3 que já tem isso integrado e também porque a versão 2 do Squid não é mais suportada pelo FreeBSD 10, então em algum momento ela não vai mais estar disponível para o pfSense 2.2.



  • Bom dia Tomas, instalei o 2.7 pois vi que era o stable nos pacotes, mas pesquisando aqui vi tb q o squid3 usa a ultima versao stable, apenas a interface é beta.

    Irei realizar teste com o squid3.

    Abraço



  • @marcosasjr:

    Bom dia Tomas, instalei o 2.7 pois vi que era o stable nos pacotes, mas pesquisando aqui vi tb q o squid3 usa a ultima versao stable, apenas a interface é beta.

    Irei realizar teste com o squid3.

    Abraço

    Certo, mas a interface não é beta, já funciona a muito tempo. Na versão 2.1.5 era chamado de Squid3-dev;

    Teste e poste o resultado.



  • Use o pfsense 64 bits.



  • Pessoal, fiz as configurações descritas pelo Marcelo no squid3, no campo Custom_ACLS (After_Auth). Também configurei o sgerror.html. Os LOGs do squid estão corretos e aparecem os sites bloqueados por usuário. Porém, ocorre que meu ambiente é autenticado e preciso que algumas redes não sejam autenticadas. Sei que existe um campo no squid (aba autenticação) onde eu coloco as redes que não serão autenticadas, mas isso deixa de funcionar quando eu coloco a configuração sugerida pelo Marcelo para o log squid. Alguém sabe como me ajudar a resolver isso?



  • Estude as acls do squid, você pode definir quase tudo por lá e colar no campo custom_acls_before ou after, dependendo da sua necessidade.



  • Galera,
    Temos essa configurações para a versão 2.3.2 64amd?