Obtener geolocalización por IP en CLI

Introducción

En el mundo de la administración de sistemas y la seguridad informática, conocer la geolocalización de una dirección IP es una tarea frecuente. Este artículo ofrece una descripción detallada y extensiva sobre cómo obtener datos de ubicación geográfica desde la línea de comandos en Linux, usando métodos locales y a través de APIs públicas. Aprenderá sobre las herramientas más populares, ejemplos prácticos y las mejores prácticas para integrarlo en sus scripts y entornos de producción.

1. Herramientas de geolocalización CLI

Existen varias utilidades que podemos instalar directamente en Linux:

Herramienta Instalación Descripción
geoip-bin / geoiplookup ltapt install geoip-bingt Consulta bases de datos GeoIP2 (MaxMind).
mmdblookup ltapt install libmaxminddb0 libmaxminddb-dev mmdb-bingt Permite búsquedas avanzadas en archivos .mmdb.
curl jq Ya viene preinstalado en la mayoría de distros.
Instalar jq si no existiera.
Consulta APIs REST y parsea JSON.

2. Uso de APIs públicas

Para soluciones rápidas y sin configuración local, emplear servicios web es ideal. A continuación, algunos ejemplos:

2.1. ipinfo.io

curl -s https://ipinfo.io/8.8.8.8/json  jq

Salida típica:

{
  ip: 8.8.8.8,
  city: Mountain View,
  region: California,
  country: US,
  loc: 37.3860,-122.0838,
  org: AS15169 Google LLC,
  postal: 94035,
  timezone: America/Los_Angeles
}

2.2. ip-api.com

curl -s http://ip-api.com/json/8.8.8.8  jq

Limitación gratuita: 45 solicitudes/minuto.

2.3. ipgeolocation.io

Requiere clave API (gratuita hasta cierto límite):

curl -s https://api.ipgeolocation.io/ipgeoapiKey=SU_CLAVEip=8.8.8.8  jq

3. Utilización de GeoIP local

Para entornos offline o privados, instalar la base de datos local de MaxMind:

  1. Registrar cuenta en MaxMind y obtener GeoLite2-City.mmdb.
  2. Copiar el archivo a /usr/local/share/GeoIP/GeoLite2-City.mmdb.
  3. Ejecutar:
mmdblookup --file /usr/local/share/GeoIP/GeoLite2-City.mmdb 
--ip 8.8.8.8 --field country_name --field city_name

Este método no depende de la conectividad externa y respeta requisitos de privacidad corporativa.

4. Implementación en scripts

Combine comandos y jq para extraer solo los campos deseados:

#!/bin/bash
# geoip.sh - Obtiene ciudad y país de una IP
IP={1:-(curl -s https://ipinfo.io/ip)}
DATA=(curl -s https://ipinfo.io/IP/json)
CITY=(echo DATA  jq -r .city)
COUNTRY=(echo DATA  jq -r .country)
echo IP: IP
echo Ciudad: CITY
echo País: COUNTRY

Dar permisos de ejecución y ejecutar:

chmod  x geoip.sh
./geoip.sh 8.8.8.8

5. Ejemplos prácticos

  • Monitoreo en tiempo real de conexiones entrantes en un servidor SSH.
  • Filtrado geográfico para aplicaciones web en iptables o fail2ban.
  • Integración con Grafana y Prometheus para dashboards geográficos.

6. Seguridad y privacidad

Trabajar con IPs sensibles requiere un canal seguro. Se recomienda enrutar peticiones a través de un túnel VPN confiable como NordVPN, ExpressVPN o ProtonVPN. Además, tenga en cuenta:

  • Rate limits de cada API.
  • Políticas de retención de datos si trabaja con información de terceros.
  • Requerimientos de autenticación y cifrado en entornos corporativos.

7. Mejores prácticas y recomendaciones

  1. Cachear respuestas localmente para no exceder límites.
  2. Rotar claves y tokens con regularidad.
  3. Verificar la exactitud de la base de datos periódicamente.
  4. Documentar en su README las dependencias y versiones de las herramientas.

Conclusiones

Obtener geolocalización por IP desde la CLI de Linux es sencillo y muy útil para diversas tareas de administración y seguridad. Ya sea mediante APIs públicas o bases de datos locales, puede automatizar procesos, generar reportes detallados y reforzar sus defensas con filtros geográficos. Con las herramientas y ejemplos presentados, está listo para integrar esta funcionalidad en sus proyectos y mejorar la visibilidad de su infraestructura.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *