Red - Web - GNU/Linux

2019 13 diciembre

Envío de correos electrónicos desde un servidor con mSMTP

Escrito por Alfredo Delcalcetín | sin comentarios

En la sección ISPMail/Mail FAI encontrarás toda la información que necesitas para configurar un servidor de correo de calidad profesional. Pero hay muchos casos en los que puedes querer que un servidor pueda enviar correo sin convertirlo en un servidor de correo completo. A continuación, debe utilizar un "smarhost", es decir, un servidor smtp para retransmitir su correo.

El MTA (Mail Transfer Agent) ligero msmtp satisface perfectamente esta necesidad. Si tienes varios servidores y has configurado un servidor de correo en uno de ellos, será interesante asegurarte de que sus otros servidores puedan utilizarlo para reenviar su correo. También puedes utilizar el servidor de tu ISP o el de una plataforma como Gmail.

En un artículo anterior utilicé otro MTA ligero para satisfacer esta necesidad, ssmtp. Pero este último ya no se mantiene y ha sido eliminado de los repositorios de Debian para la versión 10 Stretch. Afortunadamente, se reemplaza ventajosamente por msmtp, cuya configuración es tan simple como ssmtp, pero más flexible.

¿Cuándo utilizar un MTA ligero como msmtp?

Es posible que deseas utilizar este tipo de software en varios casos:

  • Deseas que tu servidor, o un servicio de monitoreo en este servidor, te envíe correos electrónicos regulares para mantenerte informado de cualquier problema ;
  •  para poder llevar a cabo estos envíos no quieres sin embargo tener que transformar tu servidor en un servidor de correo (lo que implica configuración, declaración de la máquina en el spf, firma dkim etc.) ;
  •  ya dispones de un servidor de correo completo con antispam, antivirus, capaz de firmar mensajes con una clave dkim y que aparece en los registros DNS de tu(s) dominio(s) ;
  • alojas sitios web y deseas que tus sitios puedan enviar correos electrónicos y que cumplan con los estándares modernos (firma dkim, registros spf y dmarc).

Instalación de msmtp

El programa está en repositorios de Debian, así tienes que ejecutar el comando:

apt install msmtp-mta

para instalarlo.

configuración de msmtp

Las configuraciones msmtp se realizan a través de un archivo /etc/msmtprc (opcional) que permite definir una configuración por defecto para los usuarios que no tienen una configuración personalizada, luego a través de archivos .msmtprc ubicados en el directorio de inicio de cada usuario del sistema para configuraciones personalizadas. Esto permite tener una configuración general para el servidor y una configuración diferente para cada usuario sin ninguna dificultad.

Configuración por defecto

Una configuración típica sería definir para todo el servidor un smarthost que utilizar, un usuario por defecto para conectarse a este smarthost, el puerto al que conectarse, la dirección de correo electrónico en el encabezado del correo electrónico y el requisito de usar encriptación TLS para las conexiones (o STARTTLS). Para todos los usuarios que no tengan un archivo .msmtprc en su /home, msmtp utilizará este archivo por defecto. Toda esta configuración está en el archivo /ets/msmtprc, algo así:

account default
host mail.example.net
from admin@example.net
auto_from off
add_missing_from_header on
auth on
port 587
user admin@example.net
password Y8eqFDJNFPTp 
logfile ~/.msmtp.log
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

Para todos los usuarios que no tengan una configuración específica, msmtp utilizará este archivo para reenviar el correo. Los correos electrónicos se enviarán al servidor de correo mail.example.net con admin@example.net como remitente. Por supuesto, el usuario utilizado para la autenticación debe existir en el smarthost (aquí admin@example.net).  La contraseña está en texto claro en el archivo, veremos a continuación cómo evitarlo si eso te molesta (pero complica mucho las cosas).

Configuración específica de usuario

Podemos entonces, según sea necesario, crear en su directorio de inicio un archivo /home/nomuser/.msmtprc que contendrá la información necesaria para enviar correo (servidor smtp e información de conexión).

Por ejemplo, si aloja un blog utilizando el servidor Apache y el modo suexec que permite ejecutar Apache bajo el nombre del usuario que posee los directorios y archivos de su sitio de blog. Asumiendo que su usuario se llama blog, la página de inicio del blog será, por ejemplo, /var/www/monblog/. En este directorio se puede poner un archivo .msmtprc de este tipo:

account default
host smtp.laposte.net
from toto@laposte.net
auto_from off
add_missing_from_header on
auth on
port 587
user toto@laposte.net
password Xu7OeboAyADn 
logfile ~/.msmtp.log
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

Y si por ejemplo usas la función de mail de php al haber declarado msmtp en tu php.ini, tu blog enviará sus correos a través del smtp de la oficina de correos, bajo la identidad toto@laposte.net.

Algunos CMS utilizan clases (como PhpMailer) que pueden enviar correos electrónicos directamente a un smarthost. Pero si simplemente utilizas la función php mail, puedes declarar msmtp como el método de envío, que le permitirá con la función mail utilizar un smarthost.  Simplemente agregue la siguiente línea en el archivo php.ini que estás usando:

sendmail_path = /usr/sbin/sendmail -t -i

como /usr/sbin/sendmail es en realidad un enlace simbólico en /usr/bin/msmtp php enviará su correo a través de msmtp.

Almacenamiento de contraseñas

Con todos los servidores smtp, a menos que uno se encuentre en su red de confianza, sólo podrá transmitir sus correos una vez que haya sido autenticado (es decir, que haya demostrado al servidor que tiene acceso a una de sus cuentas que puede enviar correos). Esta autenticación se realiza normalmente mediante nombre de usuario y contraseña, y esta información debe transmitirse cifrada. La transmisión encriptada es proporcionada por TLS. Pero ¿qué pasa con la contraseña que debe estar en algún lugar de su servidor para que msmtp pueda transmitirla al servidor smtp?

