Tutorial

Cómo instalar y utilizar Postfix en Ubuntu 20.04

Published on July 16, 2020
Español
Cómo instalar y utilizar Postfix en Ubuntu 20.04

Justin Ellingwood escribió una versión anterior de este tutorial.

Introducción

Postfix es un popular agente de transferencia de correo (MTA) de código abierto que puede usarse para dirigir y entregar correo electrónico en un sistema Linux. Se estima que alrededor del 25 % de los servidores de correo público de Internet cuentan con Postfix.

En esta guía, se mostrará la manera de instalar y configurar Postfix en un servidor de Ubuntu 20.04. Luego, comprobará que Postfix puede dirigir correctamente el correo instalando s-nail, un Agente de usuario de correo (MUA), también conocido como cliente de correo electrónico

Tenga en cuenta que el objetivo de este tutorial es ayudarlo a tener en funcionamiento Postfix rápidamente con alguna funcionalidad de correo electrónico básica. Al final de esta guía no tendrá un servidor de correo electrónico con funcionalidad completa, pero tendrá algunos de los componentes básicos de dicha configuración para ayudarlo a comenzar.

Requisitos previos

Para seguir esta guía, necesitará lo siguiente:

Tenga en cuenta que este tutorial asume que está configurando un host que tiene el FQDN de mail.example.com. Siempre que sea necesario, asegúrese de cambiar example.com o mail.example.com para que refleje su propio FQDN.

Paso 1: Instalar Postfix

Postfix se incluye en los repositorios predeterminados de Ubuntu, para que pueda instalarlo con APT.

Para comenzar, actualice su caché de paquetes apt local:

  1. sudo apt update

Luego instale el paquete postfix con el siguiente comando. Observe que aquí pasamos la variable ambiental DEBIAN_PRIORITY=low en el comando de instalación. Esto hará que el proceso de instalación le solicite que configure algunas opciones adicionales:

  1. sudo DEBIAN_PRIORITY=low apt install postfix

Este proceso de instalación abrirá una serie de solicitudes interactivas. A efectos de este tutorial, utilice la siguiente información para completar las solicitudes:

  • ¿Tipo general de configuración de correo?: para esto, elegiremos Internet Site debido a que coincide con las necesidades de nuestra infraestructura.
  • Nombre del sistema de correo: este es el dominio básico usado para construir una dirección de correo válida cuando solo se proporciona la parte de la cuenta de la dirección. Por ejemplo, digamos que el hostname de su servidor es mail.example.com. Probablemente quiera establecer el nombre de correo del sistema a example.com, para que, dado el nombre de usuario user1, Postfix usará la dirección user1@example.com​​.
  • Destinatario de correo root y postmaster: esta es la cuenta de Linux a la que se reenviará correo enviado a root@ y postmaster@. Utilice su cuenta principal para esto. En este ejemplo, sammy.
  • Otros destinos para los que se aceptará correo: esto define los destinos de correo que aceptará esta instancia de Postfix. Si necesita añadir cualquier otro dominio que este servidor sea responsable de recibir, añádalos aquí. De lo contrario, el predeterminado será suficiente.
  • ¿Forzar actualizaciones sincronizadas en la cola de correo?: ya que probablemente utilice un sistema de archivos con registro diario, seleccione No aquí.
  • Redes locales: esta es una lista de las redes para las que se configura su servidor de correo para la transmisión de mensajes. La predeterminada debería funcionar para la mayoría de los casos. Si decide modificarla, asegúrese de ser muy restrictivo con respecto al alcance de la red.
  • Límite de tamaño del buzón de correo: este valor puede usarse para limitar el tamaño de los mensajes. Si lo fija en 0, se deshabilitará la restricción de tamaño.
  • Carácter de extensión de dirección local: éste es el carácter que puede usarse para separar la parte regular de la dirección de una extensión (usada para crear alias dinámicos). El predeterminado. + funcionará para este tutorial.
  • Protocolos de Internet que se utilizarán: defina si restringirá la versión de IP que Postfix admite. A efectos de este tutorial, seleccione all (todas).

