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.
    • G
      gilmarcabral
      last edited by

      Boa tarde.
      Galera o Ccesario fez adequação no script squidguard_ldap.php para que o mesmo faça busca em base openldap ao invez de AD.
      Era por isso eu não estava conseguindo fazer o script consultar a base e adicionar os usuarios na gui.
      Segue abaixo script adequado para consultas em base openldap.

      
      #!/usr/local/bin/php -q
      // 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
      
      # AD HOST (required)
      $ldap_host = "192.168.10.39";
      
      # AD DIRECTORY DN(required)
      $ldap_dn = "DC=agrovale,DC=com,DC=br";
      
      # BIND USER(required)
      $user_bind = "CN=root,DC=agrovale,DC=com,DC=br";
      
      # PASSWORD BIND(required)
      $password = "SENHA.";
      
      #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);
          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);
      
      	//print_r($member_list[0][dn]);
      
      	$group_member_details = array();
      	foreach($member_list[0] as $member) { 
      				$member_dn = explode_dn($member);
      				//print_r($member_dn);
      				$member_cn = str_replace("cn=","",$member_dn[0]);
      				$member_search = ldap_search($ldap, $ldap_dn, "(cn=" . $member_cn . ")");
      				$member_details = ldap_get_entries($ldap, $member_search);
      				$group_member_details[] = array($member_details[0]['memberuid']);
      	}			
      	ldap_close($ldap);
      	array_shift($group_member_details);
      	return $group_member_details;
      }
      
      // 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);
      		foreach($result[0][0] as $key => $value) {
      			echo "key $key  ==>>  val $value\n";
      		    	if ( (preg_match ("/\w+/",$value)) && (preg_match ("/^[0-9]/",$key)) ) 
      				$members .= "'".preg_replace("/USER/",$value,$user_mask)."' ";
      		}
         		if (!empty($members))
         			if($config['installedpackages']['squidguardacl']['config'][$id]['source'] != $members){
         				$config['installedpackages']['squidguardacl']['config'][$id]['source'] = $members;
         				$apply_config++;
         			}
         	$id++;			
      	}
      if ($apply_config > 0){
      	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

        gilmarcabral,

        O ccesario me passou o script, vou tentar juntar as duas versões em um único script assim que possível.

        att,
        Marcello Coutinho

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

        Help a community developer! ;D

        1 Reply Last reply Reply Quote 0
        • M
          madrugaaa
          last edited by

          Boa tarde, é o seguinte, configurei o squid para autenticar no ad e apliquei o patch do luiz gustavo para fazer os bloqueios no squidguard via grupos do AD, configurei da seguinte forma.
          Proxyfilter - SquidGuard -> General Settings

          Fui em Common ACL e dei um DENY em Default Access ALL
          Em Groups ACL criei um grupo chamado TI
          em Client Source coloquei o seguinte = ldapusersearch  ldap://192.168.1.5/DC=far,DC=com?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=TI%2cCN=Users%2cDC=far%2cDC=com))
          onde 192.168.1.5 é o ip do AD, o nome do grupo no AD é TI e dominio far.com
          Fiz os devidos bloqueios em target rules list salvei e apply.
          o que acontece é o seguinte, eu consigo autenticar normalmente, testei a consulta manual ldapsearch e consultou tudo ok no meu ad, listou usuarios e grupos, mais ao autenticar os usuário não pegam os bloqueios, help-me

          1 Reply Last reply Reply Quote 0
          • P
            pontoexe
            last edited by

            :( ???

            O que acontece???

            Não consigo fazer essa coisa funcionar seguindo os passos de vocês, já tentei com todos os scripts aqui mas não funciona, parei agora no mesmo estágio que o rapaz ai de cima, autentica mas não bloqueia e no meu caso não achei onde vejo a lista de grupos e usuários…

            HELP ME PLEASE!!!

            1 Reply Last reply Reply Quote 0
            • P
              pontoexe
              last edited by

              Agora usando o squidguard.php consegui fazer ele autenticar e reconhecer os nomes de usuários conforme o print do pessoal, mas agora não autentica nenhum user.

              Não sei mais o que fazer… É osso isso aqui viu!!!

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

                @madrugaaa:

                o que acontece é o seguinte, eu consigo autenticar normalmente, testei a consulta manual ldapsearch e consultou tudo ok no meu ad, listou usuarios e grupos, mais ao autenticar os usuário não pegam os bloqueios, help-me

                @pontoexe:

                HELP ME PLEASE!!!

                Outras pessoas tiveram o mesmo resultado, tente a segunda alternativa com o script que eu e o ccesario fizemos, este eu sei que funciona no dansguardian e no squidguard.

                att,
                Marcello Coutinho

                ps:
                Lembrando que o LuisGustavo deixou bem claro que era um patch experimental, ajuda para evoluir o status para stable é sempre bem vinda.

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

                Help a community developer! ;D

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

                  Marcelloc,

                  Utilizando esse script que vc fez, funciona. Tenho uma dúvida quanto o seguinte, eu preciso colocar o nome da ACL exatamente igual como esta o nome do grupo no AD, certo? problema é que quando o nome tem mais de 16 caracteres o pf nao aceita,isso é padrao do squidguard ou tem como alterar no pfsense?

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

                    Não uso o squidguard, vou verificar onde é a restrição.

                    De qualquer forma, ser for restrição do squid/squidguard, da para alterar o script para ler o grupo do campo descrição.

                    mude disso:

                    echo  "Group : " . $group['name']."\n";
                    $result = get_ldap_members($group['name'],$user_bind,$password);

                    para isso:

                    echo  "Group : " . $group['description']."\n";
                    $result = get_ldap_members($group['description'],$user_bind,$password);

                    att,
                    Marcello Coutinho

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

                    Help a community developer! ;D

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

                      Vlw, funcionou pra mim.

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

                        @marcelloc:

                        @madrugaaa:

                        o que acontece é o seguinte, eu consigo autenticar normalmente, testei a consulta manual ldapsearch e consultou tudo ok no meu ad, listou usuarios e grupos, mais ao autenticar os usuário não pegam os bloqueios, help-me

                        @pontoexe:

                        HELP ME PLEASE!!!

                        Outras pessoas tiveram o mesmo resultado, tente a segunda alternativa com o script que eu e o ccesario fizemos, este eu sei que funciona no dansguardian e no squidguard.

                        att,
                        Marcello Coutinho

                        ps:
                        Lembrando que o LuisGustavo deixou bem claro que era um patch experimental, ajuda para evoluir o status para stable é sempre bem vinda.

                        Aqui no trabalho, tbm ta acontecendo a mesma coisa.
                        Os usuarios sao autenticados no Squid, porem nenhum filtro do SquidGuard esta sendo respeitado. Os usuarios acessam qualquer site.
                        Apliquei o patch feito pelo Luiz Gustavo, mas continua o mesmo problema.
                        Uma dúvida:
                        Depois de aplicado o patch e criado a ACL, tem mais algum passo que deve ser feito ?
                        Achei estrando pq o squidGuard.conf estava sem a busca ldap. A alteracao feita na aba Group ACL nao deveria refletir nesse arquivo ?

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

                          @jcesarsc:

                          Apliquei o patch feito pelo Luiz Gustavo, mas continua o mesmo problema.

                          Use o script deste post, alguns usuários já relataram que o patch não está funcionando.

                          att,
                          Marcello Coutinho

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

                          Help a community developer! ;D

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

                            Galera, o meu script quando rodo via terminal aparece os seguinte erros

                            **[2.0.1-RELEASE][root@firewall.imcsaste.saomateus.local]/root(34): /usr/local/bin/php -q /root/squidguard_ldap.php
                            Group : TI
                            Group : Galpao

                            Warning: Invalid argument supplied for foreach() in /root/squidguard_ldap.php on line 41
                            Group : Base

                            Warning: Invalid argument supplied for foreach() in /root/squidguard_ldap.php on line 41
                            Group : Coordenador

                            Warning: Invalid argument supplied for foreach() in /root/squidguard_ldap.php on line 41**

                            Alguem pode me ajudar?

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

                              @alanjhone:

                              Alguem pode me ajudar?

                              O script carrega os usuários para a gui do squidguard?
                              Se sim, estes erros podem significar itens cadastrados no grupo do ad que são incompatíveis com a função.

                              Evite usar acentos nos nomes dos usuários.

                              att,
                              Marcello Coutinho

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

                              Help a community developer! ;D

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

                                @marcelloc:

                                O script carrega os usuários para a gui do squidguard?
                                Se sim, estes erros podem significar itens cadastrados no grupo do ad que são incompatíveis com a função.

                                Evite usar acentos nos nomes dos usuários.

                                att,
                                Marcello Coutinho

                                Marcelo, o script carrega sim os usuarios na squidguard, e todos os meus grupos e usuários não contem acentos e nem espaço.

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

                                  @alanjhone:

                                  o script carrega sim os usuarios no squidguard, e todos os meus grupos e usuários não contem acentos e nem espaço.

                                  Então o script está funcionando 100%, pode ignorar os warnings.

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

                                  Help a community developer! ;D

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

                                    Só pra constar.
                                    Aqui no trabalho descobrimos que existe algum erro com o ultimo pacote do squidGuard (squidGuard-1.4_4.tbz).
                                    Desconfiamos que estava com erro, pois sempre ao aplicarmos as alterações no squid + squidGuard e acompanharmos o log da compilação do squidGuard (tail no caminho /var/squid/log/cache.log), sempre era acusado erro bem na linha de autenticacao com ldap ldapusersearch ldap://192.168….etc, etc, etc....

                                    Fizemos uma gambi que deixou o ambiente funcionando redondinho  (Pelo menos ate agora) ;).
                                    Vou explicar:
                                    O problema :
                                    O Squid estava funcionando, mas o squidGuard nao, ou seja, era solicitado o usuario/senha na navegação, mas nenhum filtro estava sendo respeitado. Qualquer site que o usuario tentasse, o squidGuard liberava.

                                    Primeira tentativa de solução (sem sucesso):
                                    Removemos e instalamos novamente o pacote squidGuard, porém o erro persistiu.

                                    Segunda tentativa de solução (sem sucesso):
                                    Removemos e instalamos novamente os pacotes squid E squidGuard, porém o erro persistiu.

                                    Terceira tentativa de solução (com sucesso)  :) :
                                    Removemos e instalamos novamente o pacote squidGuard (Por padrão ele baixa sempre a ultima versao).
                                    Baixamos "na unha" uma versao anterior do pacote squidGuard
                                    (http://files.pfsense.org/packages/8/All/squidGuard-1.4_3.tbz)
                                    e substituímos o executavel (somente o arquivo squidGuard) do ambiente pelo dessa versão.
                                    Corrigimos os direitos de acesso do arquivo (chmod) e depois disso até o momento esta funcionando perfeitamente.

                                    Nao sei sei mais alguem estava sofrendo com isso, mas fica aí uma solução alternativa pra ser tentada.
                                    Agradeço a todos aqueles que de alguma forma tentaram ajudar.
                                    Vou tentar ajudar sempre que for possível.

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

                                      jcesarsc,

                                      Este erro esta acontecendo com qual solução de autenticação por grupo deste tópico?

                                      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:

                                        jcesarsc,

                                        Este erro esta acontecendo com qual solução de autenticação por grupo deste tópico?

                                        att,
                                        Marcello Coutinho

                                        Autenticação por grupo do AD.
                                        Aquela que vc cria os grupos no AD e coloca os usuarios dentro do grupo para serem autenticados pelo squid e serem filtrados pelo squidGuard.

                                        1 Reply Last reply Reply Quote 0
                                        • 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
                                            • First post
                                              Last post
                                            Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.