El autor seleccionó la Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.
Postfix es un agente de transferencia de correo (MTA), una aplicación que se utiliza para enviar y recibir correos electrónicos. Se puede configurar para que solo se pueda utilizar para enviar correos electrónicos mediante una aplicación local. Esto es útil en situaciones en las que necesita enviar notificaciones por correo electrónico de sus aplicaciones de forma regular o, simplemente, si tiene mucho tráfico saliente que un proveedor de servicios de correo electrónico externo no permite. También es una alternativa más ligera a la ejecución de un servidor SMTP completo que mantiene la funcionalidad necesaria.
En este tutorial, instalará y configurará Postfix como servidor SMTP de solo envío. También solicitará certificados TLS gratuitos de Let´s Encrypt para su dominio y cifrará los correos electrónicos salientes con ellos.
your_domain
en todo momento. Puede adquirir un nombre de dominio en Namecheap, obtener uno gratuito en Freenom o utilizar un registrador de dominios que elija.your_domain
orientado a la dirección IP pública de su servidor. Puede utilizar esta introducción al DNS de DigitalOcean para obtener más información sobre cómo agregarlos.Nota: El nombre de host de su servidor y el nombre de su Droplet deben coincidir con your_domain
, dado que DigitalOcean establece registros de PTR automáticamente para la dirección IP del Droplet de acuerdo con su nombre.
Puede verificar el nombre de host del servidor al escribir hostname
en el símbolo del sistema. El resultado debe coincidir con el nombre que le dio al Droplet al crearlo.
En este paso, instalará Postfix. Lo más rápido es instalar el paquete mailutils
, que agrupa Postfix con algunos programas complementarios que usará para probar el envío de correos electrónicos.
Primero, actualice la base de datos del paquete:
- sudo apt update
A continuación, instale Postfix al ejecutar el siguiente comando:
- sudo apt install mailutils
Cerca del final del proceso de instalación, se le presentará la ventana de configuración de Postfix:
.
La opción predeterminada es Internet Site
. Es la opción recomendada para su caso de uso, por lo tanto, presione TAB
y, luego, ENTER
. Si solo ve el texto de la descripción, presione TAB
para seleccionar OK
y, luego, ENTER
.
Si no se muestra automáticamente, ejecute el siguiente comando para iniciarlo:
- sudo dpkg-reconfigure postfix
Luego, recibirá otro mensaje de configuración con respecto a System mail name (el nombre de correo del sistema):
.
El nombre de correo del sistema debe ser el mismo que el que asignó a su servidor al crearlo. Cuando termine, presione TAB
y, luego, ENTER
.
Ahora, tiene Postfix instalado y está listo para comenzar a configurarlo.
En este paso, configurará Postfix para enviar y recibir correos electrónicos únicamente del servidor en el que se está ejecutando; es decir, desde localhost
.
Para que eso suceda, Postfix se debe configurar para que escuche únicamente en la interfaz de bucle invertido, que es la interfaz de red virtual que utiliza el servidor para comunicarse internamente. Para realizar los cambios necesarios, deberá editar el archivo de configuración principal de Postfix, denominado main.cf
, que se encuentra en etc/postfix
.
Ábralo para modificarlo con su editor de texto favorito:
- sudo nano /etc/postfix/main.cf
Busque las siguientes líneas:
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .
Establezca el valor de inet_interfaces
en loopback-only
:
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .
Otra directiva que deberá modificar es mydestination
, que se utiliza para especificar la lista de dominios que se entregan a través del transporte de entrega de correo local_transport
. Por defecto, los valores son similares a los siguientes:
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .
Cambie la línea para que tenga el siguiente aspecto:
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .
Si su dominio, en realidad, es un subdominio y desea que los mensajes de correo electrónico se vean como si se enviaran del dominio principal, puede añadir la siguiente línea al final de main.cf
:
...
masquerade_domains = your_main_domain
La configuración opcional de masquerade_domains
especifica para qué dominios se eliminará la parte de subdominio en la dirección de correo electrónico.
Cuando termine, guarde y cierre el archivo.
Nota: Si aloja varios dominios en un único servidor, los demás también se pueden pasar a Postfix al utilizar la directiva mydestination
.
A continuación, reinicie Postfix al ejecutar el siguiente comando:
- sudo systemctl restart postfix
Configuró Postfix para que solo envíe correos electrónicos desde su servidor. Ahora, lo probará al enviar un mensaje de ejemplo a una dirección de correo electrónico.
En este paso, probará si Postfix puede enviar correos electrónicos a una cuenta de correo electrónico externa usando el comando mail
, que es parte del paquete mailutils
que instaló en el primer paso.
Para enviar un correo electrónico de prueba, ejecute el siguiente comando:
- echo "This is the body of the email" | mail -s "This is the subject line" your_email_address
Puede cambiar el cuerpo y el asunto del correo electrónico a su gusto. Recuerde sustituir your_email_address
por una dirección de correo electrónico válida a la que pueda acceder.
Ahora, revise el correo en la dirección de correo electrónico a la que envió este mensaje. Debería ver el mensaje en su bandeja de entrada. Si no lo ve, revise su carpeta de correo no deseado. En este punto, los correos electrónicos que envía no están cifrados, lo que hace que los proveedores de servicios piensen que es probable que sean correos no deseados. Configurará el cifrado más adelante, en el paso 5.
Si recibe un error del comando mail
, o si no recibió un mensaje después de un período prolongado, compruebe que la configuración de Postfix que modificó sea válida y que el nombre de su servidor y el nombre de host estén establecidos con el nombre de su dominio.
Observe que, con esta configuración, la dirección del campo From
de los correos electrónicos de prueba que envíe tendrá el formato your_user_name@your_domain
, en el que your_user_name
es el nombre del usuario del servidor con el que ejecutó el comando.
En este punto, envió un correo electrónico desde su servidor y verificó que se haya recibido correctamente. En el siguiente paso, configurará el reenvío de correos electrónicos para root
.
En este paso, configurará el reenvío de correos electrónicos para el root
user a fin de que los mensajes generados por el sistema que se le envíen en su servidor se reenvíen a una dirección de correo electrónico externa.
El archivo /etc/aliases
contiene una lista de nombres alternativos de destinatarios de correo electrónico. Ábralo para editarlo:
- sudo nano /etc/aliases
En su estado predeterminado, tiene el siguiente aspecto:
# See man 5 aliases for format
postmaster: root
La única directiva presente especifica que los correos electrónicos generados por el sistema se envíen a root
.
Añada la siguiente línea al final del archivo:
...
root: your_email_address
Con esta línea, especifica que los correos electrónicos enviados al root
user se reenvíen a una dirección de correo electrónico específica. Recuerde sustituir your_email_address
por su dirección de correo electrónico personal. Cuando termine, guarde y cierre el archivo.
Para que el cambio surta efecto, ejecute el siguiente comando:
- sudo newaliases
Al ejecutar newaliases
, se creará una base de datos de alias que utiliza el comando mail
, que se toman del archivo de configuración que acaba de editar.
Compruebe que se envíen correos electrónicos al root
user al ejecutar lo siguiente:
- echo "This is the body of the email" | mail -s "This is the subject line" root
Debería recibir el correo en su dirección de correo electrónico. Si no lo ve, revise su carpeta de correo no deseado.
En este paso, configuró el reenvío de mensajes generados por el sistema a su dirección de correo electrónico. Ahora, habilitará el cifrado de mensajes para que todos los correos electrónicos que envíe su servidor estén protegidos contra alteraciones en tránsito y se consideren más legítimos.
Ahora, habilitará el cifrado SMTP al solicitar un certificado TLS gratuito de Let´s Encrypt para su dominio (con Certbot) y configurará Postfix para que lo utilice al enviar mensajes.
Ubuntu incluye Certbot en su repositorio de paquetes predeterminado, pero podría estar desactualizado. En su lugar, añadirá el repositorio oficial al ejecutar el siguiente comando:
- sudo add-apt-repository ppa:certbot/certbot
Presione ENTER
cuando se le solicite que acepte. A continuación, actualice la caché del administrador de paquetes de su servidor:
- sudo apt update
Por último, instale la última versión de Certbot:
- sudo apt install certbot -y
En los requisitos previos, instaló el firewall sencillo ufw
como parte de la configuración inicial del servidor. Deberá configurarlo para que habilite el puerto HTTP 80
para que se pueda completar la verificación de dominios. Ejecute el siguiente comando para habilitarlo:
- sudo ufw allow 80
El resultado tendrá el siguiente aspecto:
OutputRule added
Rule added (v6)
Ahora que el puerto está abierto, ejecute Certbot para obtener un certificado:
- sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain
Este comando le ordena a Certbot que emita certificados con un tamaño de clave RSA de 4096 bits, que ejecute un servidor web autónomo temporal (--standalone
) para la verificación y que revise a través del puerto 80
(--preferred-challenges http
). Recuerde sustituir your_domain
por su dominio antes de ejecutar el comando e ingrese su dirección de correo electrónico cuando se le solicite hacerlo.
El resultado tendrá un aspecto similar a este:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for `your_domain`
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Como se indica en las notas, su certificado y su archivo de clave privada se guardaron en /etc/letsencrypt/live/your_domain
.
Ahora que tiene su certificado, abra main.cf
para editarlo:
- sudo nano /etc/postfix/main.cf
Busque la siguiente sección:
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Modifíquelo para que se vea de esta manera, reemplazando your_domain
por su dominio donde sea necesario, lo que actualizará su configuración de TLS para Postfix:
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtp_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Cuando termine, guarde y cierre el archivo.
Aplique los cambios al reiniciar Postfix:
- sudo systemctl restart postfix
Ahora, vuelva a probar enviar un correo electrónico:
- echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address
A continuación, revise el correo de la dirección de correo electrónico que proporcionó. Es posible que vea el mensaje en su bandeja de entrada de inmediato, porque es mucho más probable que los proveedores de correo electrónico clasifiquen los mensajes no cifrados como correo no deseado.
Puede consultar la información técnica sobre el mensaje de correo electrónico en su cliente para ver que el mensaje, efectivamente, está cifrado.
Ahora, tiene un servidor de correo electrónico de solo envío de Postfix. Cifrar todos los mensajes salientes es un buen primer paso para que los proveedores de correo electrónico no clasifiquen sus mensajes directamente como correo no deseado. Si está haciendo esto en un escenario de desarrollo, esta medida debería ser suficiente.
Sin embargo, si desea enviar correos electrónicos a posibles usuarios del sitio (por ejemplo, correos de confirmación para la inscripción a un tablero de mensajes), considere establecer registros SPF para que los correos electrónicos de su servidor tengan más probabilidades de considerarse legítimos.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Tuve éxito enviando y recibiendo emails (en el destino) con este tutorial. Sin embargo experimente algunos contratiempos. Mis recomendaciones: 1. Seguir los tutoriales de requisitos previos, en particular se trata de que tu dominio este funcionando ya con tu droplet, haber activado el UFW tal y como es requerido y hacer caso a la Nota, es INDISPENSABLE. 2. No te decepciones si la prueba del punto 3 no llega, debido a falta de cifrado es altamente probable que no llegue, sigue hasta el punto 5 (puedes omitir el 4) 3. Apaga tu sitio antes de generar el cifrado del punto 5, con sudo systemctl stop apache2, luego ejecuta la instrucción de generación de llaves (sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain) y vuelve a encender tu dominio con sudo systemctl start apache2. Y sigue con la configuración.
Hice todo al pie de la letra y sigue sin funcionar, no llega ningun correo.
Saludos, puedo usar esta guia para instalar en CentOS, obviamente en vez de utilizar apt utilizaria Yum o dnf?
Buen material, hise todo pero aún me llega el correo no cifrado, ¿donde estaría el error?