• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
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.
  • M
    marcelloc
    last edited by Aug 10, 2012, 10:35 PM

    @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 Aug 25, 2012, 11:32 AM

      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 Oct 3, 2012, 11:38 AM

        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
        • M
          marcelloc
          last edited by Oct 3, 2012, 1:50 PM

          @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 Oct 7, 2012, 2:24 PM Oct 7, 2012, 2:09 PM

            @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
            • M
              marcelloc
              last edited by Oct 8, 2012, 2:50 AM

              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 Oct 9, 2012, 12:36 AM

                @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
                • M
                  marcelloc
                  last edited by Oct 9, 2012, 1:08 AM

                  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 Oct 10, 2012, 2:25 AM

                    @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
                    • M
                      marcelloc
                      last edited by Oct 10, 2012, 4:29 AM

                      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 Oct 11, 2012, 1:13 AM Oct 11, 2012, 1:10 AM

                        @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
                        • M
                          marcelloc
                          last edited by Oct 11, 2012, 4:01 AM

                          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 Nov 18, 2012, 11:24 AM Nov 17, 2012, 5:43 PM

                            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
                            • M
                              marcelloc
                              last edited by Nov 18, 2012, 3:38 AM

                              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 Dec 18, 2012, 11:46 AM

                                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
                                • M
                                  marcelloc
                                  last edited by Dec 18, 2012, 1:59 PM

                                  @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 Dec 18, 2012, 7:13 PM

                                    @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
                                    • M
                                      marcelloc
                                      last edited by Dec 18, 2012, 8:24 PM

                                      @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 Dec 19, 2012, 1:32 PM

                                        @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
                                        • M
                                          marcelloc
                                          last edited by Dec 19, 2012, 2:09 PM

                                          @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
                                          • First post
                                            Last post
                                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
                                            This community forum collects and processes your personal information.
                                            consent.not_received