Saltar al contenido principal

Seguridad de Autenticación de OmniEPDG

OmniEPDG implementa múltiples capas de seguridad de autenticación para proteger contra ataques de fuerza bruta, relleno de credenciales y acceso no autorizado desde regiones restringidas.

Tabla de Contenidos

Descripción General

OmniEPDG realiza verificaciones de seguridad al inicio del intercambio IKE_AUTH, antes de operaciones criptográficas costosas:

  1. Verificación de GeoIP (opcional) - Verifica que la IP de origen sea de un país permitido
  2. Verificación de Límite de Tasa - Asegura que la IP/IMSI no haya excedido los umbrales de fallo
  3. Autenticación EAP-AKA - La autenticación estándar 3GPP procede si las verificaciones son exitosas

Limitación de Tasa de Autenticación

La limitación de tasa protege contra ataques de fuerza bruta al rastrear intentos de autenticación fallidos por IP de origen y por IMSI. Cuando se superan los umbrales, se bloquean temporalmente los intentos adicionales.

Cómo Funciona

El limitador de tasa utiliza un algoritmo de ventana deslizante:

  • Cada intento fallido se registra con una marca de tiempo
  • Los intentos más antiguos que la ventana configurada se expiran automáticamente
  • Cuando los fallos en la ventana superan el umbral, se bloquea la fuente
  • Los bloqueos expiran después del período de enfriamiento configurado

Doble Rastreo

Se aplican simultáneamente dos límites independientes:

Tipo de RastreoPropósitoUmbral por DefectoBloqueo por Defecto
Por IPCaptura escáneres de puertos y ataques distribuidos desde fuentes únicas10 fallos / minuto5 minutos
Por IMSICaptura ataques dirigidos a suscriptores específicos5 fallos / minuto10 minutos

Ambas verificaciones deben pasar para que un intento de autenticación proceda. Si se supera cualquiera de los umbrales, se rechaza el intento.

Configuración

config :omniepdg,
# Limitación de tasa por IP
auth_rate_limit_per_ip: 10, # Máximo de fallos antes de bloquear
auth_rate_limit_ip_window_ms: 60_000, # Tamaño de la ventana (1 minuto)
auth_rate_limit_ip_block_ms: 300_000, # Duración del bloqueo (5 minutos)

# Limitación de tasa por IMSI
auth_rate_limit_per_imsi: 5, # Máximo de fallos antes de bloquear
auth_rate_limit_imsi_window_ms: 60_000, # Tamaño de la ventana (1 minuto)
auth_rate_limit_imsi_block_ms: 600_000 # Duración del bloqueo (10 minutos)

Parámetros por IP

ParámetroTipoRequeridoPor DefectoDescripción
auth_rate_limit_per_ipEnteroNo10Máximo de intentos de autenticación fallidos permitidos desde una sola dirección IP dentro del período de ventana antes de bloquear.
auth_rate_limit_ip_window_msEnteroNo60000Tamaño de la ventana deslizante en milisegundos para contar fallos de IP. Los fallos más antiguos que esto no se cuentan.
auth_rate_limit_ip_block_msEnteroNo300000Duración en milisegundos para bloquear una IP después de superar el umbral. El valor por defecto es 5 minutos.

Parámetros por IMSI

ParámetroTipoRequeridoPor DefectoDescripción
auth_rate_limit_per_imsiEnteroNo5Máximo de intentos de autenticación fallidos permitidos para un solo IMSI dentro del período de ventana antes de bloquear. Menor que por IP para capturar ataques dirigidos.
auth_rate_limit_imsi_window_msEnteroNo60000Tamaño de la ventana deslizante en milisegundos para contar fallos de IMSI.
auth_rate_limit_imsi_block_msEnteroNo600000Duración en milisegundos para bloquear un IMSI después de superar el umbral. El valor por defecto es 10 minutos (más largo que los bloqueos por IP para proteger a suscriptores específicos).

Comportamiento en Caso de Éxito

Cuando la autenticación tiene éxito, el limitador de tasa borra todo el historial de fallos para ese par IP/IMSI. Esto permite a los usuarios legítimos que experimentaron fallos transitorios (por ejemplo, problemas de red) recuperarse sin ser penalizados permanentemente.

Ejemplos de Configuración

Entorno de Alta Seguridad

Límites estrictos para entornos con baja tolerancia a intentos fallidos:

config :omniepdg,
auth_rate_limit_per_ip: 5,
auth_rate_limit_ip_window_ms: 120_000, # Ventana de 2 minutos
auth_rate_limit_ip_block_ms: 900_000, # Bloqueo de 15 minutos

auth_rate_limit_per_imsi: 3,
auth_rate_limit_imsi_window_ms: 120_000,
auth_rate_limit_imsi_block_ms: 1_800_000 # Bloqueo de 30 minutos

Cómo funciona: Solo se permiten 5 fallos por IP o 3 fallos por IMSI dentro de una ventana de 2 minutos. Los bloqueos duran de 15 a 30 minutos respectivamente.

Caso de uso: Implementaciones empresariales, bases de suscriptores de alto valor o redes bajo ataque activo.

Entorno Relajado

Límites más permisivos para desarrollo o pruebas:

config :omniepdg,
auth_rate_limit_per_ip: 50,
auth_rate_limit_ip_window_ms: 60_000,
auth_rate_limit_ip_block_ms: 60_000, # Bloqueo de 1 minuto

auth_rate_limit_per_imsi: 20,
auth_rate_limit_imsi_window_ms: 60_000,
auth_rate_limit_imsi_block_ms: 120_000 # Bloqueo de 2 minutos

Cómo funciona: Umbrales más altos y bloqueos más cortos permiten mayor flexibilidad en las pruebas.

Caso de uso: Entornos de desarrollo, pruebas de integración.

Bloqueo de Países por GeoIP

El bloqueo por GeoIP restringe el acceso a llamadas WiFi según la ubicación geográfica de la dirección IP de conexión. Esto es útil para operadores que necesitan limitar el servicio a países específicos por razones regulatorias o comerciales.

Descripción General

Base de datos de geolocalización IP

OmniEPDG utiliza la base de datos DB-IP IP-to-City Lite (CC BY 4.0 — ver priv/geoip/ATTRIBUTION.md). No está comprometida en git (~125 MB); en su lugar, se descarga en el tiempo de construcciónmix release ejecuta la tarea geoip.fetch como un paso de lanzamiento, por lo que cada paquete envía una base de datos actual. (Los desarrolladores/pruebas la obtienen bajo demanda a través del alias mix test.) Debido a esto:

  • Cada sesión está anotada automáticamente con país, ciudad y coordenadas aproximadas — mostradas en la interfaz web ("Columna de Ubicación") y en la respuesta de /api/sessions: country_code, country_name, continent_code, geo_city, geo_latitude, geo_longitude.
  • geoip_enabled solo controla si las conexiones son bloqueadas por país. La anotación ocurre independientemente de esta bandera.

