Archivo por meses: septiembre 2014

No pierdas el correo de tus servidores

Históricamente los servidores GNU/Linux han contando con un servidor de correo en sus instalaciones más básicas, aunque sólo fuese para uso propio/interno. Por ello hay aplicaciones como cron, at, logcheck, smartmontools, etc. que dan por hecho que este servicio está presente y bien configurado y lo usan para enviar avisos, algunos de máxima importancia. Por este motivo es importante asegurarse de que nuestra máquina hará llegar los posibles correos que se envíen desde ella a una dirección de correo que sea comprobada de forma periódica. Por ejemplo a nuestra propia dirección de correo.

Como alternativa podríamos entrar en la máquina y mirar el correo en ella (por ejemplo con el comando mail del paquete «mailx» o similares). El problema de esta solución es que hay que tener la disciplina de hacerlo frecuentemente y no escala en el momento que gestionemos varios servidores.

Acciones a realizar para asegurarse de que el correo llegará correctamente a una cuenta externa:

  • El servidor tiene un nombre válido de DNS (servidor.example.net) o pone uno a los correos que salgan de él.
  • El servidor tiene que tener acceso a Internet (para sacar el correo) o al menos a un servidor de correo que usemos como relay.
  • El servidor tiene que ser capaz de resolver entradas DNS (tener un servidor DNS alcanzable en el /etc/resolv.conf), salvo que lo entregue por un servidor de relay.
  • Las cuentas de los usuarios deben apuntar a la cuenta de correo real a la que queremos que llegue el correo.
  • Siempre realizar pruebas (por ejemplo con el comando mail) para comprobar el correcto comportamiento.

No voy a entrar en la configuración de red (salida a Internet y DNS) en este post, porque debería ser trivial. Si entraré en detalle en los otros puntos.

Nombre válido del servidor

La mayoría de los servidores de correo en Internet rechazarán correo proveniente de una dirección no válida, por ejemplo: root@mi_servidor, root@mi_servidor.local o root@mi_servidor.dominio_que_no_exite.com. Por ello debemos asegurarnos de que el nombre completo (FQDN) de nuestra máquina puede ser resuelto por el sistema DNS, o configurar el servidor local de correo para que use un dominio válido (por ejemplo cuando el nombre de nuestro servidor sólo es válido en su red local). En el caso de Postfix podemos usar la variable myorigin para indicarlo:

# En /etc/postfix/main.cf
# En el caso de Debian el valor de la variable está en el fichero mailname
# Podemos cambiarlo ejecutando: echo servidor.example.net > /etc/mailname
# Ejecutar "postfix reload" después de hacer los cambios
myorigin = /etc/mailname
# También podríamos especificarlo directamente
#myorigin = servidor.example.net

Servidor relay

Si nuestra máquina no está conectada directamente a Internet, porque presta un servicio local, lo ideal es que haga llegar todo su correo a un servidor que pueda realizar esta labor. Por ejemplo el servidor de correo que usemos normalmente. Llegados a este punto existen dos posibilidades: que nuestra máquina pueda ser identificada por su IP en el servidor de correo (y por tanto este último acepte su correo directamente) o que esto no sea posible y por tanto nuestra máquina tenga que identificarse con un usuario y contraseña SMTP en el servidor (como lo haría cualquier cliente de correo). Como fan de Postfix, pondré los ejemplos de configuración para dicho software. Esta sería la configuración para que un servidor (con Postfix instalado) use a otro (relay) para sacar su correo interno:

# El correo se envía a 10.20.30.40 para que éste lo envíe al destinatario final
# También podemos usar el nombre del servidor de correo en vez de su IP
relayhost = 10.20.30.40
# En caso de necesitar autenticación en el servidor relay,
# descomentar las siguientes líneas y crear el fichero indicado
#smtp_sasl_auth_enable = yes
#smtp_sasl_password_maps = hash:/etc/postfix/passwords

En el caso de necesitar autenticación, crearíamos el fichero passwords con el siguiente contenido y posteriormente ejecutaremos el comando «postmap /etc/postfix/passwords» como root:

# Contenido del fichero /etc/postfix/passwords
# Servidor          usuario_smtp:clave_smtp
10.20.30.40         fulanito@example.com:s3cr3t0s
# El campo servidor debe coincidir exactamente
# con el indicado en la opción relayhost

Dirigir el correo de los usuarios locales a una cuenta externa

Por defecto el correo para usuarios locales (root, logcheck, tu propio usuario) se quedará en la propia máquina. Para que llegue a nuestro correo tenemos varias opciones. Mi preferida es mandar todos los correos de usuarios de sistema a root, y el de éste a mi usuario local:

# /etc/aliases
logcheck: root
nagios: root
www-data: root
# [ los que ya vengan por defecto]
root: agi

Importante: Después de modificar el fichero /etc/aliases, debemos ejecutar el comando «newaliases» como root.

Llegados a este punto tenemos dos opciones. Una es meter la siguiente entrada en el /etc/aliases también:

agi: example@example.net

La otra es crear un fichero llamado «.forward» en nuestro $HOME con nuestra dirección de correo como único contenido:

echo "example@example.net" > ~/.forward

Esta última solución tiene como ventaja que no requiere del uso de root (o la ejecución de newaliases), por lo que es más útil para usuarios que no tengan dichos privilegios.

Prueba que funciona

Una vez todo configurado, queda probar que el correo llega a su destino. Para ello basta con ejecutar «ps ax | mail root» o «ls -l /etc | mail mi_usuario» o «cat /etc/hosts | mail logcheck» y comprobar que el correo llega a nuestra dirección de correo. En caso contrario habrá que empezar a revisar los logs de correo.

Es vital que se realice esta comprobación, incluso de vez en cuando de forma manual si la máquina no suele generar correo. El objetivo es evitar que el día que la herramienta de monitorización de discos (por poner un ejemplo), empieza a detectar errores y notificarnos por correo, nos enteremos inmediatamente y no pasados unos días cuando el disco esté completamente muerto.

$ exit