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

    Automatizar MAC permitidas en portal cautivo…

    Scheduled Pinned Locked Moved Español
    8 Posts 4 Posters 1.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.
    • A
      avisponrock
      last edited by

      Hola,

      tengo la sgte situacion; no es un problema pero si es una consulta acerca de como (si es que es posible) automatizar las MAC allowed en el portal captivo.

      Tengo una red basada en pfsense 2.3.1, de donde va a un AP UBNT Rocket M5 en modo bridge. A este rocket se conectan una cantidad X de usuarios, cada uno con Ubnt Nanoloco M5 o similar. Cada nanoloco recibe la direccion IP desde pfsense.

      El control de cada usuario y ancho de banda asignado es manejado por el portal captivo de pfsense en su seccion "MACs" en donde se agrega el nombre del usuario, su estado (block / pass), su MAC, asi como tambien su ancho de banda de bajada / subida.

      Hasta ahi todo funciona perfecto. Si el usuario esta habilitado se pone en "Pass", si al contrario queremos cortar el acceso a internet, ponemos "Block" y lo envia a nuestra pagina configurada en el portal captivo.

      LA CONSULTA ES LA SIGUIENTE:

      ¿Es posible automatizar la accion "Pass" y "Block" para por ejemplo que en determinado dia del mes su estado cambie de "Pass" a Block"?

      Se me ocurre (creo yo en mi desconocimiento), que la funcion CRON podria hacer algo asi, pero necesito el comando que haga el cambio de "pass" a "block". :-\

      Alguna idea? o quiza otra alternativa?

      Invoco a Bellera con su sabiduria

      Saludos y desde ya gracias.

      captive.png
      captive.png_thumb
      ![Captive 2.png](/public/imported_attachments/1/Captive 2.png)
      ![Captive 2.png_thumb](/public/imported_attachments/1/Captive 2.png_thumb)

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

        Hola

        Un cli php script que recorre la conf de pfSense del captive portal y si la action esta definida en block y la mac coincide con alguna de las las macs definidas en el array $macs[] define la action en pass y escribe la conf.

        #!/usr/local/bin/php
        /*
        mac-action on captive portal via Cron - define Cron in package cron:
        /usr/local/bin/php /scripts/mac-action.php
        
        By Javier Castañón - https://javvasta.com/
        2016
        */
        require_once("config.inc");
        require_once("globals.inc");
        
        global $config;
        $config = parse_config(true);
        if (!is_array($config['captiveportal']['portal'])) {
        	$config['captiveportal']['portal'] = array();
        }
        $show = &$config['captiveportal']['portal']['passthrumac'];
        $macs = array("0d:22:c6:34:c4:b1","0d:42:b4:48:d6:a8");
        $j = 0;
            while (!empty($config['captiveportal']['portal']['passthrumac']["$j"])) {
              //echo config['captiveportal']['portal']['passthrumac']["$j"]
              if (strpos($config['captiveportal']['portal']['passthrumac']["$j"]['action'], "block") !== false && 
              in_array($config['captiveportal']['portal']['passthrumac']["$j"]['mac'],$macs)) {
                $config['captiveportal']['portal']['passthrumac']["$j"]['action'] = "pass";
                echo "\n escrito un pass \n";
              }
              $j++;
              }
        write_config();
        foreach ($show as $sec) {
          print_r($sec);
        }
        
        ?>
        

        Lo he testeado en pfSense 2.3.1, pero no lo he depurado, así que si usais el código o parte de él, haced 1º pruebas y tests (no en producción directamente) :)

        Salu2

        Javier Castañón
        Técnico de comunicaciones, soporte y sistemas.

        Mi web: https://javcasta.com/

        Soporte scripting/pfSense https://javcasta.com/soporte/

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

          Jav

          Gracias x tu respuesta. Ahora surgen nuevas preguntas:

          El script que sugieres cambia el estado de Block a pass o al reves?

          El script aplica a todas las Mac definidas o puede generarse un script por cada Mac individualmente?

          Te explico: los usuarios tienen vencimiento para pagar los días 10 de cada mes. La idea es que en la medida que paguen, deshabilito el script que corresponda al usuario que pagó. Así quienes no pagan, se corta automáticamente.

          Slds

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

            Hola

            El script que sugieres cambia el estado de Block a pass o al reves?

            lee lo que ya he escrito:

            Un cli php script que recorre la conf de pfSense del captive portal y si la action esta definida en block y la mac coincide con alguna de las las macs definidas en el array $macs[] define la action en pass y escribe la conf.

            Las macs a aplicar ese script se definirian en el array del script  …

            Si el scripting en PhP no es lo vuestro (por lo que comentas me da que es así). Os sugiero:

            -Pedir soporte  en pfsense.org o

            -Postear un Bounty (una necesidad personalizada, dando un presupuesto inicial que un programador oficial de pfSense os puede solucionar con un script con garantias): https://forum.pfsense.org/index.php?board=34.0

            Salu2

            Javier Castañón
            Técnico de comunicaciones, soporte y sistemas.

            Mi web: https://javcasta.com/

            Soporte scripting/pfSense https://javcasta.com/soporte/

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

              Buenas noches, podrías utilizar Firewall: Schedules.

              Saludos.-

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

                @avisponrock:

                Hola,

                tengo la sgte situacion; no es un problema pero si es una consulta acerca de como (si es que es posible) automatizar las MAC allowed en el portal captivo.

                Tengo una red basada en pfsense 2.3.1, de donde va a un AP UBNT Rocket M5 en modo bridge. A este rocket se conectan una cantidad X de usuarios, cada uno con Ubnt Nanoloco M5 o similar. Cada nanoloco recibe la direccion IP desde pfsense.

                El control de cada usuario y ancho de banda asignado es manejado por el portal captivo de pfsense en su seccion "MACs" en donde se agrega el nombre del usuario, su estado (block / pass), su MAC, asi como tambien su ancho de banda de bajada / subida.

                Hasta ahi todo funciona perfecto. Si el usuario esta habilitado se pone en "Pass", si al contrario queremos cortar el acceso a internet, ponemos "Block" y lo envia a nuestra pagina configurada en el portal captivo.

                LA CONSULTA ES LA SIGUIENTE:

                ¿Es posible automatizar la accion "Pass" y "Block" para por ejemplo que en determinado dia del mes su estado cambie de "Pass" a Block"?

                Se me ocurre (creo yo en mi desconocimiento), que la funcion CRON podria hacer algo asi, pero necesito el comando que haga el cambio de "pass" a "block". :-\

                Alguna idea? o quiza otra alternativa?

                Invoco a Bellera con su sabiduria

                Saludos y desde ya gracias.

                Lo mas conveniente es que ocupes un servidor freeradius externo al pfsense y lo configures en el portal cautivo para aser el filtrado por mac, desde el servidor radius puede aser mucho mas funciones a vanzadas de las que estas requiriendo como darle un burst de velocidad, cortes automaticos, asignar cantidad de trafico, redirecionar clientes pagians etc muchas funciones de las cuales no tengo mas ideas por el momento

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

                  Hola

                  Comento algo más el script, a ver si os aclarais

                  #!/usr/local/bin/php
                  /*
                  mac-action on captive portal via Cron - define Cron in package cron:
                  
                  EJECUTAR EL DIA 9 DE CADA MES A LAS 23:59
                  /usr/local/bin/php /scripts/mac-action.php
                  
                  By Javier Castañón - https://javvasta.com/
                  2016
                  */
                  require_once("config.inc");
                  require_once("globals.inc");
                  
                  global $config;
                  $config = parse_config(true);
                  if (!is_array($config['captiveportal']['portal'])) {
                  	$config['captiveportal']['portal'] = array();
                  }
                  
                  //AQUI SE DEFINEN LAS MAC QUE QUEREMOS QUE SE DESBLOQUEEN
                  $macs = array("0d:22:c6:34:c4:b1","0d:42:b4:48:d6:a8");
                  //SI FUERAN MUCHAS, UNA ALTERNATIVA SERIA PONERLAS EN UN FICHERO
                  //Y CONSTRUIR EL ARRAY MACS LEYENDO DESDE EL FICHERO
                  //O UNA CONSULTA A UNA BBDD MYSQL, ETC
                  //O UNA CONSULTA A UN FREERADIUS, ETC
                  
                  $j = 0;
                      while (!empty($config['captiveportal']['portal']['passthrumac']["$j"])) {
                        //echo config['captiveportal']['portal']['passthrumac']["$j"]
                        if (strpos($config['captiveportal']['portal']['passthrumac']["$j"]['action'], "block") !== false && 
                        in_array($config['captiveportal']['portal']['passthrumac']["$j"]['mac'],$macs)) {
                          $config['captiveportal']['portal']['passthrumac']["$j"]['action'] = "pass";
                          echo "\n escrito un pass \n";
                        }
                        $j++;
                        }
                  write_config();
                  /*
                  //Descomentar para ver resultados por consola
                  $show = &$config['captiveportal']['portal']['passthrumac'];
                  foreach ($show as $sec) {
                    print_r($sec);
                  }
                  */
                  ?>
                  

                  Salu2

                  Javier Castañón
                  Técnico de comunicaciones, soporte y sistemas.

                  Mi web: https://javcasta.com/

                  Soporte scripting/pfSense https://javcasta.com/soporte/

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

                    Hola

                    Y si lo que quieres es que todas las mac pasen su "action" de block a pass

                    #!/usr/local/bin/php
                    /*
                    mac-action on captive portal via Cron - define Cron in package cron:
                    
                    EJECUTAR EL DIA 9 DE CADA MES A LAS 23:59
                    /usr/local/bin/php /scripts/mac-action.php
                    
                    By Javier Castañón - https://javvasta.com/
                    2016
                    */
                    require_once("config.inc");
                    require_once("globals.inc");
                    
                    global $config;
                    $config = parse_config(true);
                    if (!is_array($config['captiveportal']['portal'])) {
                    	$config['captiveportal']['portal'] = array();
                    }
                    
                    $j = 0;
                        while (!empty($config['captiveportal']['portal']['passthrumac']["$j"])) {
                          //echo config['captiveportal']['portal']['passthrumac']["$j"]
                          if (strpos($config['captiveportal']['portal']['passthrumac']["$j"]['action'], "block") !== false) {
                            $config['captiveportal']['portal']['passthrumac']["$j"]['action'] = "pass";
                            echo "\n escrito un pass \n";
                          }
                          $j++;
                          }
                    write_config();
                    /*
                    //Descomentar para ver resultados por consola
                    $show = &$config['captiveportal']['portal']['passthrumac'];
                    foreach ($show as $sec) {
                      print_r($sec);
                    }
                    */
                    ?>
                    

                    Salu2

                    Javier Castañón
                    Técnico de comunicaciones, soporte y sistemas.

                    Mi web: https://javcasta.com/

                    Soporte scripting/pfSense https://javcasta.com/soporte/

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