Para ser explícito, estos son los ajustes usados en esta guía:

  • ¿Tipo general de configuración del correo?: sitio de Internet
  • Nombre del correo del sistema: example.com​​​ (no mail.example.com)
  • Destinatario de correo root y postmaster: el nombre de usuario de su cuenta Linux principal (sammy en nuestros ejemplos)
  • Otros destinos para los que aceptar correo: $myhostname, example.com, mail.example.com, localhost.example.com, localhost
  • ¿Forzar actualizaciones sincronizadas en la cola de correo? :No
  • Redes locales: 127.0.0.0/8 [:ffff:127.0.0.0]/104 [::1]/128.
  • Límite de tamaño del buzón de correo: 0
  • Carácter de extensión de dirección local: +
  • Protocolos de Internet que se utilizarán: Todos

Nota: Si alguna vez necesita volver para configurar estos ajustes, puede hacerlo escribiendo lo siguiente:

  1. sudo dpkg-reconfigure postfix

Las instrucciones se completarán previamente con sus respuestas anteriores.

Cuando finalice el proceso de instalación, estará listo para realizar algunas actualizaciones a su configuración de Postfix.

Paso 2: Cambiar la configuración de Postfix

Ahora puede realizar ciertos ajustes que el proceso de instalación del paquete no le solicitó. Muchos de los ajustes de configuración de Postfix se definen en el archivo /etc/postfix/main.cf. En vez de editar este archivo directamente, puede usar el comando postconf de Postfix para consultar o establecer los ajustes de configuración.

Para comenzar, establezca la ubicación para el buzón de su usuario Ubuntu non-root. En esta guía, usaremos el formato Maildir, que separa los mensajes en archivos individuales que luego se mueven entre directorios según la acción del usuario. La opción alternativa que no está cubierta en esta guía es el formato mbox, que almacena todos los mensajes en un archivo único.

Establezca la variable home_mailbox a Maildir/. Más tarde, creará una estructura de directorio bajo ese nombre en el directorio de inicio de su usuario. Configure home_mailbox escribiendo lo siguiente:

  1. sudo postconf -e 'home_mailbox= Maildir/'

A continuación, establezca la ubicación de la tabla virtual_alias_maps, que asigna cuentas de correo arbitrarias a las cuentas del sistema Linux. Ejecute el siguiente comando, que asigna la ubicación de la tabla a un archivo hash de la base de datos llamado /etc/postfix/virtual:

  1. sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

Ahora que ha definido la ubicación del archivo de asignaciones virtuales en su archivo main.cf, puede crear el archivo en sí mismo y comenzar a asignar cuentas de correo a cuentas de usuario en su sistema Linux. Cree el archivo con su editor de texto preferido; en este ejemplo, usaremos nano:

  1. sudo nano /etc/postfix/virtual

Liste cualquier dirección para la que desee aceptar correo, seguido de un espacio en blanco y el usuario Linux al que desea que se le entregue el mensaje.

Por ejemplo, si desea aceptar correo electrónico en contact@example.com y admin@example.comy quiere que esos correos electrónicos se entreguen al usuario de Linux sammy, podría configurar su archivo de la siguiente forma:

/etc/postfix/virtual
contact@example.com sammy
admin@example.com sammy

Después de asignar todas las direcciones a las cuentas del servidor correspondientes, guarde y cierre el archivo. Si utiliza nano, podrá hacer esto pulsando CTRL+X, Y y, luego, ENTER.

Aplique la asignación escribiendo:

  1. sudo postmap /etc/postfix/virtual

Reinicie el proceso Postfix para asegurarse de que todos sus cambios se hayan aplicado:

  1. sudo systemctl restart postfix

Asumiendo que siguió la guía de requisitos previos para la configuración inicial del servidor, habrá configurado un firewall con UFW. Este firewall bloqueará las conexiones externas a los servicios en su servidor por defecto a menos que esas conexiones se permitan explícitamente, de forma que tendrá que añadir una regla de firewall para permitir una excepción para Postfix.

