[RouterOS] leiniercs-antiClon-0.8

 Leinier Cruz Salfran     23/feb/2019
AntiClon, Mikrotik, Recetas, RouterOS


Tabla de contenidos

Introducción

Esta receta trata sobre el mecanismo a implementar para evitar la creación del enlace a una red inalambrica creada desde otro equipo Mikrotik, Nanostation o TP-LINK. Con esto garantizaremos la creación del enlace a un equipo genuino con el que deseemos conectar.

Procedimiento de instalación

Se utilizará Winbox para implementar esta receta en nuestro RouterOS. Lo primero que se debe hacer es iniciar sesión, una vez completado este paso, procedemos a la implementación.

WinBox

  1. Abrir la ventana System->Scripts
  2. Crear un nuevo guión
  3. Asignar el nombre leiniercs-antiClon-0.8
  4. Establecer permisos de lectura y escritura
  5. Pegar todo el texto del guión en el campo Source
  6. Guardar los cambios
  7. Abrir System->Scheduler
  8. Crear una nueva planificación
  9. Asignar el nombre leiniercs-antiClon-0.8
  10. Asignar la fecha de incio a Jan/01/1970
  11. Asignar la hora de incio a 00:00:00
  12. Especificar el intervalo a 00:01:00
  13. Establecer permisos de lectura y escritura
  14. Escribir en el campo Evento:
    /system script run leiniercs-antiClon-0.8

Guión

# Fecha: 22-feb-2019 7:16 pm
# Autor: Leinier Cruz Salfran <leiniercs@gmail.com>
# Nombre: antiClon
# Version: 0.8
# Licencia: GPLv3
# Grupo en Telegram: https://t.me/ccari_grupo
#
# Como instalar:
#   - Pegar todo el texto de este archivo en un nuevo guion con las siguientes
#     caracteristicas:
#     * Nombre: leiniercs-antiClon-0.8
#     * Permisos: lectura, escritura
#   - Crear una planificacion con las siguientes caracteristicas:
#     * Nombre: leiniercs-antiClon-0.8
#     * Fecha de inicio: Jan/01/1970
#     * Hora de inicio: 00:00:00
#     * Intervalo: 00:01:00
#     * Permisos: lectura, escritura
#     * Evento: /system script run leiniercs-antiClon-0.8
#
# Nota: Vaciar el listado de lista de conexiones antes de comenzar a utilizar el guion.
#       - Abrir la ventana 'Wireless'
#       - Cambiar la pestaña 'Connect List'
#       - Eliminar/deshabilitar todo
#
# Logica:
#   Iterar por todas las interfaces inalambricas existentes en el sistema que usen alguno
#   de los modos de operacion de estacion, y:
#     - Verifica las propiedades de conexion del punto de acceso al que esta conectada la
#      interfaz por la que se itera y si se detectan los patrones de conexion a un clon
#      entonces:
#       * Agrega la MAC del punto de acceso del clon a la lista de conexiones no permitidas
#         en todas las interfaces inalambricas existentes en el sistema que usen alguno de
#         los modos de operacion de estacion.
#       * Desconecta del punto de acceso.
#       * Libera la concesion DHCP si se obtuvo.

##
# Variables no modificables para uso en el guion
#
:local interfazInalambrica1;
:local interfazInalambrica2;
:local nombreWLAN1;
:local nombreWLAN2;
:local macAddress;
:local bridge;
:local radioName;
:local routerOSVersion;
:local txSignalStrength;
:local signalStrength;
:local equipoOrigen;

##
# Itera por cada una de las interfaces inalambricas detectadas para comprueba los parametros del enlace
#
:foreach interfazInalambrica1 in=[/interface wireless find where (mode=station || mode=station-bridge || mode=station-pseudobridge || mode=station-pseudobridge-clone || mode=station-wds) && running=yes && disabled=no] do={
  :set nombreWLAN1 [/interface wireless get $interfazInalambrica1 name];
  :set macAddress [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] mac-address];
  :set bridge [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] bridge];
  :set radioName [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] radio-name];
  :set routerOSVersion [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] routeros-version];
  :set txSignalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] tx-signal-strength];
  :set signalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN1"] signal-strength-ch0];

  ##
  # Establece el origen del clon
  #
  :if ($bridge = true or [:len $routerOSVersion] > 0 or [:len $radioName] > 0 or [:len $txSignalStrength] > 0) do={
    :if ([:len $routerOSVersion] > 0) do={
      :set equipoOrigen "RouterOS"
    } else={
      :set equipoOrigen "Unknown"
    }

    :log warning "$macAddress@$interfazInalambrica1: detected cloned wireless network from $equipoOrigen source, adding to blacklist and disconnecting"

    ##
    # Itera nuevamente por cada una de las interfaces inalambricas detectadas para agregar el clon a la lista negra en cada una
    #
    :foreach interfazInalambrica2 in=[/interface wireless find where (mode=station || mode=station-bridge || mode=station-pseudobridge || mode=station-pseudobridge-clone || mode=station-wds) && running=yes && disabled=no] do={
      :set nombreWLAN2 [/interface wireless get $interfazInalambrica2 name];
      /interface wireless connect-list add interface="$nombreWLAN2" mac-address="$macAddress" signal-range="$signalStrength..0" connect=no disabled=no
      /interface wireless registration-table remove [find ap=yes interface="$nombreWLAN2"]
      /ip dhcp-client release [find interface="$nombreWLAN2"]
    }
  }
}