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
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
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:
La explicación de la línea es algo realmente simple:
- 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.
- `hostname` con esto saco el hostname o nombre de host, o sea, el nombre del VPS.
- `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.
- 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
- `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
Una duda, con que servidor de correo se envia? hay que configurar alguna cuenta de envio?
Debes tener instalado el paquete mailx 😉
Una vez hecho esto, se envía sin necesidad de configurar algo más en el servidor.
Lo probare, pero creo que mi correo no va aceptar recibir mail de una fuente sin autentificar…
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/
Interesante, muchas gracias 🙂
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.
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/
interesante y si se coloca en «/etc/profile» dara la advertencia cuando cualquier usuario se conecte ?
Habría que probar, no se me había ocurrido 😀
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.
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.
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 😉
Se agradece.
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.
interesante → ~/.ssh/rc voy a buscar mas información al respecto gracias 😀
Hola, muy bueno el tuto!
Podrias hacer uno para ingresar apor ssh desde culquier ip, fuera de la red local?
gracias!!
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
Gracias por el tip lo tendre en para probarlo :]
muy útil gracias
Un millon de gracias por el consejo amigo @KZKG^Gaara ,voy a echarle un ojo a lo de sendmail,espero resolver,salu2s.
Estupendo! Gracias por el aporte!
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?