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.
    • 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
                      • marcellocM
                        marcelloc
                        last edited by

                        Snowyrain, Thanks for your contribution.  :)

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

                        Help a community developer! ;D

                        1 Reply Last reply Reply Quote 0
                        • F
                          fredmdl
                          last edited by

                          Olá pessoal.
                          Sou novo no pfsense e estou homologando ele para substituir um sistema embarcado de firewall + e-mail aqui da nossa empresa.
                          Minha ideia é utilizar o pfsense como firewall + proxy e zimbra para e-mail.

                          Vamos la… Li varias vezes este tópico e busquei na internet porém o local com as informações mais completas e consistentes com certeza é aqui.
                          Fiz a configuração completa squid + squidGuard + ldap intalei o patch, baixei, rodei e agendei o script. Mas ainda não esta funcionando. Na maquina de teste no IE ele pede usuário e senha mas quando digito ele não loga.
                          Segue minhas configurações:
                          Pfsense 2.0.1-RELEASE (amd64) + Windows Server 2008 R2

                          Script:
                          /root(31): /usr/local/bin/php -q /root/squiguard_ldap.php
                          Group : PRX_Allow_All
                                  –> Members : 'frederico.lima'

                          Group : PRX_Deny_All
                                  --> Members : 'homolog'

                          Alguém pode me ajudar no que faltou ou fiz errado?  :-\

                          Muito obrigado e parabéns pelo forum!  ;)

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

                            @fredmdl:

                            instalei o patch, baixei, rodei e agendei o script.

                            fredmdl, bem vindo ao fórum! :)

                            Neste tópico, temos duas soluções, uma é o patch do Luiz Gustavo e outra é o script que eu e o ccesario fizemos.

                            Você tem que escolher uma das duas para utilizar no lugar de fazer os dois.

                            att,
                            Marcello Coutinho.

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

                            Help a community developer! ;D

                            1 Reply Last reply Reply Quote 0
                            • F
                              fredmdl
                              last edited by

                              @marcelloc:

                              Neste tópico, temos duas soluções, uma é o patch do Luiz Gustavo e outra é o script que eu e o ccesario fizemos.

                              Você tem que escolher uma das duas para utilizar no lugar de fazer os dois.

                              att,
                              Marcello Coutinho.

                              Marcello eu removi a configuração do patch da GUI… Mesmo assim continuo na mesma..
                              tenho que reinstalar o squidGuard?

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

                                @fredmdl:

                                tenho que reinstalar o squidGuard?

                                estas atualizações buscam os usuarios do grupo e aplicam na configuração do squidguard.

                                sua autenticação já está ok? você consegue ver os usuários nos logs do squid?

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

                                Help a community developer! ;D

                                1 Reply Last reply Reply Quote 0
                                • F
                                  fredmdl
                                  last edited by

                                  @marcelloc:

                                  estas atualizações buscam os usuarios do grupo e aplicam na configuração do squidguard.

                                  sua autenticação já está ok? você consegue ver os usuários nos logs do squid?

                                  Marcelo muito obrigado pela ajuda. Depois que eu removi a configuração do patch ele funcionou.  ;D
                                  Agora percebi duas coisas:

                                  1 - O agendamento no CRON não esta funcionando, eu instalei o pacote cron e pelo menu eu adicionei a entrada abaixo
                                  */5 * * * * root /usr/local/bin/php -q /root/squidguard_ldap.php
                                  Se eu roda manual ai ele preenche a gui do squidGuardian

                                  2 - Há alguma restrição para autenticar usuário com o nome no formato "nome.sobrenome" ou com senha forte do tipo "%#123.ABC" ?

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

                                    @fredmdl:

                                    2 - Há alguma restrição para autenticar usuário com o nome no formato "nome.sobrenome" ou com senha forte do tipo "%#123.ABC" ?

                                    Se roda ele na mão e vai, então não tem problema.

                                    Eu prefiro deixar sem caracteres especiais as senhas que ficam em arquivos de configuração ou xml.

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

                                    Help a community developer! ;D

                                    1 Reply Last reply Reply Quote 0
                                    • I
                                      ilv
                                      last edited by

                                      Boa Tarde
                                      Após realizar as configurações na hora de testar o script em php ocorre a seguinte mensagem Diagnostic>Command Prompt>PHP Execute

                                      ocorre a seguinte mensagem de erro após executar o script abaixo:
                                      Parse error: syntax error, unexpected '<' in /usr/local/www/exec.php(244) : eval()'d code on line 2

                                      já alterei as permissões do script para rwx rwx rwx

                                      #!/usr/local/bin/php -f 
                                      
                                      // 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.0.8";
                                      
                                      # AD DIRECTORY DN(required)
                                      $ldap_dn = "DC=tots";
                                      
                                      # BIND USER(required)
                                      $user_bind = "cn=squid,cn=Users,DC=tots";
                                      
                                      # PASSWORD BIND(required)
                                      $password = "coisa";
                                      
                                      #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);
                                      	$group_member_details = array();
                                      	foreach($member_list[0] as $list)
                                      		if (is_array($list)) 
                                      			foreach($list as $member) {
                                      				$member_dn = explode_dn($member);
                                      				$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]['samaccountname'][0]);
                                      			}
                                      	ldap_close($ldap);
                                      	array_shift($group_member_details);
                                      	return $group_member_details;
                                      	ldap_unbind($ldap);
                                      }
                                      
                                      // 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 as $key => $value) {
                                      	    	if (preg_match ("/\w+/",$value[0]))
                                          	  		$members .= "'".preg_replace("/USER/",$value[0],$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

                                        @ilv:

                                        ocorre a seguinte mensagem de erro após executar o script abaixo:
                                        Parse error: syntax error, unexpected '<' in /usr/local/www/exec.php(244) : eval()'d code on line 2

                                        ivl, bem vindo ao fórum! :)

                                        Execute ele como um script normal, não como um php ou copie o arquivo e remova o código entre o

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

                                        Help a community developer! ;D

                                        1 Reply Last reply Reply Quote 0
                                        • I
                                          ilv
                                          last edited by

                                          @marcelloc:

                                          @ilv:

                                          ocorre a seguinte mensagem de erro após executar o script abaixo:
                                          Parse error: syntax error, unexpected '<' in /usr/local/www/exec.php(244) : eval()'d code on line 2

                                          ivl, bem vindo ao fórum! :)

                                          Execute ele como um script normal, não como um php ou copie o arquivo e remova o código entre o

                                          Então eu execute o script em "PHP Execute" sem o  "" ?  Pois executei sem esse parâmetros e não me retornou nada.

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

                                            @ilv:

                                            Então eu execute o script em "PHP Execute" sem o  "" ?   Pois executei sem esse parâmetros e não me retornou nada.

                                            Não retornar nada normalmente significa que executou sem erros.

                                            habilite o ssh , conecte usando o putty por exemplo e execute o script, veja o que ele retorna.

                                            Este tipo de teste é melhor na console/ssh  ;)

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

                                            Help a community developer! ;D

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