Puede permitir conexiones al servicio escribiendo lo siguiente:

  1. sudo ufw allow Postfix

Con esto, Postfix está configurado y listo para aceptar conexiones externas. Sin embargo, aún no está listo para probar con un cliente de correo. Antes de poder instalar un cliente y usarlo para interactuar con el correo que se entrega a su servidor, deberá realizar algunos cambios a la configuración de su servidor de Ubuntu.

Paso 3: Instalar el cliente de correo e iniciar la estructura de Maildir

Para interactuar con el correo que se entrega, este paso explicará el proceso de instalar el paquete s-nail. Esta es una variante rica en funciones del cliente xmail de BSD que puede gestionar el formato Maildir correctamente.

Antes de instalar el cliente, sin embargo, sería prudente garantizar que su variable de entorno MAIL está configurada correctamente. s-nail buscará esta variable para determinar dónde encontrar el correo para su usaurio.

Para garantizar que la variable MAIL está configurada independientemente de cómo accede a su cuenta (ya sea a través de ssh, su, su- o sudo, por ejemplo), deberá establecer la variable en el archivo /etc/bash.bashrc y añadirlo a un archivo en /etc/profile.d para asegurar que está configurado para todos los usuarios por defecto.

Para agregar la variable a estos archivos, escriba lo siguiente:

  1. echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

Para leer la variable en su sesión actual, recurra al archivo /etc/profile.d/mail.sh:

  1. source /etc/profile.d/mail.sh

Con eso completado, instale el cliente de correo s-nail con APT:

  1. sudo apt install s-nail

Antes de ejecutar el cliente, hay algunos ajustes que deberá realizar. Abra el archivo /etc/s-nail.rc en su editor:

  1. sudo nano /etc/s-nail.rc

Al final del archivo, añada las siguientes opciones:

/etc/s-nail.rc
. . .
set emptystart
set folder=Maildir
set record=+sent

Estas líneas hacen lo siguiente:

  • set emptystart: permite al cliente abrir incluso con una bandeja de entrada vacía
  • set folder=Maildir: establece el directorio Maildir a la variable interna folder
  • set record=+sent crea un archivo de mbox sent para almacenar el correo enviado en el directorio que se establezca como la variable folder, en este caso Maildir

Guarde y cierre el archivo cuando haya terminado. Ahora está listo para iniciar la estructura Maildir de su sistema.

Una forma rápida de crear la estructura Maildir en su directorio de inicio es enviarse a usted mismo un correo con el comando s-nail. Debido a que el archivo sent solo estará disponible una vez que se cree Maildir, deberíamos deshabilitar la escritura para este correo electrónico inicial. Haga esto pasando la opción -Snorecord.

Envíe el correo electrónico dirigiendo una cadena al comando s-nail. Ajuste el comando para marcar su usuario Linux como el destinatario:

  1. echo 'init' | s-nail -s 'init' -Snorecord sammy

Nota: Es posible que reciba la siguiente respuesta:

Output
Can't canonicalize "/home/sammy/Maildir"

Esto es normal y puede aparecer únicamente cuando se envíe este primer mensaje.

Puede verificar para asegurar que el directorio se creó buscando su directorio ~/Maildir:

  1. ls -R ~/Maildir

Verá que la estructura del directorio se ha creado y que hay un nuevo archivo de mensaje en el directorio ~/Maildir/new:

Output
/home/sammy/Maildir/: cur new tmp /home/sammy/Maildir/cur: /home/sammy/Maildir/new: 1463177269.Vfd01I40e4dM691221.mail.example.com /home/sammy/Maildir/tmp:

Ahora que se ha creado la estructura del directorio, está listo para probar el cliente s-nail visualizando el mensaje init que envió y enviando un mensaje a una dirección de correo externa.

Paso 5: Probar el cliente

Para abrir el cliente, ejecute el comando s-nail:

  1. s-nail

En su consola, verá una bandeja de entrada rudimentaria con el mensaje init esperando:

