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

    Squid autenticado no Captive Portal pfSense 2.3

    Scheduled Pinned Locked Moved Portuguese
    47 Posts 16 Posters 13.7k 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
      rlrobs
      last edited by

      Putz cara!! Valeu demais!! Funcionou 100%

      Vou adicionar essa solução aqui –> https://forum.pfsense.org/index.php?topic=103745.new;topicseen#new Tem algumas pessoas querendo essa solução também.

      abç

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

        @augusto_pereira:

        Olá pessoal,

        Há tempos estou buscando a solução para Squid (transparente) autenticado no Captive Portal em desde a versão 2.2.x. Nos debugs encontrei problemas com o script PHP que faziam o processo do Squid parar.

        A solução foi recriar o script em php. Para aplicar a correção basta trocar o conteúdo do arquivo /usr/local/bin/check_ip.php pelo o conteúdo abaixo e salvar as configurações do Squid e do Captive Portal:

        #!/usr/local/bin/php-cgi -q
        if(!defined(STDIN)){
        define("STDIN", fopen("php://stdin", "r"));
        }
        if(!defined(STDOUT)){
        define("STDOUT", fopen("php://stdout", "r"));
        }
        $check_ip = trim(fgets(STDIN));
        $dbs = glob("/var/db/captiveportal*.db");
        foreach($dbs as $db){
        $status = check_ip($db, $check_ip);
        break;
        }
        if(isset($status)){
        fwrite(STDOUT, "OK user={$status}\n");
        }
        else{
        fwrite(STDOUT, "ERR\n");
        }

        function check_ip($db, $check_ip){
        exec("sqlite3 {$db} "SELECT ip FROM captiveportal WHERE ip='{$check_ip}'"", $ip);
        if($check_ip == $ip[0]){
        exec("sqlite3 {$db} "SELECT username FROM captiveportal WHERE ip='{$check_ip}'"", $user);
        return $user[0];
        }
        }
        ?>

        OBS: Não foi testado em outras versões anteriores a 2.3;

        OBS2: Deixar um site de redirecionamento após a autenticação (configuração After authentication Redirection URL do Captive Portal) ajuda a retornar a página mais rápido. Porém se a página estiver em cache também será rapido o login, se a página não estiver em cache o retorno pode demorar.

        Abs!

        Augusto

        Thanks ,
        I put this code and set squid use captiveportal for Authentication , and reboot system , but nothing happen and light squid show me IP and show not username .
        I have radius too , do I need another code ?

        when I set authentication method captiveportal squid work but and I see captive portal login page , but after login user see error about access denied , and this error make by squid .

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

          Usei o segundo script em um ambiente onde o portal captive pega as informações dos usuário em um servidor Radius com Windows Server 2012. Funcionou perfeitamente.
          Muito obrigado. Faz um tempo que estava tentando implementar isso para migrar do squid puro para o pfsense.

          Cordialmente;

          Claudir Pereira dos Santos

          1 Reply Last reply Reply Quote 0
          • R
            rlrobs
            last edited by

            Dear mfaridi,

            use this code on check_ip.php

            Note: After replace code, edit captive portal and squid configuration. Click Save.

            
            #!/usr/local/bin/php-cgi -q
            if(!defined(STDIN)){
               define("STDIN", fopen("php://stdin", "r"));
            }
            if(!defined(STDOUT)){
               define("STDOUT", fopen("php://stdout", "r"));
            }
            
            while (!feof(STDIN)) {
            
            $check_ip = trim(fgets(STDIN));
            $dbs = glob("/var/db/captiveportal*.db");
            
            foreach($dbs as $db){
               if(!strpos($db, "_radius")){
                  $status = check_ip($db, $check_ip);
                  break;   
               }   
            }
            if(isset($status)){
               fwrite(STDOUT, "OK user={$status}\n");
            }
            else{
               fwrite(STDOUT, "ERR\n");
            }
            
            } // end While
            
            function check_ip($db, $check_ip){
               exec("sqlite3 {$db} \"SELECT ip FROM captiveportal WHERE ip='{$check_ip}'\"", $ip);
               if($check_ip == $ip[0]){
                  exec("sqlite3 {$db} \"SELECT username FROM captiveportal WHERE ip='{$check_ip}'\"", $user);
                  return $user[0];
               }
            }
            
            ?>
            
            
            1 Reply Last reply Reply Quote 0
            • M
              mfaridi
              last edited by

              @rlrobs:

              Dear mfaridi,

              use this code on check_ip.php

              Note: After replace code, edit captive portal and squid configuration. Click Save.

              
              #!/usr/local/bin/php-cgi -q
              if(!defined(STDIN)){
                 define("STDIN", fopen("php://stdin", "r"));
              }
              if(!defined(STDOUT)){
                 define("STDOUT", fopen("php://stdout", "r"));
              }
              
              while (!feof(STDIN)) {
              
              $check_ip = trim(fgets(STDIN));
              $dbs = glob("/var/db/captiveportal*.db");
              
              foreach($dbs as $db){
                 if(!strpos($db, "_radius")){
                    $status = check_ip($db, $check_ip);
                    break;   
                 }   
              }
              if(isset($status)){
                 fwrite(STDOUT, "OK user={$status}\n");
              }
              else{
                 fwrite(STDOUT, "ERR\n");
              }
              
              } // end While
              
              function check_ip($db, $check_ip){
                 exec("sqlite3 {$db} \"SELECT ip FROM captiveportal WHERE ip='{$check_ip}'\"", $ip);
                 if($check_ip == $ip[0]){
                    exec("sqlite3 {$db} \"SELECT username FROM captiveportal WHERE ip='{$check_ip}'\"", $user);
                    return $user[0];
                 }
              }
              
              ?>
              
              

              Thanks when I use that code and go to squid setting and choose Authentication Method Captive portal and save captive portal too and reset system , user see captive portal login page and they enter password and username , but after login they see error about access denied and they see this

              Screenshot_2016-06-01-14-23-25.png
              Screenshot_2016-06-01-14-23-25.png_thumb

              1 Reply Last reply Reply Quote 0
              • R
                rlrobs
                last edited by

                mfaridi,

                follow print screen of my configurations.
                Note: pfsense 2.3

                Squid-General.png
                Squid-General.png_thumb
                squid-Gerneral2.png
                squid-Gerneral2.png_thumb
                squid-ACLs.png
                squid-ACLs.png_thumb
                squid-Authentication.png
                squid-Authentication.png_thumb
                captive-configuration.png
                captive-configuration.png_thumb

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

                  @rlrobs:

                  mfaridi,

                  follow print screen of my configurations.
                  Note: pfsense 2.3

                  Thanks , Thanks
                  After your guide every thing work good , but I have these problems ;

                  1- Captive portal sometimes need paas and some time no
                  2- I think PFsense system is heavy and config with GUI take time , I have 2 GB of RAM and Dual core CPU
                  3- lightsquid make report , I see IP too , light squid show username and some IPs

                  1 Reply Last reply Reply Quote 0
                  • D
                    denicio
                    last edited by

                    Muito interessante isso. Quando migrar para versão 2.3 vou implementar na rede aqui.
                    Parabéns ao colega Augusto.

                    ;D

                    Denicio.

                    1 Reply Last reply Reply Quote 0
                    • R
                      rlrobs
                      last edited by

                      Augusto,

                      abusando da sua boa vontade.. Fiz um teste aqui cadastrando dois captive portal com radius e um deles não funcionou. Fiz também com duas instâncias com usuŕios locais e o resultado foi o mesmo. Ele só funciona com uma das instancias.. Veja o print:

                      captive.png
                      captive.png_thumb

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

                        Boa tarde rlrobs,

                        Realmente precisamos fazer uma mudança no script,tente com esse:

                        #!/usr/local/bin/php-cgi -q
                        if(!defined(STDIN)){
                          define("STDIN", fopen("php://stdin", "r"));
                        }
                        if(!defined(STDOUT)){
                          define("STDOUT", fopen("php://stdout", "r"));
                        }

                        while (!feof(STDIN)) {

                        $check_ip = trim(fgets(STDIN));
                        $dbs = glob("/var/db/captiveportal*.db");
                        //print_r($dbs);

                        foreach($dbs as $i => $db){
                          if(!strpos($db, "_radius")){
                              $status = check_ip($db, $check_ip);
                        if(isset($status)){
                          $return = "OK user={$status}\n";
                        break;
                        }
                        else{
                          $return = "ERR\n";
                        }
                          } 
                        }
                        fwrite(STDOUT, "{$return}");
                        } // end While

                        function check_ip($db, $check_ip){
                          exec("sqlite3 {$db} "SELECT ip FROM captiveportal WHERE ip='{$check_ip}'"", $ip);
                          if($check_ip == $ip[0]){
                              exec("sqlite3 {$db} "SELECT username FROM captiveportal WHERE ip='{$check_ip}'"", $user);
                              return $user[0];
                          }
                        }

                        ?>

                        Atenciosamente,

                        Augusto P. dos Santos
                        Suporte Técnico

                        Telefones: (11) 2365-4013 / 2365-4014

                        Al. Joaquim Eugênio de Lima Nº 187 4º Andar
                        Jd.Paulista,São Paulo/SP - CEP: 01403-001

                        1 Reply Last reply Reply Quote 0
                        • D
                          derikdk
                          last edited by

                          Estou com proxy ATIVO e o Captive portal ja esta autenticando POREM so autentica se desativar o proxy da estação, ai depois tenho que ativar para conseguir navegar… =/
                          Alguem tem uma ideia do captive autenticar mesmo com o proxy ativo no cliente?

                          1 Reply Last reply Reply Quote 0
                          • D
                            derikdk
                            last edited by

                            Captive portal so demonstra a tela de autenticação com Squid TRANSPARENTE.  :-\

                            1 Reply Last reply Reply Quote 0
                            • V
                              VictorM
                              last edited by

                              @augusto_pereira:

                              Olá pessoal,

                              Há tempos estou buscando a solução para Squid (transparente) autenticado no Captive Portal em desde a versão 2.2.x. Nos debugs encontrei problemas com o script PHP que faziam o processo do Squid parar.

                              A solução foi recriar o script em php. Para aplicar a correção basta trocar o conteúdo do arquivo /usr/local/bin/check_ip.php pelo o conteúdo abaixo e salvar as configurações do Squid e do Captive Portal:

                              #!/usr/local/bin/php-cgi -q
                              if(!defined(STDIN)){
                              define("STDIN", fopen("php://stdin", "r"));
                              }
                              if(!defined(STDOUT)){
                              define("STDOUT", fopen("php://stdout", "r"));
                              }
                              $check_ip = trim(fgets(STDIN));
                              $dbs = glob("/var/db/captiveportal*.db");
                              foreach($dbs as $db){
                              $status = check_ip($db, $check_ip);
                              break;
                              }
                              if(isset($status)){
                              fwrite(STDOUT, "OK user={$status}\n");
                              }
                              else{
                              fwrite(STDOUT, "ERR\n");
                              }

                              function check_ip($db, $check_ip){
                              exec("sqlite3 {$db} "SELECT ip FROM captiveportal WHERE ip='{$check_ip}'"", $ip);
                              if($check_ip == $ip[0]){
                              exec("sqlite3 {$db} "SELECT username FROM captiveportal WHERE ip='{$check_ip}'"", $user);
                              return $user[0];
                              }
                              }
                              ?>

                              OBS: Não foi testado em outras versões anteriores a 2.3;

                              OBS2: Deixar um site de redirecionamento após a autenticação (configuração After authentication Redirection URL do Captive Portal) ajuda a retornar a página mais rápido. Porém se a página estiver em cache também será rapido o login, se a página não estiver em cache o retorno pode demorar.

                              Abs!

                              Augusto

                              O meu deu tudo certo porem a pagina do captive não abre, da erro como se eu tivesse que autenticar pra abrir, coloquei uma pagina na Whitelist e apenas ela abre, como faço para que todas as paginas redirecionarem para autenticação do captive? :(

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

                                @derikdk:

                                Captive portal so demonstra a tela de autenticação com Squid TRANSPARENTE.  :-\

                                Quando o proxy está marcado, a pagina inicial do navegador precisa estar configurada para não passar pelo proxy no cliente.

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

                                Help a community developer! ;D

                                1 Reply Last reply Reply Quote 0
                                • V
                                  VictorM
                                  last edited by

                                  @marcelloc:

                                  @derikdk:

                                  Captive portal so demonstra a tela de autenticação com Squid TRANSPARENTE.  :-\

                                  Quando o proxy está marcado, a pagina inicial do navegador precisa estar configurada para não passar pelo proxy no cliente.

                                  Meu proxy não esta marcado, esta como transparente, e mesmo asssim a pagina do CP não aparece nem mesmo forçando ela colocando a porta, ja configurarei as regras do firewall para passa fora do proxy mas mesmo assim nem sinal do CP abrir

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    derikdk
                                    last edited by

                                    Complementando a dica estava faltando "SOMENTE ISSO"  ;D

                                    @marcelloc:

                                    @derikdk:

                                    Captive portal so demonstra a tela de autenticação com Squid TRANSPARENTE.  :-\

                                    Quando o proxy está marcado, a pagina inicial do navegador precisa estar configurada para não passar pelo proxy no cliente.

                                    ![Sem título.jpg](/public/imported_attachments/1/Sem título.jpg)
                                    ![Sem título.jpg_thumb](/public/imported_attachments/1/Sem título.jpg_thumb)
                                    Rules.jpg
                                    Rules.jpg_thumb

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

                                      @augusto_pereira:

                                      Boa tarde,

                                      Segue o script corrigido para funcionar com Radius.

                                      Utilizei seu script porém só recebo mensagem de acesso negado, ao retirar a autenticação do squid, autentico no captive e navego de boa.

                                      Utilizo o pfsense 2.3 e o pacote nativo do squid. o captive autentica em um Server 2008 R2

                                      Squid transparente.

                                      Depois que alterar o check_ip disse para alterar o squid e captive também, mas quais são essas alterações?

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

                                        Refiz o esquema de alteração do cóigo para Radius e desta vez deu certo, obrigado a quem postou a alteração do código para Radius.

                                        @jrcferrari:

                                        @augusto_pereira:

                                        Boa tarde,

                                        Segue o script corrigido para funcionar com Radius.

                                        Utilizei seu script porém só recebo mensagem de acesso negado, ao retirar a autenticação do squid, autentico no captive e navego de boa.

                                        Utilizo o pfsense 2.3 e o pacote nativo do squid. o captive autentica em um Server 2008 R2

                                        Squid transparente.

                                        Depois que alterar o check_ip disse para alterar o squid e captive também, mas quais são essas alterações?

                                        1 Reply Last reply Reply Quote 0
                                        • V
                                          VictorM
                                          last edited by

                                          @derikdk:

                                          Complementando a dica estava faltando "SOMENTE ISSO"  ;D

                                          @marcelloc:

                                          @derikdk:

                                          Captive portal so demonstra a tela de autenticação com Squid TRANSPARENTE.  :-\

                                          Quando o proxy está marcado, a pagina inicial do navegador precisa estar configurada para não passar pelo proxy no cliente.

                                          Alem dessa configuração tenho que fazer mais alguma pra abri o CP com o proxy setado?

                                          Porque só com essa não abre não kk "Ela abre a pagina que eu liberei mas não redireciona pro CP"

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

                                            VictorM,

                                            Captive Portal somente funciona com proxy transparente. Não há como fazer funcionar com proxy marcado.

                                            Att,

                                            Augusto

                                            Atenciosamente,

                                            Augusto P. dos Santos
                                            Suporte Técnico

                                            Telefones: (11) 2365-4013 / 2365-4014

                                            Al. Joaquim Eugênio de Lima Nº 187 4º Andar
                                            Jd.Paulista,São Paulo/SP - CEP: 01403-001

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