Recibir notificación por email cuando alguien acceda como root por SSH

Los que administramos servidores debemos llevar un control lo más estricto posible sobre todo lo que sucede en el servidor, una de las cosas que muchas veces necesitamos saber es cuándo se conecta un usuario por SSH (root incluído), para ello con un paquete y una línea nos llegaría a nuestro email notificaciones.

¿Se imaginan que cada vez que alguien se conecte por SSH con root les llegue un email que diga?

O sea, recibirían un email que les diría algo como esto:

[ miserver ] Alerta: Acceso a Terminal de Root el: 2014/01/21 (200.55.51.151)

O sea:

[ $NOMBRE_VPS ] Alerta: Acceso a Terminal de Root el: $FECHA ($IP_DE_QUIEN_SE_CONECTO)

Para lograr esto primero deben instalar un paquete llamado mailx.

Suponiendo que su servidor use Debian o alguna distro basada en él (recomiendo solo Debian, no Ubuntu ni similares para servidores) sería:

apt-get install mailx

Nota: El anterior comando es ejecutado como root directamente en el servidor, como es un VPS no se debe usar sudo de no ser estrictamente necesario.

Luego debemos poner en el .bashrc de root la siguiente línea:

echo 'ALERTA - Acceso a Terminal de Root en:' `hostname` 'el:' `date +'%Y/%m/%d'` `who | grep -v localhost` | mail -s "[ `hostname` ] Alerta: Acceso a Terminal de Root el: `date +'%Y/%m/%d'` `who | grep -v localhost | awk {'print $5'}`" mi@email.com

Para editar /root/.bashrc usen algún editor en terminal como nano:

nano /root/.bashrc

Recuerden que deben especificar al final de la línea su email, simplemente cambien mi@email.com por el email al que desean lleguen las notificaciones

Luego de poner (en cualquier lugar del archivo) la línea que les puse antes, salvamos el archivo con Ctrl + O (O de oso) y salimos del mismo con Ctrl + X

Listo, cada vez que alguien entre a la terminal de root se cargará el archivo .bashrc, que es algo que se hace por default siempre, y al cargarse el archivo se ejecutará la línea que envía el email, quedándonos en nuestra bandeja de entrada algo como:

email-notificacion-ssh

La explicación de la línea es algo realmente simple:

  1. Mediante mailx envío el correo, con el parámetro -s «_____» especifico el asunto, y le paso con echo «____» y una tubería el contenido del body.
  2. `hostname` con esto saco el hostname o nombre de host, o sea, el nombre del VPS.
  3. `date +’%Y/%m/%d’` el comando date me muestra la fecha del sistema, el resto de las letras simplemente indica cómo deseo que se me muestre la fecha.
  4. who | grep -v localhost` Si ejecutan who en su ordenador les mostrará los usuarios activos, con un grep -v localhost me aseguro que solo muestre los que se han conectado desde una ubicación diferente al servidor en sí, o sea, SSH básicamente
  5. `who | grep -v localhost | awk {‘print $5’}` Lo que diferencia esta línea de la anterior es el awk, mediante el awk y la impresión de la 5ta columna es que saco la IP desde donde se conectaron al SSH

En fin, la línea es algo extensa y puede parecer compleja de entender, no obstante son muchos caracteres raros pero todo es bastante simple 🙂

Como siempre, espero les haya resultado de interés.

Saludos


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   manuelperezf dijo

    Una duda, con que servidor de correo se envia? hay que configurar alguna cuenta de envio?

    1.    KZKG^Gaara dijo

      Debes tener instalado el paquete mailx 😉
      Una vez hecho esto, se envía sin necesidad de configurar algo más en el servidor.

      1.    manuelperezf dijo

        Lo probare, pero creo que mi correo no va aceptar recibir mail de una fuente sin autentificar…

        1.    yomismo dijo

          Yo utilizo exim4 con una cuenta de ‘gmail’ para envio de correos y funciona bien
          – excepto las cabeceras del FROM TO y REPLY TO, que gmail pone lo que quiere pero llegan bien -.
          Para configurar gmail con exim4 use esta info:
          http://dajul.com/2009/06/08/configurar-exim4-con-gmail-o-google-apps/

          1.    KZKG^Gaara dijo

            Interesante, muchas gracias 🙂

      2.    Israel dijo

        Amigo @KZKG^Gaara he instalado el paquete y he realizado el manual paso a paso, lo unico que cuando lo envio se me queda el correo local,nunca me lleg a salir , me puedes ayudar con eso??……pues la verdad necesito tener conficgurado este tema en mis servidores, salu2s.

        1.    KZKG^Gaara dijo

          Por tu IP asumo que eres de mi mismo país 😉
          El «problema» con nuestras redes rara vez tienen IPs reales como tal, o sea, estamos metidos bajo una subred de una red de un proxy de un ministerio, o algo así. O sea, que posiblemente el problema lo tengas en que el servidor web por sí solo no puede sacar un correo de la red o algo así, a lo mejor necesites esto: https://blog.desdelinux.net/enviar-emails-por-consola-con-sendmail/

  2.   truko22 dijo

    interesante y si se coloca en «/etc/profile» dara la advertencia cuando cualquier usuario se conecte ?

    1.    KZKG^Gaara dijo

      Habría que probar, no se me había ocurrido 😀

  3.   nabucodonosor dijo

    Llamenme paranoico , pero poner un script que un desconocido me suguiere en una parte importante de mi sistema donde guardo contraseñas de cuentas,datos como actas de nacimiento,documentos de índole personal y documentos del trabajo(exponiendo así a mis clientes también) etc etc,y que impilica exponer también mi cuenta de correo (!!!)…pues,es algo peligroso,pienso.

    1.    yomismo dijo

      El peligro del script presentado es inversamente proporcional al entendimiento del mismo.

      Y para paranoias, deja de instalar repositorios NON-FREE, pues es posible que alguien introduzca un codigo malicioso que te robe la cesta de la compra.

    2.    KZKG^Gaara dijo

      Expliqué qué hace cada parte de la línea de comandos, no obstante si crees que engaño a alguien, el script o comandos está ahí mismo en el post, no tiene ningún código oculto o secreto, eres bienvenido a revisar tan a fondo como quieras los comandos que ejecuta, si encuentras algo sospechoso por favor, coméntalo aquí mismo 😉

  4.   Browsons dijo

    Se agradece.

  5.   thisnameisfalse dijo

    Muyyy interesante.

    Tal vez los ficheros ~/.bashrc o /etc/profile no sean los más adecuados en el caso de que accedamos por SSH con un usuario normal y ejecutemos algún comando puntual como root. O si exportamos las X11 de nuestro VPS remoto, cada vez que abramos un xterm tendríamos un nuevo correo.

    Para el truco de mailx, creo que deberíamos usar los ficheros ~/.ssh/rc (individual de cada usuario) o /etc/ssh/sshrc

    PostData: _NUNCA_ acceder por SSH como usuario root. _NUNCA_ acceder por SSH usando password. _SIEMPRE_ usar private keys.

    1.    truko22 dijo

      interesante → ~/.ssh/rc voy a buscar mas información al respecto gracias 😀

  6.   chinoloco dijo

    Hola, muy bueno el tuto!
    Podrias hacer uno para ingresar apor ssh desde culquier ip, fuera de la red local?
    gracias!!

  7.   vidagnu dijo

    Este script funciona si el servidor de correo al que enviamos no verifica que el correo fuente venga de un servidor autentico, en este caso seria de la fuente root@localhost, la mayoria de servidores lo tomaran como spam.

    Yo lo que hago es configurar sendmail como MTA, y luego utilizar mail que viene en todas las distros para envio de correos.

    http://vidagnu.blogspot.com/2009/02/configurar-sendmail-como-cliente-de.html

  8.   Algabe dijo

    Gracias por el tip lo tendre en para probarlo :]

  9.   kuk dijo

    muy útil gracias

  10.   Israel dijo

    Un millon de gracias por el consejo amigo @KZKG^Gaara ,voy a echarle un ojo a lo de sendmail,espero resolver,salu2s.

  11.   Joskar dijo

    Estupendo! Gracias por el aporte!

  12.   Juan_c dijo

    y que pasa, si por ejemplo el script esta mandando demasiados correos, por ejmplo alguien entra en terminal de root a las 8:00 am y envio como 40 correos, despues, alguien entro a otra hora y se enviaron mas de 23 correos y luego alguien entra a otra hora y se enviaron mas de 150 correos, a que se podria deber?