Output
s-nail version v14.9.15. Type `?' for help "/home/sammy/Maildir": 1 message 1 new >N 1 sammy@example.com 2020-05-19 15:40 14/392 init

Pulse ENTER para mostrar el mensaje:

Output
[-- Message 1 -- 14 lines, 369 bytes --]: From sammy@example.com Tue May 19 15:40:48 2020 Date: Tue, 19 May 2020 15:40:48 +0000 To: sammy@example.com Subject: init Message-Id: <20160513220749.A278F228D9@mail.example.com> From: sammy@example.com init

Puede volver a su lista de mensajes escribiendo h y pulsando ENTER:

  1. h
Output
>R 1 sammy@example.com 2020-05-19 15:40 14/392 init

Observe que el mensaje tiene un estado de R, lo que indica que ha sido leído.

Ya que este mensaje no es muy útil, podemos borrarlo escribiendo d y pulsando ENTER:

  1. d

Para volver al terminal, escriba q y luego pulse ENTER:

  1. q

Como prueba final, compruebe si s-nail puede enviar correctamente mensajes de correo. Para hacer esto, puede canalizar los contenidos de un archivo de texto al proceso s-nail, como hizo con el mensaje init que envió en el paso anterior.

Comience escribiendo un mensaje de prueba en un editor de texto:

  1. nano ~/test_message

Dentro, introduzca el texto que desee enviar:

~/test_message
Hello,

This is a test.  Please confirm receipt!

Guarde y cierre el archivo después de escribir su mensaje.

A continuación, utilice el comando cat para canalizar el mensaje al proceso s-nail. Puede hacerlo con el siguiente ejemplo, que utiliza estas opciones:

  • -s: esto define el asunto del mensaje de correo electrónico
  • -r: cambio opcional en el campo “De” del correo electrónico. Por defecto, el usuario Linux con el que inició sesión se utilizará para completar este campo. La opción -r le permite anular esto con una dirección válida, como una de las definidas en el archivo /etc/postfix/virtual. Para ilustrar esto, el siguiente comando utiliza contact@example.com

Además, asegúrese de cambiar user@email.com por una dirección de correo válida a la que tenga acceso:

  1. cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com

A continuación, navegue al buzón de entrada de la dirección de correo a la que envió el mensaje. Verá su mensaje esperando ahí casi de inmediato.

Nota: Si el mensaje no está en su bandeja de entrada, es posible que haya sido enviado a su carpeta de spam.

Puede ver sus mensajes enviados en su cliente s-nail. Inicie el cliente interactivo de nuevo:

  1. s-nail

Desde el cliente de correo, vea sus mensajes enviados escribiendo:

  1. file +sent

Verá un resultado como este:

Output
+[/home/sammy/Maildir/]sent: 1 message 1 new ▸N 1 contact@example.com 2020-05-19 15:47 12/297 Test email subject line

Puede administrar el correo enviado usando los mismos comandos que emplee para el correo entrante.

Conclusión

Con esto, debería tener Postfix configurado en su servidor de Ubuntu 20.04. Administrar servidores de correo puede ser una tarea difícil para los administradores de sistemas novatos, pero con esta configuración, debería tener la suficiente funcionalidad MTA para comenzar.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
6 Comments


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!

I couldn’t create Maildir structure, I used maildirmake from qmail but I’m not sure if create it that way is the same or something is missing, because I don’t have my mail server working, no mail receiving… Any suggestions? Regards,

Because I can’t send email to an external email. Having port 25 enabled on the firewall.

definitivo ya hice todo y sigue sin funcionar

Hola, necesito por favor ayuda sobre como leer los mails entrantes, extraer el payload y los archivos attach y enviarlos a un py script, solo necesita la union, ya he visto varias opciones pero no he logrado ninguna, no necesito filtrado, todos los mensajes q llegen deben ir al py script…

Hola, Si no se ha creado el buzon MailDir, probar a dejar un espacio al final antes de “/”

home_mailbox = Maildir /

Uhhh… I coudn’t create a Maildir structure either. Can you help me out?

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.