Automatizar MAC permitidas en portal cautivo…
-
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.

 -
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
-
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
-
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
-
Buenas noches, podrías utilizar Firewall: Schedules.
Saludos.-
-
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
-
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
-
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