Configuración de un servidor de correo saliente. Postfix

Postfix es un Agente de transferencia de mensajes (MTA – Message Transfer Agent), y será usado por los usuarios para enviar mensajes, en otras palabras, conectaremos a nuestro MTA cuando queremos enviar un mensaje (aunque la cosa no termine ahí, para un usuario de a pie, sí); también se usará entre servidores para realizar las entregas de mensajes. Por ejemplo, nosotros, desde nuestra dirección de correo (soyelmejor@dominiochulo.com) queremos enviar un correo a nuestro amigo (elsegundomejor@gmail.com). Cuando nosotros pulsamos el botón enviar, nuestro cliente de correo envía toda la información a nuestro servidor SMTP (nuestro MTA) dominiochulo.com. Lo antes posible, dominiochulo.com intentará localizar el lugar al que tiene que enviar el correo para gmail.com (resuelve dominio, mira registro MX, etc), cuando se localiza el destino, se conecta a él y le envía el e-mail. Entonces pueden pasar varias cosas, que todo vaya bien y el mensaje se entregue correctamente, puede que gmail.com no responda (en ese caso, nuestro MTA lo intentará de nuevo, y si tras varios intentos no puede conectar, nos avisará)… Por ejemplo, si nuestro amigo ha dado de baja su cuenta de correo, gmail.com nos enviará un e-mail diciendo que el correo no pudo ser entregado… pero eso ya es cosa del MTA de gmail.com

Para esta guía estaré usando Ubuntu Server 12.04, por lo que utilizaré comandos como apt-get y sudo que tal vez no tengas en tu distribución, pero lo básico y los ficheros de configuración seguramente te sirvan.

Instalemos postfix

$ sudo apt-get install postfix

Puede que se desinstale algo, como otro MTA que tengas en el sistema (sólo puede haber uno, puede que incluso tengas un MTA que no haga nada).

Asegúrate de que el usuario postfix pertenece al grupo sasl (para poder realizar la identificación), si no es así, añádelo:

$ groups postfix
postfix : postfix
cloud@ubuntu:/run/cyrus$ sudo gpasswd -a postfix sasl
Adding user postfix to group sasl

Ahora vamos a editar algunos archivos de configuración, empezando por /etc/postfix/main.cf (No pondré todo el fichero de configuración, sólo las líneas más importantes con los cambios en negrita):

#SASL
smtp_sasl_auth_enable=no
smtpd_sasl_auth_enable=yes
smtpd_recipient_restrictions= permit_sasl_authenticated,
        permit_mynetworks,
        reject_unauth_destination
smtpd_sasl_security_options=noanonymous

myhostname=mydmain.com
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp
virtual_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

#Destinations
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/valias
virtual_mailbox_domains = /etc/postfix/vhosts

Explicando un poco todo esto:

  • smtp_sasl_auth_enable=no : El servidor no se autentificará en otro servidor.
  • smtpd_sasl_auth_enable=yes : Activaremos autentificación por sasl para un usuario que se conecte con nosotros.
  • smtpd_recipient_restrictions : Las restricciones que se aplican a las posibles conexiones.
  • smtpd_sasl_security_options=noanonymous : Rechazamos conexiones anónimas
  • myhostname : El nombre el host donde está el servidor (Si tenemos un host virtual, no hace falta ponerlo aquí).
  • mailbox_transport / virtual_transport : Cómo nos comunicamos con los buzones (cómo hablamos con cyrus)
  • virtual_mailbox_maps : Asocia en un mapa los buzones virtuales y las direcciones
  • virtual_alias_maps : Crea alias de correo
  • virtual_mailbox_domains : Dominios virtuales usados en los correos.

/etc/postfix/master.cf

smtp      inet  n       -       n       -       -       smtpd
lmtp      unix  -       -       n       -       -       lmtp

Con esto desactivamos los chroot para smtp y lmtp (es un poco más inseguro, pero queremos en principio hacer una configuración simple)

Ahora creamos nuestra lista de dominios virtuales (un archivo con un dominio por fila): /etc/postfix/vhosts :

mylittlecloud.com
mycooldomain.com
anotherdomain.es