Hasta ahora, en nuestros ejemplos, la contraseña estaba en texto plano en el archivo .msmtprc. Esta es una posible violación de la seguridad si usted no cuida los derechos de sus archivos para que nadie más que el propietario del archivo pueda leerlos. En su documentación online el desarrollador explica las 5 formas en que msmtp puede almacenar la contraseña de inicio de sesión, y los métodos que soporta para transmitirla al servidor.

Recomienda las dos primeras formas:

  1. el uso de un llavero, que es un software que almacena los identificadores y contraseñas de un sistema en la memoria. Pero los únicos sistemas compatibles son el llavero Gnome y el llavero de Mac OSX.  Esto es posible si usamos msmtp en una estación de trabajo pero en un servidor no instalaremos Gnome, y usamos un servidor Debian y no un sistema Apple.
  2. Usar GPG para encriptar la contraseña. Para hacer esto, necesita instalar GnuPG y su agente, generar una clave GPG y usarla para encriptar su contraseña. Cada vez que se inicia el sistema, se debe proporcionar la frase clave al agente GPG. Es bastante restrictivo, depende de ti ver si lo necesitas absolutamente.

Por mi parte, me inclino a pensar que si le das 600 permisos a tu archivo .msmtprc, el riesgo es aceptable (y si no lo haces msmtp se negará a enviar tus emails).

Si tu servidor está comprometido y alguien logra convertirse en root o simplemente ejecutar un script como uno de los usuarios de tu sistema, por supuesto podrá ver todas las contraseñas o contraseñas del archivo del usuario cuya identidad esta robando. Pero si ha encriptado tu contraseña con GnuPG y el agente tiene la contraseña en claro en la memoria, el intruso ciertamente no verá la contraseña, pero podrá enviar todos los email que quiera. La única limitación puede venir entonces de tu smarthost que puede negarse a enviar más de un cierto número de correos electrónicos por período de tiempo para un usuario.

Si realmente no te agrada la presencia de una contraseña no cifrada o si hay muchos usuarios accediendo a tu máquina, aquí tienes cómo usar GnuPG y el comando passwordeval de msmtp para cifrar tus contraseñas.

Encriptación de contraseñas con GnuPG

Primero instalamos los programas necesarios:

apt install gnupg gnupg-agent

A continuación, se inician las cosas serias, primero debes generar tu clave con la frase de contraseña. Sin la frase de contraseña cualquier intruso podría descifrar su contraseña como lo hace msmtp.

La frase de contraseña es simplemente una cadena lo suficientemente larga y compleja que sirve para encriptar la propia clave de GnuPG y descifrarla para poder usarla. Como estamos en un servidor y no puedes introducir la frase de contraseña para cada envío, la frase de contraseña desencriptada se almacena en la memoria por un programa gpg-agent que proporciona esta información a programas como msmtp.

Durante la generación se te hará el programa diferentes preguntas, así es como se ve el cuestionario.

[20:38:35] root@srv1.mydomain.net : [~] # gpg --full-generate-key
gpg (GnuPG) 2.1.18; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 
Requested keysize is 3072 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 10y
Key expires at Sat 08 Dec 2029 08:45:25 PM CET
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: Toto LESBONNESHISTOIRES
Email address: toto@laposte.net
Comment: 
You selected this USER-ID:
    "Toto LESBONNESHISTOIRES "

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: key 9FC9759BD0EA2805 marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/0BCD1DA5B34581AFF5F57ACB9FC9759BD0EA2805.rev'
public and secret key created and signed.

pub   rsa3072 2019-12-11 [SC] [expires: 2029-12-08]
      0BCD1DA5B34581AFF5F57ACB9FC9759BD0EA2805
      0BCD1DA5B34581AFF5F57ACB9FC9759BD0EA2805
uid                      Toto LESBONNESHISTOIRES 
sub   rsa3072 2019-12-11 [E] [expires: 2029-12-08]

En general para generar entropía ejecuto en otro terminal ssh el comando tree / que ocupa el procesador y el disco. Al generar la clave (no aparece aquí) se te pedirá tu frase de contraseña. Tendrás que guardarla cuidadosamente (por ejemplo, usando el software keepass), porque se le preguntará cada vez que ejecute el agente gpg. Para generar una clave compleja se puede, por ejemplo, ejecutar el comando :

pwgen -1sncy 40

Si no instalaste pwgen:

apt install pwgen

Ahora podrás crear en la carpeta del usuario, el archivo que contenga la contraseña, y luego encriptar este archivo con GnuPG. Dijimos que la contraseña para toto@laposte.net era Xu7OeboAyADn. Por lo tanto, se crea un fichero que contiene este valor:

echo 'Xu7OeboAyADn' > .msmtp-password

A continuación, lanzarás el comando de encriptación:

gpg --encrypt .msmtp-password

El programa te pedirá tu ID (aquí tu nombre es Toto LESBONNESHISHISTOIRES) y obtendrás un archivo .msmtp-password.gpg. Borraras .msmtp-password y te aseguraras de darle al archivo .msmtp-password.gpg como proprietario tu usuario con los derechos unix 600.

rm .msmtp-password
chown toto:toto .msmtp-password.gpg
chmod 600 .msmtp-password.gpg

 

Escribir un comentario

Cuál es la cuarta letra en la palabra fxubyv?

Sindicación RSS de los comentarios de este artículo

À propos

Yakati.com - Red - Web - GNU/Linux © 2017

Generado por PluXml en 0.013s  Compresión GZIP activada - Administración

Mes coordonnées

Marc Guillaume
contact[at]yakati.com
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Generado por PluXml, le Blog o Cms sin bases de datos

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml