Compliance

Verificación de contenido con restricción geográfica para streaming y cumplimiento normativo

5 min read Published Updated 930 words

La mayoría de los servicios de streaming y las plataformas sensibles al cumplimiento normativo no logran aplicar correctamente las restricciones geográficas en el 60-80% de las IP residenciales, según auditorías internas de tres grandes CDN. La causa raíz no son bases de datos IP deficientes, sino un flujo de trabajo de pruebas que nunca ejercita los casos límite que realmente rompen el geo-fencing. Quienes tratan el bloqueo geográfico como una simple consulta de IP a país están construyendo un colador, no una barrera.

Por qué fallan las consultas IP ingenuas a escala

El enfoque estándar —consultar MaxMind o una base de datos GeoIP similar para la country_code— funciona para IP de centros de datos y grandes bloques de ISP. Falla catastróficamente para IP de operadores móviles que enrutan a través de una puerta de enlace central en otro país, para ISP satelitales con estaciones terrestres en múltiples jurisdicciones, y para cualquier IP asignada antes de que se trazaran las fronteras geopolíticas actuales. El RFC 8805 define un formato de alimentación de geolocalización, pero la mayoría de los proveedores aún sirven datos desactualizados o agregados. Un estudio de 2023 encontró que el 34% de las IP en la base de datos de RIPE NCC tenían un código de país que no coincidía con la dirección registrada del titular. Probar contra una sola base de datos no es probar; es pensar con ilusiones.

Detección de VPN y proxies: la evasión que no estás probando

Los servicios de streaming invierten mucho en listas de bloqueo de VPN, pero esas listas solo son tan buenas como el entorno de pruebas que las valida. El error común es probar desde un endpoint VPN conocido (por ejemplo, el nodo de salida de un proveedor comercial) y darlo por terminado. Los atacantes reales rotan IP cada 60 segundos, usan redes de proxies residenciales o se tunelizan a través de una IP de salida de un proveedor de nube que aún no está marcada. Un flujo de trabajo de verificación adecuado debe incluir un script que obtenga una lista de proxies abiertos conocidos, nodos de salida VPN y relays Tor desde fuentes públicas (por ejemplo, https://check.torproject.org/exit-addresses), luego envíe una solicitud al endpoint con restricción geográfica de tu servicio y verifique el código de estado de la respuesta. Aquí tienes un bucle de prueba mínimo usando curl y jq:

#!/bin/bash
# Test geo-restricted endpoint against a list of suspicious IPs
ENDPOINT="https://api.example.com/geo/check"
while IFS= read -r ip; do
  result=$(curl -s -o /dev/null -w "%{http_code}" --resolve "api.example.com:443:$ip" "$ENDPOINT")
  if [[ "$result" != "403" ]]; then
    echo "FAIL: $ip returned $result (expected 403)"
  fi
done < /tmp/suspicious_ips.txt

Este script usa --resolve para forzar la conexión a través de una IP específica mientras preserva el encabezado host original —una técnica que sortea la mayoría de las comprobaciones geográficas a nivel de CDN. Si tu servicio devuelve un 200 o 302 para alguna de esas IP, tu geo-fencing está roto.

Brechas de geolocalización IPv6 e IP de operadores móviles que cruzan fronteras

La precisión de la geolocalización IPv6 es inferior al 50% en muchas regiones, especialmente en Europa y Asia, donde los operadores usan un único prefijo /32 para múltiples países. Un teléfono móvil en Estrasburgo, Francia, puede parecer que se origina desde la red central de un operador alemán si el operador utiliza un único punto de anclaje. El encabezado X-Forwarded-For a menudo contiene la dirección IPv4 de la puerta de enlace NAT del operador, no la dirección IPv6 del usuario. Para probar esto, envía solicitudes desde un dispositivo de prueba conectado a una red móvil en una región fronteriza (por ejemplo, Basilea, Suiza; El Paso, Texas) y compara el resultado de geolocalización de tu servicio con las coordenadas GPS reales del dispositivo. Si la discrepancia supera los 100 km, tu equipo de cumplimiento tiene un problema: el RGPD exige que el procesamiento de datos esté vinculado a la ubicación real del usuario, no a la del operador.

Pruebas de cumplimiento normativo más allá de la verificación IP

El RGPD y la COPPA no se preocupan por tu proveedor de base de datos IP. Les importa si un usuario en la UE recibe contenido conforme a la UE y si un usuario menor de 13 años en EE. UU. tiene bloqueada la recopilación de datos personales. Probar las restricciones geográficas para cumplimiento significa que debes verificar que la respuesta de tu servicio —no solo el código de estado HTTP— cambie correctamente según la ubicación detectada. Por ejemplo, un servicio de streaming que ofrece catálogos diferentes por país debe asegurarse de que un usuario en el Reino Unido vea el catálogo del Reino Unido, un usuario en Francia vea el catálogo francés y un usuario en un territorio sin licencia vea una página de "no disponible". La prueba debe incluir la verificación del cuerpo de la respuesta en busca de cadenas específicas de la región, cookies y destinos de redirección. Un único curl con --header "CF-IPCountry: GB" (si usas Cloudflare) es una prueba rápida de humo, pero solo prueba la capa de CDN, no tu lógica de aplicación. Construye un conjunto de pruebas que falsifique el encabezado X-Forwarded-For con IP de cada país objetivo, luego analiza la respuesta en busca de un identificador único conocido (por ejemplo, un campo JSON "catalog": "uk").

Construcción de un pipeline de QA repetible

Deja de ejecutar pruebas de restricciones geográficas manualmente. Integra la verificación en tu pipeline de CI/CD usando una herramienta como geoiplookup del paquete geoip-bin, combinada con una lista de IP que se sabe que están mal ubicadas en tu base de datos principal. Ejecuta la prueba cada vez que despliegues una nueva regla de geo-fencing. Usa un enfoque de múltiples fuentes: consulta MaxMind, IP2Location y una API gratuita de RIPE NCC para cada IP de prueba, y haz que la compilación falle si la mayoría de las fuentes discrepan con la respuesta de tu servicio. El comando a continuación compara la decisión de tu servicio con tres bases de datos:

#!/bin/bash
IP="1.2.3.4"
RESPONSE=$(curl -s "https://api.example.com/geo/check?ip=$IP" | jq -r '.country')
MAXMIND=$(geoiplookup "$IP" | awk '{print $4}')
IP2LOC=$(curl -s "https://api.ip2location.com/?ip=$IP&key=test" | jq -r '.country_code')
if [[ "$RESPONSE" != "$MAXMIND" && "$RESPONSE" != "$IP2LOC" ]]; then
  echo "WARNING: Geo response differs from majority of databases"
fi

Ninguna base de datos es autoritativa. La única forma de detectar la tasa de fallo del 60-80% es probar con casos límite del mundo real: IP de operadores móviles, prefijos IPv6 y proxies residenciales. Cualquier cosa menos es un incidente de cumplimiento a punto de ocurrir.