[RouterOS] leiniercs-antiClon-0.7

 Leinier Cruz Salfran     08/Feb/2019
AntiClon, Mikrotik, Recetas, RouterOS, Virtuales


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.7
  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 IP->DHCP Client
  8. Editar la entrada en la que deseemos aplicar el guión.
  9. Escribir en el campo Script
    :local leiniercsAntiClon [:parse [/system script get leiniercs-antiClon-0.7 source]]; $leiniercsAntiClon "vwlan1"

Nota: Fijarse que se utiliza vwlan1 debido a que el nombre de la interfaz que se está editando es vwlan1. Se debe sustituir este valor por el adecuado según su escenario.

Guión

# Fecha: 4-feb-2019 4:00 pm
# Autor: Leinier Cruz Salfran <leiniercs@gmail.com>
# Nombre: antiClon
# Version: 0.7
# 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.7
#     * Permisos: lectura, escritura
#   - Editar la entrada deseada en el modulo "Cliente DHCP" y modificar los campos segun se indica
#     a continuacion:
#     * Guion: :local leiniercsAntiClon [:parse [/system script get leiniercs-antiClon-0.7 source]]; $leiniercsAntiClon "<nombreInterfazDHCP>" "[nombreWLAN]"
#   - Parametros a reemplazar:
#                              <nombreInterfazDHCP>: Nombre de la interfaz por la que se obtiene la concesion DHCP.
#                                                    Parametro obligatorio.
#                              [nombreWLAN]: Nombre de la interfaz inalambrica por la que se obtiene el enlace.
#                                            Parametro opcional.
#
# Logica:
#   Si se ha obtenido la concesion DHCP en la interfaz en proceso entonces:
#     - Verifica las propiedades de conexion del punto de acceso al que esta
#       conectada y si se detectan los patrones de conexion a un clon entonces:
#       * Agrega la MAC del punto de acceso a la lista de conexiones no permitidas.
#       * Desconecta del punto de acceso.
#       * Libera la concesion DHCP obtenida.
#
# Variables que se pueden ajustar:
#   - usarListaConexiones: Define si se utilizan las listas de conexion para evitar
#                          la reconexion al mismo clon. Tipo: verdadero o falso

:local nombreInterfazDHCP "$1"
:local nombreWLAN "$nombreInterfazDHCP"
:local usarListaConexiones true
:local estado [/ip dhcp-client get [find interface="$nombreInterfazDHCP" disabled=no] status]

:if ([:len $2] > 0) do={
  :set nombreWLAN $2
}

:if ($estado = "bound") do={
  :local macAddress [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] mac-address]
  :local bridge [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] bridge]
  :local radioName [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] radio-name]
  :local routerOSVersion [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] routeros-version]
  :local txSignalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] tx-signal-strength]
  :local signalStrength [/interface wireless registration-table get [find ap=yes interface="$nombreWLAN"] signal-strength-ch0]
  :local equipoOrigen

  :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@$nombreWLAN: detected cloned wireless network from $equipoOrigen source, disconnecting"

    :if ($usarListaConexiones = true) do={
      /interface wireless connect-list add interface="$nombreWLAN" mac-address="$macAddress" signal-range="$signalStrength..0" connect=no disabled=no
    }

    /interface wireless registration-table remove [find ap=yes interface="$nombreWLAN"]
    /ip dhcp-client release [find interface="$nombreInterfazDHCP"]
  }
}