You are here

Aviso de actualizaciones en Debian por e-mail

Para disponer de un sistema estable y seguro es aconsejable mantenerlo siempre actualizado, pues van surgiendo actualizaciones de seguridad que arreglan algunos bug o exploits, mientras otras añaden mejoras.

Una buena manera de mantener el sistema actualizado, es comprobar los nuevos paquetes de forma periódica, aunque esto a veces se nos olvida cuando hablamos de entornos domésticos.

Es por ello que la mejor manera de solucionar el tema de las actualizaciones para gente despistada como yo, es crear un script que compruebe si disponemos de nuevas actualizaciones, y en caso afirmativo nos mande un correo a nuestra dirección e-mail. Yo por el momento con que me mande un e-mail tengo bastante, aunque el script es realmente simple como ya sabéis está publicado bajo una licencia Creative Commons así que le podéis añadir toda y cuanta funcionalidad deseéis, e incluso recordar que disponéis de herramientas para añadir un aviso por SMS si así lo queréis.

Para el envío de correo necesitamos disponer de un MTA que al menos nos permita mensajes salientes por SMTP a otros dominios, para ello usaremos exim4, que viene por defecto en Debian. Si no lo tenemos instalado:

sudo dpkg-reconfigure exim4-config

En caso contrario:

sudo apt-get install exim4

Nos aparecerá el configurador de Debian y pulsamos Aceptar:

Paso 1

Le indicamos que vamos a enviar el correo directamente usando SMTP:

Paso 2

Nos pedirá el nombre del sistema de correo, podemos utilizar el hostname y el domino que teníamos configurado por defecto:

Paso 3

Como en principio no vamos a utilizar el servidor de correo más que para que la propia máquina nos envíe los avisos tan solo aceptaremos conexiones SMTP de nuestra propia máquina, así evitamos que se utilice para el envío de spam, por tanto escucharemos solo en localhost dirección ip 127.0.0.1:

Paso 4

En otros destinos, podemos dejar el propio host (tal y como viene por defecto), aunque como localhost ya esta en la lista podemos dejarlo en blanco si así lo deseamos:

Paso 5

No utilizaremos dominios para reenviar correo, sino que lo enviaremos directamente, por tanto lo dejamos en blanco:

Paso 6

El sistema puede actuar como smarthost para otras máquinas, aunque en nuestro caso no va a actuar como tal por tanto lo dejamos en blanco:

Paso 7

Para equipos con conexión dialup podemos limitar el número de consultas DNS, aunque lo más probable es que nuestro equipo este permanentemente conectado a internet, por tanto si este es el caso le decimos que NO queremos limitar el número de consultas DNS:

Paso 8

Podemos guardar el correo en un solo fichero (mbox) o en varios (uno por cada correo, con Maildir) os lo dejo a vuestra discreción yo he elegido mbox:

Paso 9

Podemos dividir la configuración en pequeños ficheros, aunque si vamos a realizar modificaciones constantemente (como suele pasar con la gente que nos gusta trastear) es mejor tenerlo todo en un sólo fichero, esto como no también lo dejo al gusto de cada uno:

Paso 10

Y aquí por fin sin más preámbulos el script: Wink

#!/bin/sh
###################################
# Jose Antonio Torres             #
# Aviso actualizaciones Debian    #
# v 0.1                           #
# http://bytecoders.net #
###################################

###### Dirección de correo para el aviso:
mailto="usuario@dominio.com"
#########################################

# Comprobar nuevos paquetes
apt-get update
apt-get upgrade -V -s > /tmp/new_updates
numlin=`wc -l /tmp/new_updates | cut -d' ' -f1`
if [ $numlin == "3" ]
  then
    echo "No hay actualizaciones" >> /tmp/new_updates
else
    echo "" >> /tmp/new_updates
    hostname >> /tmp/new_updates
    echo "Nuevas actualizaciones disponibles">> /tmp/new_updates
    echo "a fecha $(date +%d-%m-%Y/%r)" >> /tmp/new_updates
    mail -s "Nuevas actualizaciones disponibles" $mailto < /tmp/new_updates
fi

Si queremos añadir el aviso por SMS recordad configurar la herramienta de envío SMS usando la Google API de Ivan López. Y añadimos la siguiente línea al final del script:

    # Esta es la línea que se ha añadido
    sh /ruta/al/ficherodeenvio/EnviaSMS.sh $mailto passwd "Hay nuevas actualizaciones disponibles"
fi

Tan solo creáis el fichero le dais permisos de ejecución, creáis la correspondiente entrada en el cron y a funcionar. No dudéis en comentar cualquier duda, consejo, mejora, fallo o si os ha resultado útil.

Debian: 
Qué te parece: 

Comments

Ya que te pones estaría muy bien un pequeño tutorial para configurar sendmail (o el que sea) para poder enviar emails a direcciones externar tipo usuario@gmail y demás.

Saludos, Iván.

Pues tienes toda la razón a veces ya doy ciertas cosas como entendidas. Intentaré explicar como configurar exim para ofrecer servicio SMTP saliente.

Muchas gracias por el tutorial. Lo probaré cuando tenga un rato a ver si logro hacerlo funcionar.

Saludos, Iván.

Ok! Ya nos contarás que tal te ha ido, si tienes cualquier duda ya sabes donde estamos. Wink

Saludos, Bytecoders

He hecho todo como has puesto pero no va. Cuando envío un email (da igual que sea desde root o desde mi cuenta) tengo esto:

shian:/var/log/exim4# tail mainlog
2007-12-18 23:33:52 exim 4.63 daemon started: pid=3634, -q30m, listening for SMTP on [127.0.0.1]:25
2007-12-18 23:35:07 1J4l1n-0000xP-Q3 <= ivan@shian.casa U=ivan P=local S=1609
2007-12-18 23:35:27 1J4l1n-0000xP-Q3 == midireccion@gmail.com R=dnslookup defer (-1): host lookup did not complete

Es como si no pudiera resolver el dominio. Sin embargo el /etc/resolv.conf apunta a mi router y puedo hacer ping google.com y responde.

He estado buscando en google pero no encuentro nada. Es necesario configurar algo en algún fichero?. Alguna idea?.

Saludos, Iván.

Para descartar posibles errores con el servidor de nombres prueba con nslookup, y comprueba que te resuelve todas las máquinas, por ejemplo con gmail.com:

nslookup www.gmail.com

Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
www.gmail.com   canonical name = mail.google.com.
mail.google.com canonical name = googlemail.l.google.com.
Name:   googlemail.l.google.com
Address: 72.14.205.17
Name:   googlemail.l.google.com
Address: 72.14.205.18
Name:   googlemail.l.google.com
Address: 72.14.205.19
Name:   googlemail.l.google.com
Address: 72.14.205.83

Si tienes problemas con el nslookup, y no tienes el nombre del dominio local en el /etc/resolv.conf, prueba a configurarlo e intenta volver a mandar un correo:

search dominiolocal.com
nameserver ip.del.router.gateway

Si no hay problemas con el lookup o después de indicar el dominio en resolv.conf continua con el mismo error, a veces exim4 puede dar errores si no tenemos configurado un nombre de dominio válido en qualify_domain aunque el registro MX de este dominio no apunte a nuestra máquina, para ello cambia el parámetro por lopezivan.blogspot.com para hacer la prueba:

qualify_domain = DC_visiblename
# lo cambias por
qualify_domain = lopezivan.blogspot.com

Para curarnos en salud, indica a exim4 que dominios son locales (los que distribuyen correo):

# List of domains considered local for exim. Domains not listed here
# need to be deliverable remotely.
.ifndef MAIN_LOCAL_DOMAINS
MAIN_LOCAL_DOMAINS = DEBCONFlocal_domainsDEBCONF

# Cambia la DEBCONFlocal_domainsDEBCONF por el dominio local que tenga tu máquina en /etc/hosts

Luego reinicia exim4:

/etc/init.d/exim4 restart
Stopping MTA for restart: exim4_listener.
Restarting MTA: exim4.

Intenta realizar la prueba de nuevo:

echo "Cuerpo del mensaje" | mail -s "Asunto" micuenta@gmail.com

Saludos y suerte, Bytecoders

Siento ser tan pesado pero esto no va.

Por lo que estoy viendo el archivo que tengo que tocar es el /etc/exim4/exim4.conf.template, no?. Y luego al ejecutar el script /usr/sbin/update-exim4.conf se genera automáticamente el archivo de configuración de exim que se guarda en /var/lib/exim4/config.autogenerated. Voy bien hasta aquí?.

El caso es que estoy cambiando el archivo /etc/exim4/exim4.conf.template con los cambios que me has sugerido pero me sigue sin funcionar. Aparece el mismo error que antes.

Algún tutorial donde encontrar algo más de información?. Es que estoy buscando en google pero no encuentro nada que sea muy básico, todo presupone unos conocimientos que obviamente no tengo.

Saludos y muchas gracias, Iván.

 

Tranquilo, no te haces pesado para nada. Para mi resulta interesante toda esta actividad que se está generando.

Lo que si que me sabe mal es que no te funcione, y no se me ocurre que puede estar pasando.

