Cómo geolocalizar IPs en Windows Server 2019 y conocer el país de origen del tráfico

Entender de qué países procede el tráfico que llega a tu Windows Server 2019 Datacenter es un requisito habitual para reforzar la seguridad, cumplir normativas o priorizar recursos de forma estratégica. A continuación encontrarás una guía integral —de principio a fin— que te permitirá pasar de simples registros en disco a paneles en tiempo real, sin depender de Performance Monitor, el cual no está diseñado para geolocalizar direcciones IP.

Índice

Por qué es importante conocer el país de origen

Más allá de la mera curiosidad, saber desde dónde se conectan tus usuarios o posibles atacantes tienen efectos prácticos:

  • Filtrado por región. Bloquear o limitar países con alta tasa de ataques puede reducir la superficie de exposición.
  • Optimización de CDN y balanceo. Colocar réplicas de contenido más cerca de los usuarios disminuye la latencia y mejora la experiencia.
  • Compliance. Legislaciones como el RGPD exigen medidas de protección y notificación diferentes según la localización del interesados.
  • Análisis de mercado. Un vistazo rápido por país ayuda a detectar nuevas oportunidades de negocio o campañas mal orientadas.

Figura general del proceso

La lógica se resume en cuatro acciones encadenadas: registrar ➜ extraer ➜ resolver ➜ visualizar. A esto añadimos una quinta, la automatización, para que todo ocurra sin intervención manual.

Tabla de pasos y motivos

PasoQué hacerPor qué / Detalles
Habilitar el registro de IPAsegúrate de que tu servicio web (por ejemplo, IIS), proxy inverso o firewall registra la IP de cada petición (log de acceso) con la fecha y la URL.Estos registros son la materia prima: sin la IP no hay geolocalización.
Extraer las IP de los registrosEmplea PowerShell (Select-String, Import-Csv), Log Parser 2.2 o envía los logs a un SIEM (ELK, Splunk, Azure Monitor).Performance Monitor no registra la IP ni hace geolocalización; solo mide contadores de rendimiento del sistema.
Resolver IP → paísBase local gratuita: MaxMind GeoLite2 (actualízala mensualmente). APIs: ipinfo.io, IP2Location, DB‑IP, etc. (útiles para menos eventos en tiempo real).Cada IP se cruza con la base y devuelve campos como countrycode o countryname.
Agrupar y visualizarCon PowerShell o Python agrupa por país y cuenta accesos; o usa la capa de visualización de tu SIEM (Kibana, Splunk Dashboard, Power BI).Obtendrás un ranking o un mapa de calor de países consumidores de tu servicio.
Automatizar (opcional)Programa un script/Job que vuelque nuevos logs, procese solo líneas recientes y actualice un panel o envíe alertas si aumenta el tráfico desde un país específico.Con esto conviertes el análisis puntual en monitorización continua.

Configuración detallada paso a paso

Habilitar el registro de direcciones IP

El rol de IIS en Windows Server registra, por defecto, la dirección IP remota en el campo c-ip. Verifica que el formato de log es W3C Extended y que el sitio web tiene el registro habilitado:

%systemroot%\system32\inetsrv\appcmd.exe list site /config /text:*

Si utilizas un proxy inverso como nginx o HAProxy, asegúrate de:

  1. Registrar la IP real en encabezados tipo X‑Forwarded‑For.
  2. Configurar IIS para reemplazar la IP interna del balanceador por la IP de origen con Advanced Logging o ARR (Application Request Routing).

Extracción con PowerShell

El siguiente fragmento lee los últimos archivos de log de IIS, extrae las IP y las graba en un CSV mínimo:

$LogPath = "C:\inetpub\logs\LogFiles\W3SVC1\*.log"
$OutCsv  = "C:\Temp\ip_extract.csv"

Get-ChildItem \$LogPath |
Sort-Object LastWriteTime -Descending |
Select-Object -First 30 |
ForEach-Object {
Import-Csv $\_.FullName -Delimiter ' ' |
Select-Object -ExpandProperty c-ip
} |
Group-Object |
Select-Object Name,Count |
Export-Csv -NoTypeInformation -Path \$OutCsv 

En entornos de alto volumen, Log Parser 2.2 ofrece rendimiento superior y un dialecto SQL familiar:

logparser "SELECT c-ip, COUNT() AS hits INTO ip_extract.csv FROM C:\inetpub\logs\LogFiles\W3SVC1\u.log GROUP BY c-ip" -i:W3C -o:CSV

Ingesta en SIEM o plataforma centralizada

Las organizaciones con Elastic Stack, Splunk o Azure Monitor obtendrán beneficios adicionales:

  • Rutas de ingesta TLS y almacenamiento a largo plazo.
  • Dashboards y queries con lenguaje enriquecido (KQL, SPL).
  • Alertas automáticas (por ejemplo, picos de tráfico de “n” desviaciones estándar en 15 min).

Si envías los logs vía Filebeat, aprovecha el módulo IIS, que parsea las columnas y añade metadatos compatibles con GeoIP sin esfuerzo extra.

Resolver cada IP a un país

Dos grandes enfoques:

  1. Base local. Descarga GeoLite2 City o Country (licencia gratuita) y úsala offline.
    Perfecto si tienes requisitos de confidencialidad o no puedes exponer IPs a Internet.
  2. API web. Cuando el volumen es bajo o necesitas la información con un retraso mínimo (chat de soporte en vivo, por ejemplo), una API reducirá la complejidad.

Ejemplo de PowerShell con la biblioteca MaxMind:

Install-Package -Name MaxMind.GeoIP2 -Source nuget.org

Import-Module GeoIP2

\$reader = New-Object MaxMind.GeoIP2.DatabaseReader("C:\Data\GeoLite2-Country.mmdb")
\$results = @()

Import-Csv "C:\Temp\ip\_extract.csv" | ForEach-Object {
\$ip = $\_.Name
try {
\$country = \$reader.Country(\$ip).Country.IsoCode
\$results += \[PSCustomObject]@{ IP = \$ip; Country = \$country }
} catch {
\$results += \[PSCustomObject]@{ IP = \$ip; Country = "Unknown" }
}
}

\$results |
Group-Object Country |
Sort-Object Count -Descending |
Select-Object Name, Count |
Export-Csv "C:\Temp\by\_country.csv" -NoTypeInformation 

Visualización y paneles

Power BI Desktop importará directamente el CSV by_country.csv. Añade:

  • Un mapa mundial con Nombre‑de‑País en el campo Location y Count como valor.
  • Un filtro temporal basado en la fecha/hora del registro (extrae antes la columna date).
  • Un KPI card que muestre el porcentaje de tráfico que proviene de tu región objetivo.

Alternativamente, Kibana incluye la visualización Region Map, alimentada por el campo geoip.countryisocode que genera Filebeat.

Automatización completa con tareas programadas

Si prefieres seguir dentro del ecosistema Microsoft puro, aprovecha Task Scheduler:

  1. Programa la ejecución de tu script de PowerShell cada 15 min (o el intervalo deseado).
  2. Configura el disparador como “Al registrar un evento” para lanzar el script solo cuando aparezca un nuevo fichero de log.
  3. Agrega un paso final que envíe el archivo procesado a un recurso compartido, API de Power BI o Azure Storage, según tu flujo.

En Splunk o Elastic, las Saved Searches con cron schedule y alertas por correo cumplen el mismo fin.

Buenas prácticas y consideraciones de seguridad

  • Mantén actualizada la base GeoLite2. Los rangos IP varían; un script mensual que descargue la versión nueva te ahorra falsos positivos.
  • Protege los datos de log. Contienen información sensible (PII). Usa ACL estrictas y cifra el transporte.
  • Minimiza retención. Si solo necesitas métricas agregadas, borra los registros en detalle o anonímalos tras un período.
  • No sobre‑cargues el API. Las llamadas masivas pueden incurrir en costes y bloqueos. Batch o caché local para IPs repetidas.
  • Documenta excepciones. Empresas globales pueden aparecer en múltiples países por su propia infraestructura (Anycast, CDNs).

Preguntas frecuentes (FAQ)

¿Puedo usar Performance Monitor para lo mismo? No. PerfMon mide contadores de rendimiento (CPU, memoria, red) y carece de campos de IP o país. Necesitas logs de capa de aplicación o red. ¿Cómo identifico un ataque desde varios países? Integra la solución con tu sistema de threat intelligence para correlacionar IPs maliciosas. Las alertas deben dispararse ante picos inusuales y países no habituales. ¿Qué hay de IPv6? Las bases como GeoLite2 soportan IPv6. Asegúrate de registrar el campo c-ip también cuando la dirección sea ::ffff o similar. ¿Los balanceadores enmascaran la IP? Depende. Servicios como Azure Front Door insertan encabezados con la IP de origen. Configura tu servidor para confiar solo en la lista blanca de balanceadores y tomar la IP correcta.

Resumen y próximos pasos

Identificar con precisión el país de origen de tus visitantes en Windows Server 2019 es sencillo una vez que separas claramente las capas del proceso. Al seguir esta guía:

  1. Activas logs con la granularidad necesaria.
  2. Extraes y limpias la data con herramientas nativas o gratuitas.
  3. Aplicas geolocalización offline o mediante API de forma eficiente.
  4. Visualizas y automatizas resultados para obtener valor continuo.

El conocimiento resultante te permitirá mejorar la seguridad, la experiencia de usuario y la toma de decisiones de negocio.

Descarga del script

Guarda el código PowerShell anterior como geoipresolver.ps1, personaliza rutas y prográmalo. Así tendrás un pipeline reproducible que escala desde un entorno de laboratorio hasta producción.

Índice