Bloqueando Celulares desde Mikrotik con Bridge filter (Efectividad 80%)
NOTA: Esta es la version para filtrar por bridge, tambien podes filtrar en firewall 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. Tambien se estan escapando los celulares con SO de Apple (no lo pude setear porque no se cual es su Host Name). Pero bueno, no queremos llegar a la perfección.. al menos 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.
¿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:
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 del Bridge 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 bridge, (uno 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.
# # SCRIPT: FILTRAR CELULARES EN BRIDGE :local DHCPSERVER "dhcp_alumnos"; :local BRIDGEFILTER "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 [/interface bridge filter find src-mac-address="$DhcpDynMAC/FF:FF:FF:FF:FF:FF"]; :local phoneNAME [:pick $DhcpDynHOST 0 4]; :if ( ($phoneNAME="iPad") || ($phoneNAME="S410") || ($phoneNAME="Andr") || ($phoneNAME="LANI") || ($phoneNAME="Ipho") || ($phoneNAME="S220") || ($phoneNAME="S120") || ($phoneNAME="BLUS") || ($phoneNAME="iPod") || ($phoneNAME="andr") || ($phoneNAME="Wind") || ($phoneNAME="iPho") || ($phoneNAME="BLAC") || ([:len $DhcpDynHOST]=0) ) do={ :if ($IfMacExist != "") do={ # :log error ("Filtrando telefono... ".$DhcpDynMAC. " Ya existe") } else= { /interface bridge filter add action=drop chain=input in-bridge=$BRIDGEFILTER src-mac-address="$DhcpDynMAC/FF:FF:FF:FF:FF:FF" comment=$DhcpDynHOST; :log warning ("Se filtro un nuevo dispositivo " . $phoneNAME . " MAC: " . $DhcpDynMAC); } } }
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».
ATENTOS: Si alguien sabe como aparece el hostname del IPhone u algun otro dispositivo que no este contemplado, por favor deje un comentario y vamos actualizando el script.
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.
Saludos! ! ! .
________________________
Este post se escribio primero en Tech-nico.com