La verdad es que exim4 es bastante potente y es posible que en google te encuentres tutoriales para servidores de correo seguros que hagan POP también, son SASL y protección antispam.

Se me ocurre que (como tu mismo comentaste) pruebes con sendmail, tienes un tutorial bastante simple en la red. Si no funciona con sendmail podemos aislar el problema ya que no tendría relación con el servidor de correo.

Saludos Iván y recuerda que aquí estamos para lo que haga falta, por favor no dudes en consultar, estoy intentando reproducir el error pero no lo consigo. Frown

Gracias, esta noche probaré otra vez a ver si lo consigo.

En tu respuesta anterior, cuando dijiste: "# Cambia la DEBCONFlocal_domainsDEBCONF por el dominio local que tenga tu máquina en /etc/hosts". Como mi máquina es shian.casa, te refieres a poner "casa"?. De todas formas también probé con shian, shian.casa, casa. Y siempre el mismo error ese del dnslookup defer.

Y el otro parámetro, el qualify_domain, al ponerlo lo único que cambiaba era que en el log, en vez de aparecer como remitente ivan@shian.casa aparecía ivan@lopezivan.blogspot.com. Pero siempre daba el dichoso error del dnslookup defer.

Yo creo que se me debe estar pasando configurar algo, pero no sé el qué. Sino, te doy acceso a mi máquina y me lo arreglas en un momento ;-). Verás como es muy fácil de reproducir.

Saludos y muchas gracias por tu tiempo!.

Perfecto, si ves que no anda crea un usuario que pueda escalar permisos para configurar paquetes, y me das acceso. Para pasarme la información de acceso puedes utilizar el formulario de contacto.

A ver si conseguimos ver donde está el fallo. Me refería a poner casa si, pero si los has probado todos parece que ese no es el problema.

Saludos, Bytecoders

Como veía que no funcionaba nada he desinstalado todos los paquetes de exim4 (incluída la configuración) y he empezado de nuevo.

De momento ya me funciona el envío de correo en la propia máquina (antes ni siquiera eso). Pero para direcciones externas sigo con el mismo fallo. Voy a ver si logro avanzar un poco más.

Saludos, Iván.

He tenido la oportunidad de ver tu configuración, y las únicas diferencias que encuentro es el nombre de dominio.

Se me ocurre que tal vez a exim no le guste el dominio casa al no acabar en un TLD, prueba a sustituirlo por casa.com, casa.net o otro similar.

Saludos, Bytecoders

Lo del dominio no funciona. Además también he probado a poner uno del tipo xxxx.no-ip.com y ni así.

Sin embargo, poniendo en el archivo /etc/update-exim4.conf.conf:

dc_other_hostnames='gmail.com'

consigo que al enviar a mi dirección de gmail el error del log sea este:

2007-12-21 15:40:32 1J5j3A-0005ZS-2l ** miusuario@gmail.com: Unrouteable address

He buscado en google y parece que es porque me falta configurar algo del servidor MX, pero no sé cómo hacerlo. Alguna idea?.

Saludos y gracias, Iván.

P.D: Si al final lo conseguimos te has ganado unas cañas porque te estoy dando mucho la lata.

P.D2:

$ write usuario

Escribes lo que sea

<CRTL>+D para finalizar

No se como es exactamente en no-ip, pero en dyndns te dan las opciones para configurar los registros mx desde la web accediendo con tu usuario y password.

Yo no los he configurado, pero se que hay la opción.

Deberías tener también la posibilidad con no-ip.

Saludos, Bytecoders

Hola amigos, buscando como configurar exim llegue a su página y me encuentro con el mismo problema: no puedo enviar correos afuera.
lo que me dice el comando tail mainlog es lo siguiente:
009-09-15 19:07:33 1MndNF-0004CC-8l => augusto R=local_user T=maildir_home
2009-09-15 19:07:33 1MndNF-0004CC-8l Completed
2009-09-15 19:09:24 1MndP2-0004CQ-Qd 2009-09-15 19:09:24 1MndP2-0004CQ-Qd ** augusto??@gmail.com R=smarthost T=remote_smtp_smarthost: retry time not reached for any host after a long failure period
2009-09-15 19:09:24 1MndP2-0004CT-So R=1MndP2-0004CQ-Qd U=Debian-exim P=local S=1258
2009-09-15 19:09:24 1MndP2-0004CQ-Qd Completed
2009-09-15 19:09:24 1MndP2-0004CT-So => augusto R=local_user T=maildir_home
2009-09-15 19:09:24 1MndP2-0004CT-So Completed
2009-09-15 19:16:21 Start queue run: pid=16187
2009-09-15 19:16:21 End queue run: pid=16187

Me ayudan con esto?

Un abrazo.

Augusto.