Añadir un chivato al ssh cuando alguien hace login

Con tanto ransomware, accesos indebidos a sistemas y demás ataques varios a sistemas, la concienciación de tener los sistemas al día está al día y supongo que algo habréis notado queridos lectores que mi actividad éstas últimas semanas ha sido frenética. Mi objetivo es ponerlos a punto y cada vez mas ir mejorando la seguridad sin que se vea afectada la usabilidad.

Está claro que un sistema conectado a la red es victima de intentos de acceso continuos y sólo nos interesan los que han tenido éxito. Es por esto que hoy os traigo un pequeño “tip” para avisar de los accesos a nuestro sistema, sean legítimos o no.

Hace años tenía implantada esta política de seguridad en mis servidores y me sirvió para paliar un ataque aún mayor. La primera reacción fue echar el malhechor de mis sistemas, al mismo tiempo que cambiaba las contraseñas de todos los servidores (ahí aprendí que tenemos que ir con mucho cuidado con nuestra política de passwords).

Éste post se basa en esta respuesta del foro de ubuntu y un poco a mi friki-artesanía.

Lo primero será crear los dos scripts y los pondremos donde ejecutemos los scripts del sistema

root@frontal1-nginx:~# vi /root/scripts/login-notify-pam.sh
#!/bin/sh

/root/scripts/login-notify-script.sh &
root@frontal1-nginx:~# vi /root/scripts/login-notify-script.sh
#!/bin/sh

sleep 3
# Change these two lines:
sender="noreply-valido@capa8.net"
recepient="cuenta-de-notificaciones@capa8.net"

if [ "$PAM_TYPE" != "close_session" ]; then
    host="`hostname`"
    subject="SSH Login: $PAM_USER from $PAM_RHOST on $host"
    # Message to send, e.g. the current environment variables.
    message="Algú ($PAM_RHOST) ha entrat al sistema $host per SSH!\n\n`ps aux |grep nc |grep -v grep`\n\n`tail -30 /var/log/auth.log |grep $XDG_SESSION_ID`\n\n`env`"
    echo "$message" | mail -r "$sender" -s "$subject" "$recepient" &

Y modificamos el fichero /etc/pam.d/sshd y al final añadimos esto

root@frontal1-nginx:~# vi /etc/pam.d/sshd
session optional pam_exec.so seteuid /root/scripts/login-notify-pam.sh

He optado para hacerlo en dos scripts a parte; primero para que no se vea afectada la velocidad de acceso ssh a los sistemas. Pam al haber un login satisfactorio, ejecuta login-notify-pam.sh que llama en background a login-notify-script.sh que espera 3 segundos, recopila la información necesaria y la manda por correo electrónico al correo del administrador.

Finalmente, configuramos el servidor para que pueda enviar mails por ejemplo con postfix o mucho más fácil con msmtp.

Y lo probamos.

En mi caso, uso el frontal1-nginx como puerta de entrada a mis sistemas, tengo que ver si valoro tener un server ssh expuesto mas escondidito, pero de momento lo tengo así. Poco a poco todos los servidores los voy poniendo detrás del frontal y sólo puedo acceder a ellos por el frontal que sé que tiene que saber llegar a todos ellos. Para ello, en mi equipo tengo una configuración especial en el fichero del cliente ssh para hacer el salto a los otros sistemas.

laura@melatonina:~/.ssh$ vi config
host 192.168.100.*
        ForwardAgent yes
        User root
        ProxyCommand ssh -A root@5.10.205.130 nc -w 3 %h %p
        ServerAliveInterval 100

En el caso que accedamos directamente, el script anterior contempla localizar si ha habido un acceso nc, ya que en el fichero de configuración del cliente ssh, uso nc para hacer el salto a la maquina que me interesa. El -w es para cerrar el nc cuando hayan pasado 3 segundos desde que se haya cerrado la conexión (logout del sistema).

Y hasta aquí, la receta de hoy. Espero que les haya gustado :) en unos días irán cayendo mas cosillas de securización de sistemas.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.