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

    Tutorial - SquidGuard + LdapGroup (permissão por grupo no ad)

    Scheduled Pinned Locked Moved Portuguese
    202 Posts 30 Posters 93.6k 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.
    • marcellocM
      marcelloc
      last edited by

      As duas fazem isso  :)

      O LuisGustavo postou um patch para o squidguard, enquanto ccesario e eu publicamos um script que via cron puxa os usuários do AD e aplica no grupo do squidguard criado com o mesmo nome.

      att,
      Marcello Coutinho

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

      Help a community developer! ;D

      1 Reply Last reply Reply Quote 0
      • J
        jcesarsc
        last edited by

        @marcelloc:

        As duas fazem isso  :)

        O LuisGustavo postou um patch para o squidguard, enquanto ccesario e eu publicamos um script que via cron puxa os usuários do AD e aplica no grupo do squidguard criado com o mesmo nome.

        att,
        Marcello Coutinho

        Tentei utilizando o script elaborado pelo L. Gustavo.
        Nao quis tentar o outro que vc e o ccesario fizeram pq iria ficar um campo com muuuuuuuuitos nomes, pois aqui onde trabalho tem muitos usuarios que passam pelo proxy. Prefiro adicionar os usuarios dentro do grupo no AD.
        Se fosse um ambiente com poucos usuarios, sem pensar 2 vezes, iria utilizar o script de voces.
        Só postei aqui o que passei pra aliviar a barra de quem tbm sofreu ou esta sofrendo com isso.

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

          @jcesarsc:

          Nao quis tentar o outro que vc e o ccesario fizeram pq iria ficar um campo com muuuuuuuuitos nomes, pois aqui onde trabalho tem muitos usuarios que passam pelo proxy. Prefiro adicionar os usuarios dentro do grupo no AD.
          Se fosse um ambiente com poucos usuarios, sem pensar 2 vezes, iria utilizar o script de voces.

          Não vejo diferença com poucos ou muitos usuários, uma vez que você não precisa cadastrar nenhum usuario no squidguard.

          @jcesarsc:

          Só postei aqui o que passei pra aliviar a barra de quem tbm sofreu ou esta sofrendo com isso.

          Obrigado pelo feedback.

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

          Help a community developer! ;D

          1 Reply Last reply Reply Quote 0
          • C
            ccesario
            last edited by

            Pessoal,

            Segue o link do script com o tratamento das mensagens de warnings.

            https://github.com/ccesario/public/raw/master/squiguard_ldap.php

            Acredito que agora ele não mostrará mais os warnings na console.

            Quem testar, por favor de um feedback :)

            att
            Carlos

            Carlos

            1 Reply Last reply Reply Quote 0
            • C
              ccesario
              last edited by

              Srs,

              Com a ajuda do Marcello, o script agora suporta a interpretação de Grupo dentro de Grupo (no momento apenas 1 nível)

              Ex.

              GRUPOS do AD
              GRUPO1 - 'jose' 'pedro'
              GRUPO2 - @GRUPO1 'ricardo' 'patricia
              '

              Quando o script for executado as entradas no squidGuard ficarão assim

              GRUPOS do SQUIDGUARD
              GRUPO1 - 'jose' 'pedro'
              GRUPO2 - 'jose' 'pedro' 'ricardo' 'patricia'

              A versão atual do script está no seguinte endereço

              https://github.com/ccesario/public/blob/master/squiguard_ldap.php

              Por favor não deixem de dar um feedback sobre o funcionamento do mesmo

              att,

              Carlos

              1 Reply Last reply Reply Quote 0
              • G
                gedaias
                last edited by

                Ccesario,

                Fiz um teste aqui colocando um grupo dentro de outro grupo e está funcionando 100%!
                Ele exibe na GUI do SquidGuard tanto os usuários do 1º grupo quanto os do 2º grupo ;)

                Parabéns a você e ao Marcello que tiveram a iniciativa e ajustaram o script  ;)
                Parabéns ao Luiz Gustavo que desenvolveu e deixou a disposição a outra solução…

                Toda comunidade agradece...

                Abraço,

                Gedaías Brandão

                1 Reply Last reply Reply Quote 0
                • K
                  kelsen
                  last edited by

                  Realmente isso é otimo, o único problema em usar o squidGuard é que é preciso apagar o histórico do navegador depois de liberar um site que antes estava negado.

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

                    @gedaias:

                    Parabéns ao Luiz Gustavo que desenvolveu e deixou a disposição a outra solução…

                    Este script é criação do ccesario, não do Luiz Gustavo.

                    O tópico tem duas soluções, uma com o patch feito pelo Luiz e outro com o script criado/adaptado pelo ccesario com minha ajuda.

                    att,
                    Marcello Coutinho

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

                    Help a community developer! ;D

                    1 Reply Last reply Reply Quote 0
                    • A
                      adriano
                      last edited by

                      Bom dia Amigos do Forum, sou novo no pfsense e Preciso de Um passo a Passo. Vou trocar 14 Server Endian+AD para o PFSense.
                      Estou a 3 meses debulhando o forum, ate o momento nao consegui fazer o PFSense autenticar os Usuários do Domino Windows 2003 / Windows 2008.
                      Na verdade tenho pouco conhecimento com linha de comando, e preciso se nao for abusar de um passo a passo.
                      Ja baixei o script , e efetuei as alteracoes para autenticar em um AD Teste em Laboratorio, mais nao sei como jogar dentro do pfsense, como aplica-lo, quais sequencias de instalacao dos pacotes e como rodar o mesmo.
                      Abaixo como ficou meu script apos alteracao.

                      // based on http://samjlevy.com/2011/02/using-php-and-ldap-to-list-of-members-of-an-active-directory-group/
                      // pfsense integration by marcelloc and ccesario
                      // ldapsearch -x -h 192.168.11.1 -p 389 -b OU=Internet,DC=domain,DC=local -D CN=Proxyauth,OU=PROXY,DC=domain,DC=local -w PASS

                      AD HOST (required) o ip abaixo é do Server 2003 DC

                      $ldap_host = "192.168.1.254";

                      AD DIRECTORY DN(required) Abaixo nome do servidor e nome do dominio completo

                      $ldap_dn = "OU=SRV01,DC=domaintest,DC=local";

                      BIND USER(required) abaixo alterei apenas o nome do dominio, Esse PROXY É o usuário criado no ad ??

                      $user_bind = "CN=Proxyauth,OU=PROXY,DC=domaintest,DC=local";

                      PASSWORD BIND(required) abaixo coloquei a senha 123456

                      $password = "123456";

                      #if you need to apply any prefix or sufix to retreived user
                      #example: prefix user with domain(required)
                      #$user_mask="DOMAIN\USER";
                      $user_mask="USER";

                      Obs. As Estacoes já estao logando no AD.
                      O nome do Servidor = srv01.domaintest.local - ip 192.168.1.254
                      Estou com a versao 2.01 + Squid + Squidguard.

                      VLW Obrigado
                      Adriano

                      1 Reply Last reply Reply Quote 0
                      • G
                        gubh
                        last edited by

                        Como primeira postagem, apenas para contar a história da autenticação falhando.

                        Também estava com o sintoma de usuários autenticando e acontecendo o "bypass" do Squidguard. Não uso grupos apenas usuários do AD.

                        Precisei restaurar um backup full por outros motivos e a situação se resolveu, portanto quem estiver com o problema pode tentar realizar o restore full.

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

                          @adriano:

                          Na verdade tenho pouco conhecimento com linha de comando, e preciso se nao for abusar de um passo a passo.
                          Ja baixei o script , e efetuei as alteracoes para autenticar em um AD Teste em Laboratorio, mais nao sei como jogar dentro do pfsense,

                          Adriano, você pode usar o pacote filer para criar o arquivo no pfsense, mas saber executar comandos na console será necessário para testa-lo.

                          Habilite o ssh em system-> advanced, instale o cliente ssh putty(gratuito) e se conecte a console do pfsense.

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

                          Help a community developer! ;D

                          1 Reply Last reply Reply Quote 0
                          • R
                            rodrigo.lima
                            last edited by

                            @marcelloc:

                            @adriano:

                            Na verdade tenho pouco conhecimento com linha de comando, e preciso se nao for abusar de um passo a passo.
                            Ja baixei o script , e efetuei as alteracoes para autenticar em um AD Teste em Laboratorio, mais nao sei como jogar dentro do pfsense,

                            Adriano, você pode usar o pacote filer para criar o arquivo no pfsense, mas saber executar comandos na console será necessário para testa-lo.

                            Habilite o ssh em system-> advanced, instale o cliente ssh putty(gratuito) e se conecte a console do pfsense.

                            Marcelo, Tem algum tutorial aqui no fórum explicando como criar esse arquivo?

                            Tentei criar e nomear como .php, mas depois que faço o upload para o pfsense não funciona.

                            []'s.

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

                              Voce instalou o pacote que indiquei?

                              No filer voce cria o arquivo com a extensão e conteúdo texto/script que quiser.

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

                              Help a community developer! ;D

                              1 Reply Last reply Reply Quote 0
                              • R
                                rodrigo.lima
                                last edited by

                                @marcelloc:

                                Voce instalou o pacote que indiquei?

                                No filer voce cria o arquivo com a extensão e conteúdo texto/script que quiser.

                                Marcelo, boa noite.

                                Criei o arquivo no filer, mas ao executar o script aparece a mensagem de erro abaixo:

                                Parse error: syntax error, unexpected '/' in /usr/local/www/exec.php(244) : eval()'d code on line 1

                                Sabes o que pode ser?

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

                                  Cola a tela da configuracao que você fez no filer

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

                                  Help a community developer! ;D

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    rodrigo.lima
                                    last edited by

                                    @marcelloc:

                                    Cola a tela da configuracao que você fez no filer

                                    Marcelo, boa noite.

                                    Segue a configuração:

                                    // based on http://samjlevy.com/2011/02/using-php-and-ldap-to-list-of-members-of-an-active-directory-group/
                                    // pfsense integration by marcelloc and ccesario
                                    // ldapsearch -x -h 10.10.0.1 -p 389 -b OU=Internet,DC=nwtraders,DC=msft -D CN=squid,CN=Users,DC=nwtraders,DC=msft -w PASS

                                    AD HOST (required)

                                    $ldap_host = "10.10.0.1";

                                    AD DIRECTORY DN(required)

                                    $ldap_dn = "OU=INTERNET,DC=nwtraders,DC=msft";

                                    BIND USER(required)

                                    $user_bind = "CN=squid,CN=Users,DC=nwtraders,DC=msft";

                                    PASSWORD BIND(required)

                                    $password = "**********";

                                    #if you need to apply any prefix or sufix to retreived user
                                    #example: prefix user with domain(required)
                                    #$user_mask="DOMAIN\USER";
                                    $user_mask="USER";

                                    #######################

                                    End of user options

                                    #######################

                                    require_once("/etc/inc/util.inc");
                                    require_once("/etc/inc/functions.inc");
                                    require_once("/etc/inc/pkg-utils.inc");
                                    require_once("/etc/inc/globals.inc");

                                    #mount filesystem writable
                                    conf_mount_rw();

                                    function explode_dn($dn, $with_attributes=0) {
                                    $result = ldap_explode_dn($dn, $with_attributes);
                                    if (is_array($result)) {
                                    foreach($result as $key => $value) {
                                    $result[$key] = $value;
                                    }
                                    }
                                    return $result;
                                    }

                                    function get_ldap_members($group,$user,$password) {
                                    global $ldap_host;
                                    global $ldap_dn;
                                    $LDAPFieldsToFind = array("member");
                                    $ldap = ldap_connect($ldap_host) or die("Could not connect to LDAP");

                                    // OPTIONS TO AD
                                    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION,3);
                                    ldap_set_option($ldap, LDAP_OPT_REFERRALS,0);

                                    ldap_bind($ldap, $user, $password) or die("Could not bind to LDAP");

                                    $results = ldap_search($ldap,$ldap_dn,"cn=" . $group,$LDAPFieldsToFind);

                                    $member_list = ldap_get_entries($ldap, $results);
                                    $group_member_details = array();

                                    if (is_array($member_list[0]))
                                    foreach($member_list[0] as $list)
                                    if (is_array($list))
                                    foreach($list as $member) {
                                    $ldap_dn_user = preg_replace('/^cn=([^,]+),/i','',$member);
                                    $member_dn = explode_dn($member);
                                    if (!empty($member_dn[0])) {
                                    $member_cn = str_replace("CN=","",$member_dn[0]);
                                    $member_search = ldap_search($ldap, $ldap_dn_user, "(CN=" . $member_cn . ")");
                                    $member_details = ldap_get_entries($ldap, $member_search);

                                    // If group have a other group as member (only 1 level)
                                    if(is_array($member_details[0]['member'])) {
                                    //print "############\nmembers\n###########\n";
                                    //var_dump ($member_details[0]['member']);
                                    foreach($member_details[0]['member'] as $sub_member) {
                                    $sub_ldap_dn_user = preg_replace('/^cn=([^,]+),/i','',$sub_member);
                                    $sub_member_dn = explode_dn($sub_member);
                                    if (!empty($sub_member_dn[0])) {
                                    $sub_member_cn = str_replace("CN=","",$sub_member_dn[0]);
                                    $sub_member_search = ldap_search($ldap, $sub_ldap_dn_user, "(CN=" . $sub_member_cn . ")");
                                    $sub_member_details = ldap_get_entries($ldap, $sub_member_search);
                                    $group_member_details[] = array($sub_member_details[0]['samaccountname'][0]);
                                    }
                                    }
                                    //echo "#########################################\nsub_group\n";
                                    //var_dump($group_member_details);
                                    //echo "#########################################\n";
                                                            }
                                                            else
                                          $group_member_details[] = array($member_details[0]['samaccountname'][0]);
                                    }
                                    }
                                    ldap_close($ldap);
                                    return $group_member_details;
                                    }

                                    //Log info
                                    log_error("Running squidGuard LDAP sync");

                                    // Read Pfsense config
                                    global $config,$g;
                                    $id=0;
                                    $apply_config=0;
                                    if (is_array($config['installedpackages']['squidguardacl']['config'])) {
                                    foreach($config['installedpackages']['squidguardacl']['config'] as $group) {
                                    $members="";
                                    echo  "Group : " . $group['name']."\n";
                                    $result = get_ldap_members($group['name'],$user_bind,$password);
                                    asort($result);
                                    foreach($result as $key => $value) {
                                    if (preg_match ("/\w+/",$value[0]))
                                    $members .= "'".preg_replace("/USER/",strtolower($value[0]),$user_mask)."' ";
                                    }
                                    if (!empty($members)) {
                                    if($config['installedpackages']['squidguardacl']['config'][$id]['source'] != $members){
                                    $config['installedpackages']['squidguardacl']['config'][$id]['source'] = $members;
                                    $apply_config++;
                                    }
                                    }
                                    echo "\t –> Members : " . $members . "\n\n";
                                    $id++;
                                    }
                                    }

                                    if ($apply_config > 0) {
                                    log_error("squidGuard LDAP sync: user list from LDAP is different from current group, applying new configuration...");
                                    print "user list from LDAP is different from current group, applying new configuration...";
                                    write_config();
                                    include("/usr/local/pkg/squidguard.inc");
                                    squidguard_resync();
                                    print "done\n";
                                    }

                                    #mount filesystem read-only
                                    conf_mount_ro();

                                    ?>

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

                                      quis dizer fazer um print da tela da cofiguracao do arquivo
                                      nome, permissão do arquivo, etc.

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

                                      Help a community developer! ;D

                                      1 Reply Last reply Reply Quote 0
                                      • R
                                        rodrigo.lima
                                        last edited by

                                        @marcelloc:

                                        quis dizer fazer um print da tela da cofiguracao do arquivo
                                        nome, permissão do arquivo, etc.

                                        Marcelo,

                                        Segue a imagem solicitada:

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

                                          usa a opção additional Options para anexar o arquivo, fica mais fácil de ver.

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

                                          Help a community developer! ;D

                                          1 Reply Last reply Reply Quote 0
                                          • S
                                            snowyrain
                                            last edited by

                                            Hello,

                                            first of all. I can't speek Portuguese.  This thread is very interesting to me. I try the patch form Luiz Gustavo. The GUI is modified well. The file "/usr/local/etc/squidGuard/squidGuard.conf" seems to be correct. But it doesn't work. It seems that the current squid package is built without LDAP-Support.
                                            "squidguard -d -c /usr/local/etc/squidGuard/squidGuard.conf" says always that here is a error in the config file (an all lines with ldapusersearch).

                                            Solution: You can downgrade squidguard: Caution this is for 64bit systems.
                                            On 32bit systems you must adjust the link

                                            
                                            ln -s  /usr/local/lib/libldap-2.4.so /usr/local/lib/libldap-2.4.so.7
                                            mkdir /tmp/000
                                            cd /tmp/000
                                            fetch -q -o /tmp/000/squidGuard-1.4_3.tbz http://files.pfsense.org/packages/amd64/8/All/squidGuard-1.4_3.tbz
                                            tar xf squidGuard-1.4_3.tbz
                                            mv /usr/local/bin/squidGuard /usr/local/bin/squidGuard-1.4_4
                                            cp /tmp/000/bin/squidGuard /usr/local/bin/squidGuard-1.4_3
                                            #ln -s /usr/local/bin/squidGuard-1.4_3 /usr/local/bin/squidGuard #With this Symlink, Pfsense does not recognise the running squidguard on on the service tab
                                            cp /usr/local/bin/squidGuard-1.4_3 /usr/local/bin/squidGuard
                                            squidGuard -C all
                                            squidGuard -u
                                            #reboot
                                            
                                            

                                            For me it works very well on Pfsense 2.0.1.

                                            Maybe it helps somebody.

                                            Greetings

                                            Snowyrain

                                            Edit: Don't use Symlinks

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