Continuando con los servidores OpenSSH, ya dijimos en el post anterior que, al ponerlos en funcionamiento de forma rápida, podemos sufrir multitud de ataques (o intentos de ataque al menos). Para poder monitorizar lo que ocurre, en lo que respecta a los accesos, en nuestro servidor existen los ficheros de log. Por defecto, los eventos relativos a nuestro servidor SSH están almacenados en /var/log/auth.log.
Uno de los inconvenientes que puede tener es que la información que se encuentra en ese fichero corresponde a muchos otros servicios del sistema por lo que en algunos casos hay que recurrir a herramientas externas para poder buscar lo que nos interesa dentro del fichero. Una forma sencilla de visualizar de forma cómoda y organizada los datos relativos a nuestro servidor SSH en el fichero log antes mencionado o cualquier otro distinto, es usar el script python que podéis encontrar AQUÍ.
Está concebido para OpenSSH-Server bajo sistemas Linux y no requiere la instalación de ningún paquete externo al lenguaje. Organiza y permite ver la información interesante con facilidad y está optimizado para servidores cuyo nivel de log (‘LogLevel’) tiene el valor ‘INFO’.
- Monitoriza los siguientes tipos de entradas:
– [Mes] [Día] [Hora] [Host] sshd: Server listening on [IP] [PORT].
– [Mes] [Día] [Hora] [Host] sshd: Accepted password for [USER] [IP] [PORT] ssh2
– [Mes] [Día] [Hora] [Host] sshd: Received disconnect from [IP] x: disconnected by [USER]
– [Mes] [Día] [Hora] [Host] sshd: pam_unix(sshd:auth): authentication failure; [LOGNAME] [UID] [EUID] [TTY] [RUSER] [RHOST] [USER]
– [Mes] [Día] [Hora] [Host] sshd: Did not receive identification string from [IP]
– [Mes] [Día] [Hora] [Host] sshd: Accepted publickey for [USER] from [IP] [PORT] ssh2: [KEY]
– [Mes] [Día] [Hora] [Host] sshd: message repeated [X] times: [ Failed password for [USER] from [IP] [PORT] ssh2]
– [Mes] [Día] [Hora] [Host] sshd: reverse mapping checking getaddrinfo for [ADDR. INFO] [IP] failed – POSSIBLE BREAK-IN ATTEMPT!
Permite visualizar solo las que se elijan previamente con los argumentos del script además de visualizarlas completas, una a una, no mostrarlas y/o almacenar la salida seleccionada en un fichero de nuestra elección (dicho fichero puede existir previamente y ser sobreescrito/encadenado o ser creado si es necesario).
Las opciones disponibles son las siguientes:
Usage: sshLogger.py [-hspcfnkrb] [-o|-d] [-l <file>]
–version Muestra la versión del programa
-h, –help Muestra la ayuda
Opciones SSH:
-s, –server-up Muestra las veces que un servidor se puso en funcionamiento
-p, –acc-passwords Muestra las sesiones abiertas
-c, –closed-sessions Muestra las sesiones cerradaas
-f, –failed-auth Muestra las autentificaciones fallidas
-n, –no-idents Muestra las identificaciones no recibidas
-k, –public-keys Muestra las claves públicas aceptadas
-r, –repeat Muestra los mensajes repetidos
-b, –break-in Muestra los intentos de ataque
Display Options:
-o, –one-by-one Muestra las entradas una por una
-d, –no-display No muestra las entradas por la salida estándar
File Options:
-l <FILE>, –log=<FILE> Guarda las entradas seleccionadas en <file>
Las opciones [-spcfnkrb] son compatibles entre si y es necesario que se elija, al menos, una de ellas. Ĺas opciones [od] son opcionales e incompatibles entre sí. La opción [l] es optativa y compatible con cualquiera de las anteriores opciones.
Es un script que se realizó en Python por motivos ajenos a la eficiencia. Con un script en Bash podría realizarse la misma tarea en muchas menos líneas de código pero el objetivo era desempolvar un poco Python y el tema elegido se lo debemos al post anterior. Espero que os ayude en algo.
Saludos y que no os maten los gurús.