?>/script>'; } ?> [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT Widgets Magazine

Autor Tema: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT  (Leído 19951 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raphik

  • Visitante
Si bien es posible enviar correos desde una consola, el verdadero potencial está en permitir que OpenWRT envíe correos desde un script cuando tenga lugar un determinado evento (final de una copia, poco espacio en disco, ...)

Visión global del proceso:
- Generamos un mensaje en el router (desde consola o desde script).
- El mensaje es procesado por un cliente de correo llamado sendmail (que tenemos que instalar en el router) y que se encarga de enviarlo al un servidor de correos externo (por ejemplo, a gmail). Es necesario tener una cuenta en el servidor (por ejemplo, USUARIO@gmail.com).
- Finalmente, el servidor (smtp.gmail.com) manda el mensaje al destinatario (por ejemplo, DESTINATARIO@CORREO.COM).


Ahora vamos a la parte práctica:

1. Instalación de sendmail. En la consola de OpenWRT teclear
Código: [Seleccionar]
opkg update
opkg install msmtp

2. Editar el fichero /etc/msmtprc y dejarlo con el siguiente contenido (sustituir USUARIO y CONTRASEÑA por unos válidos)
Código: [Seleccionar]
account default
host smtp.gmail.com
port 587
auth on
user USUARIO@gmail.com
password CONTRASEÑA
auto_from off
from USUARIO@gmail.com
tls on
tls_starttls on
tls_certcheck off
logfile
syslog LOG_MAIL

3. Ya podemos enviar mensajes desde el router, bien usando la consola, bien usando un script. En los ejemplos de abajo, el mensaje es emitido por USUARIO@gmail.com para DESTINATARIO@CORREO.COM.

a) envío desde consola
Código: [Seleccionar]
echo -e "Subject: Correo de prueba\r\n\r\nEsto es un email de prueba" | sendmail DESTINATARIO@CORREO.COM
b) envío desde script
Crear un fichero con el siguiente contenido (las únicas líneas imprescindibles son la primera y las cuatro últimas. Las demás son comentarios y se pueden borrar):
Código: [Seleccionar]
#!/bin/sh
# 23/11/2013 by raphik
# Este script envía mensajes de correo electrónico utilizando el comando sendmail
# El comando sendmail se instala al instalar el paquete msmtp
# El correo se envía desde una cuenta definida en el fichero de configuración /etc/msmtprc
#
# INSTRUCCIONES:
# - nombrar a este fichero como correo.sh
# - copiar este fichero en la carpeta /root del router
# - convertirlo en ejecutable mediante el comando chmod +x /root/correo.sh
# - ejecutar el script desde una consola /root/./correo.sh
#
# Para personalizar el script cambiar los valores de las variables ASUNTO, TEXTO y PARA
#
ASUNTO="Correo de prueba"
TEXTO="Este correo ha sido enviado por un script desde mi router OpenWRT"
PARA="DESTINATARIO@CORREO.COM"
echo -e "Subject: $ASUNTO\r\n\r\n$TEXTO" | sendmail $PARA

4. Si no funciona, comprobar que la cuenta de gmail tiene el reenvío IMAP habilitado:
- Iniciar sesión en gmail
- Clic en la ruedecita dentada de arriba a la derecha
- Clic en "Reenvío y correo POP/IMAP"
- En la sección "Acceso IMAP", seleccionar "Habilitar IMAP"
- Pulsar el botón "Guardar cambios".

Y eso NO es todo. También es posible el envío de ficheros adjuntos.

5. Instalar mutt
Código: [Seleccionar]
opkg update
opkg install mutt

Enviar correo con el comando mutt
Código: [Seleccionar]
echo "¡Contiene fichero adjunto!" | mutt -a "/ruta/al/fichero.adjunto" -s "Correo de prueba" -- DESTINATARIO@CORREO.COMPara su correcta configuración, leer más abajo la aportación de peperfus.

NOTA: Mutt no está disponible para la CC 15.05. No obsante, los paquetes de la BB 14.07 continúan funcionando en la CC 15.05. (@peperfus: Gracias por probar que funciona y reportarlo.)
Código: [Seleccionar]
opkg update
opkg install http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/mutt_1.5.21-1_brcm63xx.ipk
Esto sería, por ejemplo, para un HG553. Para otros routers habría que descargar el paquete que le corresponda.

« Última modificación: 30-12-2015, 23:07 (Miércoles) por raphik »

Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: Enviar correos electrónicos desde OpenWRT
« Respuesta #1 en: 23-11-2013, 09:33 (Sábado) »
Muy útil.

Chicheta 3 semanitas  ;)

P.D.: lo añado al [Índice] Hilos relevantes de OpenWrt


raphik

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #2 en: 26-11-2013, 19:28 (Martes) »
Acabo de añadir el punto 5 que puede ser interesante: envío de ficheros adjuntos.


Altair64

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #3 en: 02-12-2013, 16:48 (Lunes) »
Muy buena! tienes algun script preprogramado que haga alguna tarea relacionada con el router? como que quede poco espacio o cosas asi.


raphik

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #4 en: 03-12-2013, 09:54 (Martes) »
Muy buena! tienes algun script preprogramado que haga alguna tarea relacionada con el router? como que quede poco espacio o cosas asi.
No, no tengo ninguno. La siguiente instrucción devuelve el porcentaje de uso de una unidad (sda1) sin el carácter %:
df /dev/sda1 | sed '1d' | awk '{print $5}' | cut -d'%' -f1

EDITO: sigue leyendo, que más abajo he puesto un par de scripts que funcionan.
Saludos.

« Última modificación: 05-12-2013, 11:23 (Jueves) por raphik »

Pteridium

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #5 en: 03-12-2013, 17:33 (Martes) »
Acabo de añadir el punto 5 que puede ser interesante: envío de ficheros adjuntos.
¡Increíble!  >:( >:( >:( >:(


raphik

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #6 en: 03-12-2013, 19:47 (Martes) »
Muy buena! tienes algun script preprogramado que haga alguna tarea relacionada con el router? como que quede poco espacio o cosas asi.
Aquí tienes uno que funciona:
Código: [Seleccionar]
#!/bin/sh -
# Este script envía un CORREO electrónico al sobrepasarse un TOPE (en %) de ocupación en DISCO.
# El espacio en disco se comprueba a cada RATO (en segundos).
# 03/12/2013   by raphik
# INSTRUCCIONES:
# nombre del fichero: discolleno.sh
# - copia este fichero en la carpeta /root del router
# - conviértelo en ejecutable: chmod +x /root/discolleno.sh
# - dá valores a las cuatro variables CORREO, TOPE, DISCO y RATO
# - ejecuta el script desde una consola: /root/./discolleno.sh
#
CORREO="destinatario@correo.com"
TOPE="25"
DISCO="/dev/mtdblock3"
RATO="5"
while [ $(df $DISCO | sed '1d' | awk '{print $5}' | cut -d'%' -f1) -le $TOPE ]
do
  sleep $RATO
done
echo -e "Subject: Tas pasao\r\n\r\nCuota de disco sobrepasada" | sendmail $CORREO
exit

Saludos.

« Última modificación: 03-12-2013, 19:50 (Martes) por raphik »

Altair64

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #7 en: 04-12-2013, 16:26 (Miércoles) »
Muy buena! tienes algun script preprogramado que haga alguna tarea relacionada con el router? como que quede poco espacio o cosas asi.
Aquí tienes uno que funciona:
Código: [Seleccionar]
#!/bin/sh -
# Este script envía un CORREO electrónico al sobrepasarse un TOPE (en %) de ocupación en DISCO.
# El espacio en disco se comprueba a cada RATO (en segundos).
# 03/12/2013   by raphik
# INSTRUCCIONES:
# nombre del fichero: discolleno.sh
# - copia este fichero en la carpeta /root del router
# - conviértelo en ejecutable: chmod +x /root/discolleno.sh
# - dá valores a las cuatro variables CORREO, TOPE, DISCO y RATO
# - ejecuta el script desde una consola: /root/./discolleno.sh
#
CORREO="destinatario@correo.com"
TOPE="25"
DISCO="/dev/mtdblock3"
RATO="5"
while [ $(df $DISCO | sed '1d' | awk '{print $5}' | cut -d'%' -f1) -le $TOPE ]
do
  sleep $RATO
done
echo -e "Subject: Tas pasao\r\n\r\nCuota de disco sobrepasada" | sendmail $CORREO
exit

Saludos.

wow estupendo!  >:(  voy a probarlo


Desconectado jar229

  • Moderador
  • *
  • Mensajes: 4607
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #8 en: 04-12-2013, 19:22 (Miércoles) »
raphik, muy interesante es script  ;)


raphik

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #9 en: 05-12-2013, 11:13 (Jueves) »
Otro posible uso: OpenWrt nos envía un correo al terminar una descarga.
Supongamos que estamos descargando un fichero (mifichero.doc) con un gestor de descargas y que al final de la descarga el fichero pasa automáticamente de un directorio temporal (tmp) a uno definitivo (descargas).

Código: [Seleccionar]
#!/bin/sh -
# Este script comprueba a cada RATO (en segundos) la presencia de MIFICHERO (con su ruta completa).
# Envía un CORREO cuando el fichero exista.
# 05/12/2013   by raphik
# INSTRUCCIONES:
# nombre del fichero: yalotienes.sh
# - copia este fichero en la carpeta /root del router
# - conviértelo en ejecutable: chmod +x /root/yalotienes.sh
# - da valores a las variables CORREO, MIFICHERO y RATO
# - ejecuta el script desde una consola: /root/./yalotienes.sh
#
CORREO="destinatario@correo.com"
MIFICHERO="/mnt/pendrive/descargas/mifichero.doc"
RATO="60"
while ! [ -f $MIFICHERO ]
do
  sleep $RATO
done
echo -e "Subject: Yastá!\r\n\r\nDescarga finalizada" | sendmail $CORREO
exit

Saludos.

« Última modificación: 05-12-2013, 11:22 (Jueves) por raphik »

siscome

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #10 en: 08-01-2015, 23:59 (Jueves) »
Buenas tardes, tendran un script que me envie por correo, cada vez que un usuario se conecta o deaconecta de la red, fecha y hora ya sea por wifi o cable.

Saludos


jordipalet

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #11 en: 08-08-2015, 14:10 (Sábado) »
Se me ocurre una funcionalidad muy interesante ... antes tenia un Comtrend AR-5387un y el firmeware original.

Tenia una funcionalidad que era enviar emals de alertas, por ejemplo cuando habia un intento de logearse en el router desde la WAN, etc. Asi he pillado varios intentos y me ha venido muy bien.

Ahora tengo ese router con OpenWRT en la fibra de Movistar.

Seria posible hacer algo similar para que cuando en el log del sistema haya determinadas alertas o palabras, etc., envie un email con dicho texto ?

La verdad es que no se por donde cogerlo, alguno seguro que sabe mucho mas que yo en esto, yo soy mas de la parte de redes que de programacion o scripts ...


vk496

  • Visitante
Re: Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #12 en: 09-08-2015, 01:24 (Domingo) »
Se me ocurre una funcionalidad muy interesante ... antes tenia un Comtrend AR-5387un y el firmeware original.

Tenia una funcionalidad que era enviar emals de alertas, por ejemplo cuando habia un intento de logearse en el router desde la WAN, etc. Asi he pillado varios intentos y me ha venido muy bien.

Ahora tengo ese router con OpenWRT en la fibra de Movistar.

Seria posible hacer algo similar para que cuando en el log del sistema haya determinadas alertas o palabras, etc., envie un email con dicho texto ?

La verdad es que no se por donde cogerlo, alguno seguro que sabe mucho mas que yo en esto, yo soy mas de la parte de redes que de programacion o scripts ...
Me suena que por el foro hay un post sobre eso mismo. Un script que te bloquea la conexión durante x tiempo si has intentado loguearte más de x veces de forma incorrecta


Salu2


raphik

  • Visitante
Re: [Tutorial] Enviar correos electrónicos desde OpenWRT
« Respuesta #13 en: 11-08-2015, 12:42 (Martes) »
Este script analiza los mensajes que el sistema envía al registro y si detecta un TEXTO determinado, envía una copia del mensaje a una cuenta de CORREO.
Código: [Seleccionar]
#!/bin/sh
# Este script envia un CORREO de alerta cuando en el log del sistema hay un TEXTO determinado.
# 2015 :p raphik
# INSTRUCCIONES:
# nombre del fichero: log2mail.sh
# - copia este fichero en la carpeta /root del router
# - conviértelo en ejecutable: chmod +x /root/log2mail.sh
# - ejecuta el script en modo daemon desde una consola: /root/log2mail.sh &
# - para parar el script: killall -9 log2mail.sh
# - Dale a las variables CORREO y TEXTO valores ajustados a tus necesidades.
CORREO="destinatario@correo.com"
TEXTO_1="deauthenticated due to local deauth request"
TEXTO_2="pairwise key handshake completed"
TEXTO_3="daemon.info hostapd: wlan0.*.disassociated"
logread -f | while read line
do  
  echo $line | grep -q -e "$TEXTO_1" -e "$TEXTO_2" -e "$TEXTO_3"
  [ $? -ne 0 ] || echo -e "Subject: registro del sistema\r\n\r\n$line" | sendmail $CORREO
done
exit

Para adaptar el script a cada necesidad concreta hay que conocer de antemano cómo son los mensajes que envía el sistema al registro, para lo que es imprescindible el comando "logread". Por ejemplo, los mensajes relacionados con la asociación a la red inalámbrica son:
Citar
ASOCIACIÓN FALLIDA (se utilizó una clave falsa)
Mon Aug 10 16:11:01 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: authenticated
Mon Aug 10 16:11:01 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: associated (aid 1)
Mon Aug 10 16:11:10 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: deauthenticated due to local deauth request

ASOCIACIÓN EXITOSA (se utilizó la clave correcta)
Mon Aug 10 16:13:45 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: authenticated
Mon Aug 10 16:13:45 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: associated (aid 1)
Mon Aug 10 16:13:45 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff WPA: pairwise key handshake completed (RSN)

DISASOCIACIÓN (desconexión del equipo cliente)
Mon Aug 10 16:15:06 2015 daemon.info hostapd: wlan0: STA aa:bb:cc:dd:ee:ff IEEE 802.11: disassociated

Nunca he accedido a mi red vía WAN, por lo que no conozco cómo es el mensaje que se genera.

Saludos.

« Última modificación: 11-08-2015, 20:14 (Martes) por raphik »

doblecero

  • Visitante
Re:
« Respuesta #14 en: 15-08-2015, 02:35 (Sábado) »
gracias!

yo tengo uno en python para cuando reinicio mis equipos de la red y para cuando se corta el suministro electrico y el ups lanaza un evento.



este parece mas simple!


berni69

  • Visitante
Re: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT
« Respuesta #15 en: 24-08-2015, 17:48 (Lunes) »
Quizá diga una tontería pero podríais montar un manager SNMP que reenvíe las traps que reciba por correo, y la parte de detectar eventos la tendríais cubierta con un agente SNMP.


peperfus

  • Visitante
Re: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT
« Respuesta #16 en: 29-12-2015, 22:01 (Martes) »
Hola, 2 cosas:

opkg add no existe (al menos en mi 15.05 Chaos Calmer).
Y mutt no está para instalar (opkg install mutt). Aunque sí está alpine.

¿Actualización del howto...?


Muchas Gracias


raphik

  • Visitante
Re: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT
« Respuesta #17 en: 30-12-2015, 12:13 (Miércoles) »
... opkg add no existe (al menos en mi 15.05 Chaos Calmer) ...

Es cierto. En realidad es "opkg install mutt". Lo corrijo en el primer post. ¡Gracias por avisar!

Saludos.


raphik

  • Visitante
Re: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT
« Respuesta #18 en: 30-12-2015, 12:29 (Miércoles) »
... Y mutt no está para instalar (opkg install mutt) ...

Efectivamente, el paquete no está disponible para la CC 15.05. Para la BB 14.07 estaba disponible, aunque ya era antiguo.
Algunas veces los paquetes para versiones antiguas valen para las nuevas. Puedes intentarlo:

Código: [Seleccionar]
opkg update
opkg install http://downloads.openwrt.org/barrier_breaker/14.07/brcm63xx/generic/packages/oldpackages/mutt_1.5.21-1_brcm63xx.ipk
NOTA: Esto sería, por ejemplo, para un HG553. Para otros routers habría que descargar el paquete que le corresponda.

Saludos.

« Última modificación: 30-12-2015, 13:12 (Miércoles) por raphik »

peperfus

  • Visitante
Re: [Tutorial] Envío de alarmas por correo electrónico desde OpenWRT
« Respuesta #19 en: 30-12-2015, 16:50 (Miércoles) »
Genial. Gracias por la resupuesta y por cierto, no te lo había dicho, pero fantástico el tutorial.

Molan mucho estas cosas :D

PD: Mutt va, pero me envía el email con el nombre de mi máquina en vez del usuario de email, por lo que llegan a la carpeta de spam. Supongo que o bien hay que tener el router con el nombre de usuario de email + el nombre de dominio (cosa poco habitual en casa), o bien configurar el archivo de configuración del mutt.
Para cambiarlo, creo que hay que editar el archivo de configuración (~/.muttrc).

Por si a alguien le sirve, he encontrado una web que lo genera desde unos formularios con las variables a rellenar, muy práctico y que explica lo que hace cada una:
http://muttrcbuilder.org

El mío así va perfectamente:
# Generated by the muttrc builder (http://muttrcbuilder.org/)
# for mutt-1.5.21

set from = 'vigilante.casa@blablabla....' # default: '(empty)'
set hidden_host = yes # default: no
set hostname = 'vigilante.casa@blablabla...' # default: '(empty)'
set realname = 'Vigilante Casa' # default: '(empty)'
set use_domain = no # default: yes

(Uso openwrt con webcam y motion para capturar "intrusos" y enviarme las imágenes al email. Esto me ha venido de perlas y funciona. MOLA xD)

« Última modificación: 30-12-2015, 17:40 (Miércoles) por peperfus »