Pregunta Notificación por correo electrónico sobre cada conexión SSH a un servidor Linux


Me gustaría recibir una notificación sobre cada conexión SSH al servidor Linux (Debian).

Ya vi algunos métodos, que propusieron agregar comandos de correo en su propio .bashrc, pero este enfoque parece no cubrir todos los casos posibles.

¿Cuál es la mejor práctica para realizar dichas notificaciones transversales sobre las conexiones SSH?


5
2018-06-04 14:48


origen


¿Qué tan pronto después de la conexión quieres saber? ¿Desea un informe diario o desea un correo electrónico instantáneo? - EightBitTony
Definir en qué etapa? TCP SYN, protocolo de enlace completo, autenticación / protocolo / negociación de clave, intento de autenticación, etc. - Jeff Ferland
@EightBitTony Ambos. 1.Un correo electrónico instantáneo con IP / nombre de usuario. 2. Estadísticas diarias sobre la duración de la conexión de cada usuario que estuvo conectado. - Fedir RYKHTIK
@JeffFerland Esta pregunta es solo sobre conexiones exitosas. Por supuesto, debe configurarse una protección adicional para cada intento de autenticación no exitoso. - Fedir RYKHTIK


Respuestas:


Desde que aclaraste que quieres un email para cada exitoso autenticación, pam_notify Es un gran módulo candidato para esto.

Agregarlo como session required línea al final de tu /etc/pam.d/sshd o archivo equivalente.


10
2018-06-04 15:14





La mejor práctica es no hacerlo a menos que DE VERDAD Hay que (la seguridad de esta máquina es ESA crítica).

Si tu DE VERDAD tengo que hacerlo, no querrás meterte con los archivos shell .rc que la gente puede cambiar, es una solución a medias.

La forma correcta es probablemente usar las instalaciones de auditoría integradas en Linux (consulte las páginas de manual para auditd, y su archivo de configuracion auditd.conf), pero tengo una experiencia muy limitada con las facilidades de auditoría en Linux (en particular, no estoy seguro de que el subsistema de auditoría facilite el envío de correos electrónicos. Sé que puede usar FreeBSD sin demasiados problemas).

La forma menos correcta pero aún así decente sería utilizar un módulo PAM que siempre tenga éxito y saque un correo electrónico que diga quién intentó iniciar sesión.

La forma menos correcta, pero al menos su bandeja de entrada, no está completa sería agrupar su auth.log archivo o equivalente y envíelo por correo electrónico a alguien todas las noches. Si todo lo que necesita es un registro básico, esta sería mi elección: el volumen de correo electrónico generado a partir de mis otras sugerencias sería atroz en un sistema con mucha actividad.


6
2018-06-04 15:02



Nota: según el comentario de Jeff, hay muchos lugares donde puede auditar la conexión si usa las facilidades de auditoría, hasta "intentos de conexiones TCP al puerto 22", lo que generaría enormes cantidades de datos de auditoría para alguna máquina conectada a internet ... - voretaq7


puede supervisar su /var/log/auth.log periódicamente o, incluso, hacer que sea un registro remoto para que el atacante no pueda borrar el rastro de un inicio de sesión exitoso.


4
2018-06-04 15:00



Lo intenté cat /var/log/auth.log | grep sshd, pero da demasiados datos, si hay una forma corta de hacer el preprocesamiento de los datos, para que los datos sean más legibles? - Fedir RYKHTIK
@Fedir puedes probar algo como esto: code.google.com/p/linscripts/wiki/logmon - pQd


Dado que esta pregunta ha sido sacada de las bóvedas, mi inclinación sería correr muestra de tela en contra /var/log/auth.log (o el archivo apropiado de su configuración distro / syslog), y configúrelo para responder con un correo electrónico cada vez que ocurra sshd.*Accepted.*, ya que esto debería capturar tanto el inicio de sesión basado en contraseña como el basado en clave:

Feb 21 10:06:44 lory sshd[24414]: Accepted publickey for username from ::1 port 39197 ssh2
Feb 21 10:08:16 bill sshd[20643]: Accepted password for username from ::1 port 46835 ssh2

lo que podría hacer con un archivo de configuración diciendo, por ejemplo,

watchfor /sshd.*Accepted.*/
               mail address=you@example.com,subject="SSH login on host foo"

y por ejemplo swatch -c /the/above/file /var/log/auth.


2
2018-02-21 10:17





Lo hacemos creando un archivo /etc/profile.d/notify.sh con el siguiente contenido:

#! / bin / sh

sender = "hostname@example.com"
recepient = "admingroup@example.com"
subject = "Inicio de sesión de cuenta privilegiada utilizada"
message = "` env` "
    echo "$ mensaje" | mail -s "$ subject" -r "$ sender" -S smtp = mail.example.com "$ recepient"

1
2018-02-04 00:58





Recientemente desarrollé mi propia solución para este problema, que consiste en monitorear los archivos de registro para diferentes servicios (sshd incluido) y notificar un solo correo electrónico cuando ciertos usuarios acceden a ciertos servicios.

Lo llamo Monitor de autenticación y puede encontrar más información al respecto aquí: http://bwyan.dk/?p=1744

Espero que esto sea lo que buscas.


0
2018-02-21 10:02





Publiqué un guión de bash en Github Gist que hace lo que buscas. Enviará un correo electrónico al administrador del sistema cada vez que un usuario inicie sesión desde una nueva dirección IP. Utilizo el script para examinar los inicios de sesión en nuestros sistemas de producción fuertemente controlados. Si se compromete un inicio de sesión, recibiremos una notificación sobre la ubicación de inicio de sesión inusual y tendremos la oportunidad de bloquearlos fuera del sistema antes de que causen daños graves.

Para instalar el script, simplemente actualícelo con su correo electrónico sysadmin y cópielo en /etc/profile.d/.


0
2018-06-04 20:05