## Gestión de logs *nginx* archivados - Consulta información sobre IP(s) disponibles en ipinfo.io con o sin token. - Mueve archivos ***log.?.gz*** del servidor existentes en `/var/log/nginx` al directorio de usuario **"ruta_base"** en el servidor especificado en `./config.cfg`. Utiliza el script `muevelogz.sh` (script en servidor). - Mueve los archivos ***log.?.gz*** del directorio de usuario del servidor al directorio local **"destino_log"** especificado en `./config.cfg`. - Descomprime archivos **`.gz`** y concatena los respectivos archivos de log. Borra los archivos utilizados en concatenación. Script `./muevelog.sh`. - Crea base de datos ***SQLite3*** **`./ipinfo.db`** con tablas de **registro** y de **visitas**. - Carga logs archivados de nginx en base de datos. - Consulta con ipinfo.io y registra en base de datos. - Consultas y reportes según información en la base de datos. ## Uso ej. alias `alias iploc='~/ruta/script/iplocate.py'` `iploc -h` ```bash ipLocate Consulta en ipinfo.io (con o sin token) información sobre IP(s). Carga logs de nginx en base de datos. Consulta con ipinfo.io y registra en base de datos. Consultas y reportes según información en la base de datos. iploc -h - Muestra esta ayuda. iploc -hq - Ayuda sobre querys. Consultas ipinfo.io: iploc - Consulta la información de disponible en ipinfo.io. iploc -f - Consulta info. de las IPs en (ipinfo.io). iploc -t - Consulta la info. de usando 'token' de ipinfo.io, especificado en config.cfg. iploc -F - Consulta info. de las IPs en (token ipinfo.io). Consultas base de datos: iploc -d - Consulta la información de disponible en base de datos. iploc -D - Consulta info. de las IPs en (base de datos). iploc -M - Genera mapa según registro en BD (cod. 200 y otros). Operaciones base de datos: iploc --sync - Sincroniza logs del servidor (bash script). iploc -c - Carga logs en base de datos. iploc -g - Guarda ipinfo de IPs sin registro en la BD. iploc --all - Realiza las 3 operaciones para poblar BD (--sync, -c y -g) y -M. ``` **`iploc --sync`** Realiza el proceso de copia de archivos del servidor, extracción y concatenado. Explicado al comienzo de este documento. **`iploc -c`** Poblar tabla **visita** de la base de datos. Carga los registros en archivos de log en la tabla. **`iploc -g`** Consulta a `ipinfo.io` por cada ip registrada en **visita** (una vez por ip). Guarda los datos en tabla **registro**. **`iploc -M`** Genera mapas según vistas registradas. Visitas *infructuosas* de color rojo. Directorio `maps/`. **`iploc --all`** Realiza las operaciones para poblar base de datos `--sync`, `-c` y `-g`. Y genera mapas `-M`. ![img](./maps/map_thumb.png) ### Otras opciones **`iploc `** - Muestra la información sobre \ disponible en ipinfo.io. ``` $ iploc 1.1.1.1 ╭──────────┬──────────────────────────╮ │ IP │ 1.1.1.1 │ ├──────────┼──────────────────────────┤ │ HOSTNAME │ one.one.one.one │ │ ANYCAST │ Si │ │ CUIDAD │ Los Angeles │ │ REGION │ California │ │ PAIS │ US │ │ GEOLOC │ 34.0522,-118.2437 │ │ ORGANIZ. │ AS13335 Cloudflare, Inc. │ │ TimeZone │ America/Los_Angeles │ │ COD POST │ 90076 │ ╰──────────┴──────────────────────────╯ ``` **`iploc -t `** - Muestra la información sobre \ disponible en ipinfo.io usando el **token** especificado en `./config.cfg`. **`iploc -d `** - Muestra toda la información disponible en BD acerca de \ ``` $ iploc -d 37.139.6.60 Consulta a base de datos: ╭───────────┬───────────────────────────╮ │ IP │ 37.139.6.60 │ ├───────────┼───────────────────────────┤ │ HOSTNAME │ None │ │ ANYCAST │ Si │ │ CUIDAD │ Amsterdam │ │ REGION │ North Holland │ │ PAIS │ NL │ │ GEOLOC │ 52.3740,4.8897 │ │ ORGANIZ. │ AS14061 DigitalOcean, LLC │ │ FECHA REG │ Tue May 24 00:25:20 2022 │ │ TimeZone │ Europe/Amsterdam │ │ COD POST │ 1012 │ ╰───────────┴───────────────────────────╯ ╭──────────────────────────┬────────┬────────┬─────────────────────────╮ │ Fecha visita │ Codigo │ Metodo │ Request │ ├──────────────────────────┼────────┼────────┼─────────────────────────┤ │ Sun May 22 02:49:03 2022 │ 301 │ HEAD │ / │ │ Sun May 22 02:49:04 2022 │ 200 │ HEAD │ / │ │ Sun May 22 02:49:04 2022 │ 301 │ GET │ /wp-login.php │ │ Sun May 22 02:49:05 2022 │ 404 │ GET │ /wp-login.php │ │ Sun May 22 02:49:06 2022 │ 301 │ GET │ /wordpress/wp-login.php │ │ Sun May 22 02:49:07 2022 │ 404 │ GET │ /wordpress/wp-login.php │ │ Sun May 22 02:49:07 2022 │ 301 │ GET │ /blog/wp-login.php │ │ Sun May 22 02:49:08 2022 │ 404 │ GET │ /blog/wp-login.php │ │ Sun May 22 02:49:09 2022 │ 301 │ GET │ /wp/wp-login.php │ │ Sun May 22 02:49:10 2022 │ 404 │ GET │ /wp/wp-login.php │ ╰──────────────────────────┴────────┴────────┴─────────────────────────╯ ``` **`iploc -f `** - Muestra la información disponible en ipinfo.io para cada \ en archivo pasado como argumento. **`iploc -D `** - Muestra toda la información disponible en BD para cada \ en archivo pasado como argumento. ej. formato `./archivo_IPs`. ``` 1.1.1.1 8.8.8.8 ... ``` ### Reportes y consultas `iploc -hq` ```txt ipLocate Reportes según consultas a base de datos. Uso: iploc -q Consultas a base de datos: -p - Conteo de respuestas html para (ejs. CL AR) --top - Visitas top paises --pais-desde - Detalle visitas desde (ej. 2022/9/19) --detalle-pais opc() - Muestra al detalle las visitas desde , filtro por codigo opcional. ``` **`iploc -q -p us`** ```txt Códigos html: US ╭────────┬────────╮ │ Código │ Conteo │ ├────────┼────────┤ │ 404 │ 4806 │ │ 200 │ 1772 │ │ 400 │ 1709 │ │ 403 │ 1381 │ │ 0 │ 1089 │ │ 301 │ 709 │ │ 300 │ 284 │ │ 405 │ 88 │ │ 302 │ 14 │ │ 303 │ 6 │ │ 499 │ 2 │ │ 444 │ 1 │ ╰────────┴────────╯ ``` **`iploc -q --top 3`** ```txt Vistas Top 3 ╭──────┬─────────╮ │ País │ Visitas │ ├──────┼─────────┤ │ US │ 11861 │ │ RU │ 4727 │ │ NL │ 4405 │ ╰──────┴─────────╯ ``` **`iploc -q --detalle-pais il 404`** ```txt Detalle visitas pais: IL respuesta 404 ╭────────────┬────────────────┬────────┬───────────┬──────────────────────────────────────╮ │ Fecha │ IP │ Metodo │ Respuesta │ Consulta │ ├────────────┼────────────────┼────────┼───────────┼──────────────────────────────────────┤ │ 2022-08-11 │ 87.239.255.117 │ GET │ 404 │ http://dyn.epicgifs.net/test6956.php │ │ 2022-08-15 │ 87.239.255.117 │ GET │ 404 │ http://dyn.epicgifs.net/test6956.php │ │ 2022-08-22 │ 79.179.30.54 │ GET │ 404 │ /robots.txt │ │ 2022-08-28 │ 87.239.255.117 │ GET │ 404 │ http://dyn.epicgifs.net/test6956.php │ │ 2022-09-03 │ 87.239.255.117 │ GET │ 404 │ http://dyn.epicgifs.net/test6956.php │ ╰────────────┴────────────────┴────────┴───────────┴──────────────────────────────────────╯ ``` **`iploc -q --pais-desde fr 2022/9/17`** ```txt Visitas FR, desde 17/9/2022 ╭────────────┬────────────────┬────────┬───────────┬──────────────────────╮ │ Fecha │ IP │ Metodo │ Respuesta │ Consulta │ ├────────────┼────────────────┼────────┼───────────┼──────────────────────┤ │ 2022-09-17 │ 185.49.20.77 │ GET │ 444 │ /wp-login.php │ │ 2022-09-18 │ 94.23.133.43 │ GET │ 444 │ //wallet/.git/config │ │ 2022-09-18 │ 94.23.133.43 │ GET │ 444 │ //admin/.git/config │ │ 2022-09-18 │ 94.23.133.43 │ GET │ 444 │ //core/.git/config │ │ 2022-09-18 │ 94.23.133.43 │ GET │ 444 │ //live/.git/config │ │ 2022-09-18 │ 212.83.186.254 │ HEAD │ 444 │ / │ ╰────────────┴────────────────┴────────┴───────────┴──────────────────────╯ ``` ---- ## Sicronización manual No es necesario el uso manual del script, ya que este es llamado por `iploc --sync`. Pero ya que existe, puede resultar conveniente tener la opción de llamar manualmente a las funciones. `./muevelog.sh -h` ``` Ejecuta script del servidor que mueve los logs archivados, copia en ruta de trabajo, concatena y elimina los archivos sobrantes. Programa pensado para ser llamado por iplocate.py (muevelog.sh --start). Operación manual: ./muevelog.sh [OPCION] Ruta de trabajo: Opciones: -s, --start - Copia, extrae y concatena logs. -S, --sync - Mueve logs.gz en el servidor (Pre-Copia). -C, --copia - Copia logs del servidor en ruta de trabajo (Post-sync). -x, --extraer - Descomprime logs en ruta de trabajo. -c, --concat [error.log, all...] - Concatena logs de la ruta de trabajo. -v, --version - Muestra la fecha de la versión. -h, --help - Muestra información de ayuda. ``` `./muevelog.sh --start`: Realiza todo el proceso **--sync**, **--copia**, **--extraer** y **--concat**. ---- ## Implementación Clonar proyecto en directorio ej. `~/nginx_data`. Crear `alias iploc='~/nginx_data/iplocate.py'`. Modificar ruta **logdest** en `muevelogz.sh` y copiar en el servidor. ``` # logdest debe ser la misma ruta especificada en config.cfg como *ruta_base* logdest=/home/server_user/nginx_log.old ``` Crear archivo de configuración **config.cfg**. ej. archivo de configuración `./config.cfg` ```cfg [bash_script] server_name=mi_server ruta_base=mi_server://home/server_user/nginx_log.old/ server_script=//home/server_user/scripts/muevelogz.sh destino_log=/home/local_user/.cache/nginx_old [iplocate] token = '?token=1234567890abc' ``` - ***mi_server***: parte de *ruta_base*, nombre del host según configuración en `~/.ssh/config`. - **ruta_base** : es la ruta en el servidor donde se mueven los logs archivados (.gz) desde `/var/log/nginx/` (termina en `/`). - **destino_log** : ruta donde se guardan local y temporalmente los archivos *log.?.gz*. - **server_name** : nombre del host según configuración en `~/.ssh/config`. - **server_script** : ruta en el servidor, del script que mueve los *log.?.gz*. Correr `iploc -h` para crear base de datos. ``` 📂️ nginx_data/ ├── 📁️ consultas/ │ └── 📄️ querys_sqlite.py ├── 📁️ log/ │ └── 📄️ iplocate.log ├── 📁️ maps/ │ └── 📄️ map_thumb.png ├── 📄️ __init__.py ├── 📄️ config.cfg ├── 📄️ ipinfo.db ├── 📄️ iplocate.py ├── 📄️ mapsgen.py ├── 📄️ muevelog.sh ├── 📄️ muevelogz.sh ├── 📄️ README.md └── 📄️ sql_alch.py ``` Seguir los pasos explicados en [Uso](#uso). ### Dependencias
- Servidor: - Bash >= 5.0 - rsync
- Local: - Bash >= 5.1.16 - SQLite3 3.38.5 - Python >= 3.10 - requests - SQLAlchemy 1.4.32 - rich - py-staticmaps - sqlitebrowser 3.35.5 (opc.)
### Iplocate en funcionamiento demo

- *[Token](https://ipinfo.io/)* - [icon](https://commons.m.wikimedia.org/wiki/File:Geolocalization-outlined-circular-button.svg)