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.
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.
Gracias por tu comentario. Perdona mi tardanza, estos días estoy hasta arriba de trabajo y voy dejando las cosas para luego… el manual de Cyrus está en http://gaspar.totaki.com/es/configuracion-de-un-servidor-de-correo-entrante-cyrus/ viene junto con este.
Saludos
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.
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.
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
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:
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.