Ahora, asociamos cada dirección de correo con un usuario de buzón, en este ejemplo los dos coinciden, usuario info@mylittlecloud.com y el buzón info@mylittlecloud.com; luego crearemos dos alias para esta dirección (serán dos direcciones de correo que dirigirán los mensajes al mismo buzón anterior)

/etc/postfix/vmailbox

info@mylittlecloud.com info@mylittlecloud.com

/etc/postfix/valias

root@mylittlecloud.com info@mylittlecloud.com
postmaster@mylittlecloud.com info@mylittlecloud.com

Estos ficheros tenemos que convertirlos en mapas de postfix, por tanto:

$ sudo postmap /etc/postfix/vmailbox

$ sudo postmap /etc/postfix/valias

Ahora creamos /etc/postfix/sasl/smtpd.conf para especificar cómo se autentificarán los usuarios (como siempre, igual que Cyrus, con saslauthd y con diversos mecanismos)

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5

Podemos comparar esta configuración con sasl_pwcheck_method y sasl_mech_list de Cyrus.

Reiniciamos el servidor

$ sudo service postfix restart

Podemos configurar esto en nuestro servidor de correo, podremos enviar e-mails a cualquier dirección de Internet (Si no los recibimos desde el otro lado, puede ser debido a filtros anti-spam). Ya puedes intentar enviar mensajes a cualquiera de los alias desde direcciones de correo internas (o montar varias máquinas virtuales con correo para probar), puedes incluso configurar los registros MX de tu dominio para empezar a enviar y recibir e-mails.

12 thoughts on “Configuración de un servidor de correo saliente. Postfix

  1. Estaba buscando por internet un método “fácil” para crear un servidor de correo en Ubuntu con postfix, y tu manual me parece interesante, pero creo que deberías ampliarlo añadiendo otro manual con cyrus ya que por lo que me das a entender uno depende del otro.

  2. Hola, muy bueno tu manual, sin embargo si quiero mandar un correo a los servidores de gmail, hotmal o yahoo me rebota diciendo que es spam.

    Alguna cosita para que no sea asi???

    saludos.

    • Hay que ver los motivos por los que rebota. Muchas veces cuando te llega un mail rebotado te da alguna pista. Lo más común es que el servidor no tenga un FQDN válido, o los métodos que utilices para dar validez a tu servidor no estén completos. Por ejemplo, como mínimo deberías añadir un registro DNS SPF. Para métodos como DKIM o así, creo que iré completando esta guía a medida que tenga tiempo.

  3. He configurado una cuenta personal en thunderbird con smtp localhost por el puerto 25 pero no sale ni uno solo de los mensajes.

    Tengo instalado postfix

    ¿Que he de revisar?

    • Mira si en tu proveedor esta restringido el pueto 25 para el envío de correo. También revisa si están saliendo pero llegan como SPAM.

  4. Como puedo hacer para que al indicarme que no pudo entregar un correo me muestre la direción del destinatario que no pudo entregar, uso BOUNCE,CF para modificar el texto, pero no soy capaz de incluir el mensaje o el nombre del destinatario.
    Gracias

    • A mi me lo muestra con la configuración por defecto. Tendré que investigar un poco qué configuración es la que puede estar fallando. Si no, siempre podemos mirar los logs

  5. Hola.
    Tengo un postfix que uso para el envio de alarmas de los servidores de mi red mediante un smarthost. Me gustaria hacer una configuaracion de manera que todos los correos que salgan de el tengan el remitente: alarmas@midominio.com, sin importar de que servidor provenga.
    Alguien puede ayudarme

    • ¿Te refieres a que todos tengan el mismo From? Tendré que estudiarlo, a lo mejor también vendría bien poder definir un Reply-to:

  6. Tengo un problema, cuando envio el correo, el mismo llega a la dirección sin el .com
    Ejemplo
    envio un correo con los siguientes comandos
    mail *******@gmail.com
    hola
    mundo
    Cuando reviso mi correo gmail el remitente es root@boletabox pero omite el ,com
    Le agradecería ayuda en el tema.
    Gracias de antemano

    • Hola Rafael,

      ¿El hostname de tu servidor lleva el .com? Si no lo lleva, miramos la configuración del postfix a ver.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *