Script Mikrotik para bloquear dispositivos moviles en Firewall

Bloqueando Celulares desde Mikrotik con Firewall (Efectividad 80%)

NOTA: Esta es la version para filtrar por firewall, tambien podes filtrar en bridge filter o bloquear directamente en dhcp-server.

Me toco en un colegio tener que dejar sin navegación a los celulares. En este caso opte por armar un script que recorra la lista de Leases del DHCP Server y filtre a los hosts llamados “Android” o “Windows Phone”, “Blackberry”. Con lo cual podríamos estar filtrando la mayoría de los dispositivos. Creo que se van a escapar los teléfonos chinos que suelen venir con sistemas operativos bastante raros. Con esto he quitado de circulación unos 50 dispositivos en el primer dia. No solo me ha bajado el consumo del CPU del RB 2011 si no que ademas ha mejorado mucho el rendimiento del ancho de banda ya que los celulares están todo el tiempo bajando actualizaciones, hasta incluso estando en el bolsillo del pantalón. Quizas te interese saber como bloquear las actualizaciones de android.

¿Como los bloqueamos?

Cuando abrimos la lista de Leases en “IP — DHCP-Server” veremos un listado de todas las IP dinamicas entregadas en la red. Uno de los campos es “HOST-NAME”. Ese es el que nos interesa. Vean la imagen:

leases cossettini

Lista de nombres de mobiles a filtrar:  (que yo detecte y filtre) (AMPLIAREMOS)

  • android-8d0a00d6eddf7787
  • Android_356434048181508
  • Windows-Phone
  • BLACKBERRY-8A8D
  •  (nombre en blanco)

Entonces esto es lo que vamos a usar para detectarlos.
El primero y segundo, “android, Android” estan porque con mikrotik scripting no encontré un comando para hacer Upper o Lower Case de los caracteres. BLACKBERRY me aparece 2 veces en mayusculas (en otro router) asi que por ahora lo mantendremos asi. Y buscando en los mac-address vendors pude descubrir que muchos de los dispositivos celulares que vienen con el Host-Name en blanco son Samsung, Nokia, etc. Por lo que opte por dropearlos y cuando mucho, si es una laptop… “que le ponga el nombre de equipo”. jeje.

Vamos a lo nuestro:
Para que el script funcione, debemos configurarle el nombre de nuestro DHCP-Server y ademas el nombre de la interfaz de tu LAN en el cual vamos a filtrar (Son las primeras 2 variables). Esta parte es interesante porque si tambien es tu caso, puede ser que en el mismo equipo tengas mas de un DHCP Server o mas de 1 LAN, (una red para directivos y otro para alumnos). Por lo tanto, si esto no seria seteable, estaríamos quitándote navegación a TODOS, y no queremos que los directivos se enojen porque no pueden revisar el facebook en su android. :D.

Muy bien el script recoje los mac-adddress de este listado (leases), y si coinciden con alguno de los nombres que dijimos, se filtra automáticamente sin retorno.
Y digo sin retorno porque si ya lo filtro, por mas que cambie el hostname YA ESTA!!!.
Lo bueno de este script es que estamos filtrando por MAC-Address en el Bridge, cosa que resulta MUY Efectiva.

La linea que dice:

($phoneNAME="androi") || ($phoneNAME="Window")

Esta tomando los primeros 6 caracteres del hostname. Entonces podríamos seguir agregando nombres de dispositivos seteados de fabrica con un nombre por default. Ejemplo: “Iphone”   —  justo 6.  Que yo estimo, “rara vez se modifica”..

Frecuencia de ejecucion del script y leases dhcp:
Lo tengo seteado en el Scheduler cada 10 minutos, Cosa que por mas que el “Lease dhcp” quede activo, ese dispositivo ya no navega. Lo que pueden hacer es setear los Leases del DHCP en 10 minutos (menos tiempo), o bien agregarle al script que tambien patee el lease. Pero ya no es necesario… cuando caduca su tiempo, ya no vuelve a aparecer mas.

# # SCRIPT: FILTRAR CELULARES EN FIREWALL (SIN BRIDGE)

:local DHCPSERVER "dhcp_alumnos";
:local INTERFACEFILTER "bridge-alumnos";

# # AUTOR: NICOLAS DAITSCH
# # www.tech-nico.com

:foreach i in=[/ip dhcp-server lease find dynamic=yes active-server=$DHCPSERVER]  do={
   :local DhcpDynIP [/ip dhcp-server lease get $i address];
   :local DhcpDynMAC [/ip dhcp-server lease get $i mac-address];
   :local DhcpDynHOST [/ip dhcp-server lease get $i host-name];
   :local IfMacExist [/ip firewall filter find src-mac-address="$DhcpDynMAC"];
   :local phoneNAME [:pick $DhcpDynHOST 0 6];

    :if ( ($phoneNAME="androi") || ($phoneNAME="Window") || ($phoneNAME="Androi")  || ($phoneNAME="BLACKB") || ([:len $DhcpDynHOST]=0) ) do={
          :if ($IfMacExist != "") do={
#               :log error ("Filtrando telefono... ".$DhcpDynMAC. " Ya existe")
          } else= {
               /ip firewall filter add action=drop chain=input in-interface=$INTERFACEFILTER src-mac-address="$DhcpDynMAC" comment=$DhcpDynHOST;
                 :log warning ("Se filtro un nuevo dispositivo " . $phoneNAME . " MAC: " .  $DhcpDynMAC);
          }
     }
}

Saludos! ! ! .

________________________
Este post se escribio primero en Tech-nico.com

5 Comentarios

  1. Excelente muchas gracias por compartir. Tengo una duda o problema, no he corrido el script completo porque no quiero deshabilitar a todos los dispositivos, únicamente tome la regla para el firewall y el boqueo funciona, pero lo que no funciona es que el equipo sigue apareciendo en el lease del DHCP por más que haya expirado su sesión, vuelve a tomar una IP. Si bien es cierto cortó la navegación, pero si me interesa que no me siga ocupando una IP ¿cuál podría ser el problema?

  2. Patricio, Es porque si queres que trabaje a ese nivel tenes que bloquear en Layer 2. En ese caso te va a servir el script para bloquear en Bridge.
    Saludos

  3. @cristopher Lo que decis quizas se pueda pero es complicado. Yo lo encararia diferente. Dejarlos con mismo pool, y modificar el script para que depende del dispositivo lo agregue a un firewall > address-list distinto. Luego manejas los address list. Facil y practico.!.

  4. hola, yo estoy probando el script pero tengo una duda es necesario crear el bridge, en este cado brifge_alumnos para la variable INTERFACEFILTER o.. es posible poner una vlan en el lugar del bridge_alumnos?

Deja un comentario