Uso de su propia base de datos (opcional). Establezca geoip_database_path a un MaxMind GeoLite2 (https://www.maxmind.com/en/geolite2/signup) u otra DB-IP/MaxMind MMDB. Si el archivo configurado falta, se utiliza la base de datos empaquetada (descargada). Nota: El EULA de MaxMind GeoLite2 no permite redistribuirlo dentro de un producto, por lo que se utiliza DB-IP Lite (CC BY 4.0) en su lugar.

Para actualizar la base de datos manualmente (DB-IP publica mensualmente):

mix geoip.fetch

Configuración

config :omniepdg,
# Bloquear conexiones por país (la anotación de geolocalización siempre está activa)
geoip_enabled: true,

# Opcional: sobrescribir la base de datos empaquetada con su propia MMDB (País o Ciudad)
# geoip_database_path: "/etc/omniepdg/GeoLite2-Country.mmdb",

# Modo de control de acceso
geoip_mode: :whitelist,

# Lista de países (códigos ISO 3166-1 alpha-2)
geoip_countries: ["AU", "NZ"],

# Manejar IPs desconocidas
geoip_allow_unknown: false,

# Comportamiento cuando la base de datos no está disponible
geoip_fail_open: true

Parámetros

ParámetroTipoRequeridoPor DefectoDescripción
geoip_enabledBooleanoNofalseHabilitar o deshabilitar el control de acceso basado en GeoIP control (bloqueo). Cuando false, todas las IPs están permitidas — pero las sesiones aún están geo-anotadas.
geoip_database_pathCadenaNobase de datos empaquetada dbip-country-lite.mmdbRuta a una base de datos en formato MMDB (País o Ciudad). Vuelve a la base de datos DB-IP empaquetada si no se establece o falta.
geoip_modeÁtomoNo:whitelistModo de control de acceso: :whitelist (solo permitir países listados) o :blacklist (bloquear países listados, permitir otros).
geoip_countriesListaNo[]Lista de códigos de países ISO 3166-1 alpha-2. La interpretación depende de geoip_mode.
geoip_allow_unknownBooleanoNoVer abajoPermitir conexiones desde IPs que no pueden ser geolocalizadas (IPs privadas, rangos desconocidos). El valor por defecto es false para el modo de lista blanca, true para el modo de lista negra.
geoip_fail_openBooleanoNotrueComportamiento cuando la base de datos GeoIP no se carga. Cuando true, permite todas las conexiones (fallo abierto). Cuando false, bloquea todas las conexiones (fallo cerrado).

Modos de Control de Acceso

Modo de Lista Blanca (Recomendado para Llamadas WiFi)

Solo permite conexiones desde países especificados. Todos los demás países son bloqueados.

config :omniepdg,
geoip_enabled: true,
geoip_mode: :whitelist,
geoip_countries: ["AU", "NZ", "FJ"] # Australia, Nueva Zelanda, Fiyi

Cómo funciona: Solo los UE que se conectan desde direcciones IP australianas, neozelandesas o fijianas pueden autenticarse. Todos los demás países son rechazados.

Caso de uso: Operadores que desean restringir las llamadas WiFi a sus áreas de servicio licenciadas.

Modo de Lista Negra

Bloquear conexiones desde países especificados. Todos los demás países están permitidos.

config :omniepdg,
geoip_enabled: true,
geoip_mode: :blacklist,
geoip_countries: ["CN", "RU", "KP", "IR"] # China, Rusia, Corea del Norte, Irán

Cómo funciona: Los UE que se conectan desde los países listados son rechazados. Todos los demás países pueden autenticarse.

Caso de uso: Bloquear regiones de alto riesgo mientras se permite el roaming global.

Manejo de Países Desconocidos

Algunas direcciones IP no pueden ser geolocalizadas:

  • Rangos de IP privadas (10.x.x.x, 192.168.x.x, etc.)
  • Bloques de IP recién asignados que aún no están en la base de datos
  • Nodos de salida de Tor y algunas VPN

El parámetro geoip_allow_unknown controla el comportamiento:

Modogeoip_allow_unknown Por DefectoComportamiento
Lista BlancafalseDesconocido = no en lista blanca = bloqueado
Lista NegratrueDesconocido = no en lista negra = permitido

Para anular el valor por defecto:

config :omniepdg,
geoip_mode: :whitelist,
geoip_allow_unknown: true # Permitir IPs desconocidas incluso en modo de lista blanca

Actualizaciones de Base de Datos

MaxMind actualiza la base de datos GeoLite2 semanalmente. Para actualizar:

  1. Descargue el nuevo archivo GeoLite2-Country.mmdb
  2. Reemplace el archivo existente en la ruta configurada
  3. La base de datos se recarga automáticamente en la próxima búsqueda (no se requiere reinicio)

Códigos de País Comunes

CódigoPaísCódigoPaís
AUAustraliaUSEstados Unidos
NZNueva ZelandaGBReino Unido
CACanadáDEAlemania
FRFranciaJPJapón
SGSingapurHKHong Kong
INIndiaCNChina

Lista completa: ISO 3166-1 alpha-2

Flujo de Seguridad

El flujo completo de seguridad de autenticación:

Métricas

Métricas de Limitación de Tasa

Métrica: epdg_auth_rate_limited_count Tipo: Contador Descripción: Número de intentos de autenticación bloqueados por limitación de tasa Etiquetas:

  • type - Razón del bloqueo: ip (umbral de IP superado) o imsi (umbral de IMSI superado)

Consultas de ejemplo:

# Intentos limitados por tasa por minuto
rate(epdg_auth_rate_limited_count[1m])

# Limitados por tipo
sum by (type) (rate(epdg_auth_rate_limited_count[5m]))

# Alerta: Alta actividad de limitación de tasa
rate(epdg_auth_rate_limited_count[5m]) > 10

Métricas de GeoIP

Métrica: epdg_auth_geoip_blocked_count Tipo: Contador Descripción: Número de intentos de autenticación bloqueados por GeoIP Etiquetas:

  • country - Código de país ISO 3166-1 alpha-2, o UNKNOWN para IPs no resolubles

Consultas de ejemplo:

# Bloqueos de GeoIP por minuto
rate(epdg_auth_geoip_blocked_count[1m])

# Principales países bloqueados
topk(10, sum by (country) (epdg_auth_geoip_blocked_count))

# Alerta: País inusual intentando acceso
increase(epdg_auth_geoip_blocked_count{country="XX"}[1h]) > 100

Resolución de Problemas

Problemas de Limitación de Tasa

Usuarios Legítimos Siendo Bloqueados

Síntomas: Los usuarios informan que no pueden conectarse después de intentos fallidos

Causas posibles:

  • El usuario ingresó credenciales incorrectas múltiples veces
  • Problemas de red causaron tiempos de espera de autenticación contados como fallos
  • Umbrales configurados demasiado bajos para el entorno

Resolución:

  1. Verifique las métricas para la IP/IMSI afectada
  2. Considere aumentar los umbrales si los falsos positivos son comunes
  3. Después de solucionar la causa raíz, el bloqueo expirará automáticamente

Alta Tasa de Intentos Bloqueados

Síntomas: epdg_auth_rate_limited_count aumentando rápidamente

Causas posibles:

  • Ataque de fuerza bruta en progreso
  • UE mal configurado fallando repetidamente la autenticación
  • Ataque de relleno de credenciales

Resolución:

  1. Revise las IPs de origen en los registros para detectar patrones
  2. Considere implementar reglas de firewall a nivel de IP para atacantes persistentes
  3. Verifique la conectividad HSS si los usuarios legítimos están afectados

Problemas de GeoIP

Todas las Conexiones Siendo Bloqueadas

Síntomas: Ningún UE puede conectarse después de habilitar GeoIP

Causas posibles:

  • Archivo de base de datos no encontrado o corrupto
  • Códigos de país incorrectos en la configuración
  • geoip_allow_unknown: false bloqueando IPs privadas en entorno de laboratorio

Resolución:

  1. Verifique que el archivo de base de datos exista en la ruta configurada
  2. Verifique que los códigos de país sean correctos (mayúsculas, 2 letras)
  3. Para laboratorio/desarrollo, establezca geoip_allow_unknown: true
  4. Verifique los registros para advertencias relacionadas con GeoIP

Base de Datos GeoIP No Cargando

Síntomas: Advertencia en los registros: "Base de datos GeoIP no encontrada"

Causas posibles:

  • Ruta del archivo incorrecta
  • Permisos de archivo impiden la lectura
  • El archivo no es un formato MMDB válido

Resolución:

  1. Verifique que el archivo exista: ls -la /etc/omniepdg/GeoLite2-Country.mmdb
  2. Verifique permisos: chmod 644 /etc/omniepdg/GeoLite2-Country.mmdb
  3. Verifique la integridad del archivo descargando una copia nueva de MaxMind

Bloqueos de Países Inesperados

Síntomas: Usuarios de países permitidos siendo bloqueados

Causas posibles:

  • VPN/proxy haciendo que la IP parezca de un país diferente
  • Base de datos GeoIP desactualizada
  • Salida de red corporativa en una ubicación inesperada

Resolución:

  1. Actualice la base de datos GeoIP a la última versión
  2. Verifique la IP de salida real del usuario frente al país esperado
  3. Considere agregar países adicionales si los usuarios navegan a través de redes corporativas