Script Mikrotik para bloquear dispositivos móviles con DHCP

El script nacio por un comentario de nuestro colaborador “Felix Serrato” que NO vio la necesidad de bloquear los dispositivos celulares usando firewall o bridge filter. Es decir, bloquearlos directamente en los “leases” del dhcp-server y ademas que el board Mikrotik utilice menos recursos (si es que hay muchos dispositivos para bloquear en tu red).

Efectividad: 

Si bien el script es muy efectivo, probando me encontré con la particularidad de que no bloquea al instante. Te bloquea el lease (para que, A tu mac-address ya no le pueda entregar nunca mas una direccion IP), pero al filtrar por DHCP, no te quita la navegacion hasta que tu dispositivo vuelva a pedir una nueva solicitud DHCP. Una vez que apago y enciendo el Wifi de mi celular queda en “Obteniendo una direccion IP”. Sin embargo los 2 scripts mencionados al principio (por bridge y por firewall), filtran en el acto.

Funcionamiento:

El script busca en la lista de dhcp-server leases todos los clientes conectados con el flag “dynamic=yes” y donde el dhcp server sea el que definimos en la variable DHCPSERVER. Esto es por si tenemos mas de 1 servidor dhcp para no filtrar en todos. Busca el host-name coincida con “Android”, “iPad”, etc, entonces agrega un nuevo lease con el flag “block-access=yes” para ese mac. Finalmente libera a todos los leases con ese nombre para no ocupar una direccion IP.

Solo hay que definirle el nombre del DHCP-server.

########## INICIO DEL SCRIPT
:local DHCPSERVER "dhcp1";
# # www.tech-nico.com 

:foreach i in=[/ip dhcp-server lease find dynamic=yes active-server=$DHCPSERVER] do={
	:local DhcpDynMAC [/ip dhcp-server lease get $i mac-address];
                :local DhcpDynCLIENTID [/ip dhcp-server lease get $i active-client-id];
	:local DhcpDynHOST [/ip dhcp-server lease get $i host-name];
	:local phoneNAME [:pick $DhcpDynHOST 0 4];

	:if ( ($phoneNAME="BLUS") || ($phoneNAME="iPad") || ($phoneNAME="andr") || ($phoneNAME="Andr") || ($phoneNAME="Wind") || ($phoneNAME="iPho") || ($phoneNAME="BLAC") ) do={
		/ip dhcp-server lease add block-access=yes mac-address="$DhcpDynMAC" use-src-mac=yes comment="$DhcpDynHOST" server="$DHCPSERVER" client-id="$DhcpDynCLIENTID";
	}
}
/ip dhcp-server lease remove [find host-name~"BLUS*"]
/ip dhcp-server lease remove [find host-name~"android*"]
/ip dhcp-server lease remove [find host-name~"Android*"]
/ip dhcp-server lease remove [find host-name~"Windows*"]
/ip dhcp-server lease remove [find host-name~"iPad*"]
/ip dhcp-server lease remove [find host-name~"iPhone*"]
/ip dhcp-server lease remove [find host-name~"BLACKBERRY*"]
############## FIN DEL SCRIPT

18 Comentarios

  1. Solo necesitas cambiar esta línea de código
    ————————
    /ip dhcp-server lease add block-access=yes mac-address=”$DhcpDynMAC” use-src-mac=yes comment=”$DhcpDynHOST” server=”$DHCPSERVER” client-id=”$DhcpDynCLIENTID”;
    ————————-

    por este otro
    ————————
    /ip dhcp-server lease add insert-queue-before=first mac-address=”$DhcpDynMAC” rate-limit=\
    80k/180k use-src-mac=yes;
    ————————

    recuerda que 80k es de subida, puedes ponerle lo que desees y 180k es de bajada asi que tu decide que es lo que mas te conviene… checalo y comentanos si te funciono

  2. Hola gente, el script funciona pero no respeta el dynamic=yes porque me bloquea todo lo que figura como “Android”, como ser en mi caso cree una regla estatica para que le asigne siempre la misma ip a mi celular Androd pero al correr el script me da de baja la regla y crea una nueva con el bloqueo por mas que este estatica y no dinamica, hay forma de solucionar esto, gracias.

  3. Daniel Barros, con el Winbox vas al menu “IP / DHCP Server / Leases”. Lo mismo que le respondi a Roberto Vilema.

    Tenes que quitarle el “Blocked” al Mac bloqueado.

    Como en la imagen:
    DHCP Server // Leases // Blocked

  4. Muy buena tu página amigo. Como comentario si a los equipos celulares les ponen IPs fijas, se saltan el bloqueo. Trabajo en escuela y me pasó con los alumnos, siempre buscan una forma de saltar el filtro.

    Saludos

    Un gran trabajo y aporte el tuyo. Me saco el sombrero, ojalá sigas con la ayuda!!

  5. O script não funciona,

    :foreach i in=[/ip dhcp-server lease find dynamic=yes active-server=$dhcp1] do={
    :local DhcpDynMAC [/ip dhcp-server lease get $i mac-address];
    :local DhcpDynCLIENTID [/ip dhcp-server lease get $i active-client-id];
    :local DhcpDynHOST [/ip dhcp-server lease get $i host-name];
    :local phoneNAME [:pick $DhcpDynHOST 0 4];

    :if ( ($phoneNAME=”Galaxy”) || ($phoneNAME=”iPad”) || ($phoneNAME=”andr”) || ($phoneNAME=”Andr”) || ($phoneNAME=”Wind”) || ($phoneNAME=”iPho”) || ($phoneNAME=”BLAC”) ) do={
    /ip dhcp-server lease add block-access=yes mac-address=”$DhcpDynMAC” use-src-mac=yes comment=”$DhcpDynHOST” server=”$dhcp1″ client-id=”$DhcpDynCLIENTID”;
    }
    }
    /ip dhcp-server lease remove [find host-name~”Galaxy*”]
    /ip dhcp-server lease remove [find host-name~”android*”]
    /ip dhcp-server lease remove [find host-name~”Android*”]
    /ip dhcp-server lease remove [find host-name~”Windows*”]
    /ip dhcp-server lease remove [find host-name~”iPad*”]
    /ip dhcp-server lease remove [find host-name~”iPhone*”]
    /ip dhcp-server lease remove [find host-name~”BLACKBERRY*”]

    Ele simplesmente deleta todos do lease e nao apenas do dhcp1 como informei no script.

Deja un comentario