Notificaciones en Slack al iniciar sesión SSH

por | junio 13, 2019

Para este tipo de notificaciones utilizaba hasta hace no mucho el correo pero desde que integré las notificaciones de Grafana en Slack he ido añadiendo más servicios a la plataforma.

Como ya hemos visto para el caso de Grafana cómo crear una app en Slack pasamos en este caso directamente a crear un nuevo canal en mi workspace llamado #ssh-logins

Después desde mi app original creo un nuevo webhook que me permitirá mediante una URL endpoint para publicar mensajes en dicho canal:

Con un sencillo script en Python ya puedo enviar mensajes al canal #ssh-logins

#!/usr/bin/env python3

import requests
import json
import os

webhook_url = "MYWEBHOOK"
rhost = os.environ['PAM_RHOST']
service = os.environ['PAM_SERVICE']
tty = os.environ['PAM_TTY']
user = os.environ['PAM_USER']
host = os.uname().nodename
message = """\
--------------------
SSH Login Notification
- Server: %s
- User: %s
- Remote Host: %s
- Service: %s
- TTY: %s
-------------------
""" % (host,user,rhost,service,tty)

if (os.environ['PAM_TYPE'] == 'open_session'):
        requests.post(webhook_url, headers={'Content-Type': 'application/json'}, json={"text": message})

Tendremos que sustituir el valor de la variable webhook_url por nuestra URL de Webhooks propia.

Para integrarlo cada vez que inicie una nueva sesión SSH en nuestro servidor tenemos que modificar la configuración de /etc/pam.d/sshd añadiendo al final:

session    optional     pam_exec.so /bin/ssh-login-notify.py

Lo ponemos como opcional para no bloquear el acceso en caso de que no pueda ejecutarse correctamente el script de notificación.

Hacemos login por SSH y deberíamos recibir la siguiente notificación en Slack: