Desde lo alto del Cerro

Blog de Alberto Molina Coballes

Configurar postfix a través de un relay host autenticado (Gmail)

con 13 comentarios

En principio sería posible instalar un servidor de correo en cualquier equipo conectado a Internet con una dirección IP pública, pero debido al problema del spam, mucho de los servidores de correo de Internet bloquean el correo no autenticado que venga de direcciones IP dinámicas, que son las habituales en conexiones domésticas.

Una solución es instalar un servidor de correo que no envíe directamente el correo al servidor destino, sino que utilice el equipo smtp.gmail.com para que retrasmita (relay) sus mensajes.

Características del montaje

  • Sistema: Debian GNU/Linux (lenny)
  • postfix 2.5.5
  • DNS correctamente configurado en dyndns.org, supongamos que fuese mimaquina.dyndns.org
  • ddclient instalado y configurado para actualizar el registro DNS en dyndns
  • Cuenta abierta en gmail, supongamos que fuese micuenta@gmail.com

Si instalamos postfix en un equipo con dirección IP dinámica y envíamos un mensaje de correo a determinados dominios (por ejemplo hotmail), nos rebotarán los mensajes y nos aparecerán líneas en el fichero /var/log/mail.log como éstas:

postfix/pickup[6804]: 09B0634680: uid=1000 from=<usuario>
postfix/cleanup[6810]: 09B0634680:message-id=<20081231154700.09B0634680@mimaquina>
postfix/qmgr[6802]: 09B0634680: from=<usuario@mimaquina.dyndns.org>, size=307, nrcpt=1 (queue active)
postfix/smtp[6812]: 09B0634680: to=<una@hotmail.com>,relay=mx2.hotmail.com[65.54.244.40]:25, delay=1.3, delays=0.03/0.04/0.92/0.3, dsn=5.0.0, status=bounced (host mx2.hotmail.com[65.54.244.40] said: 550 DY-001 Mail rejected by Windows Live Hotmail for policy reasons. We generally do not accept email from dynamic IP's as they are not typically used to deliver unauthenticated SMTP e-mail to an Internet mail server. http://www.spamhaus.org maintains lists of dynamic and residential IP addresses. If you are not an email/network admin please contact your E-mail/Internet Service Provider for help. Email/network admins, please visit http://postmaster.live.com for email delivery information and support (in reply to MAIL FROM command))
postfix/smtp[6812]: 09B0634680: lost connection with mx2.hotmail.com[65.54.244.40] while sending RCPT TO

Para evitar esto podemos utilizar otro MTA para que retransmita el correo de nuestro servidor, para lo que debemos tener una cuenta de correo en dicho MTA. Explicaremos a continuación los pasos que hay que dar para hacer eso con el servidor de correo de GMail (smtp.gmail.com).

Características de la conexión

Para enviar correo utilizando el servidor SMTP de Gmail la conexión tiene que estar cifrada con TLS, para lo que debemos añadir la Autoridad Certificadora adecuada (en este caso Thawte) y autenticada, para lo que utilizaremos un nombre de usuario (dirección de correo) y contraseña del servicio.

Configuración de main.cf

Tenemos que editar el fichero y añadir las siguientes líneas:

relayhost = [smtp.gmail.com]:587

Donde indicamos el nombre del equipo que retransmitirá nuestro mensajes (los corchetes ([ ]) son para que no haga la resolución MX) y el puerto de la conexión es el que se utiliza para la conexión entre un cliente y un servidor SMTP (587/TCP message submission).

smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem

Para que utilice TLS al enviar correo y confíe en las autoridades certificadoras que se añadan al fichero cacert.pem

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/passwd
smtp_sasl_security_options = noanonymous

donde le decimos a postfix que debe autenticarse mediante SASL y especificamos la ubicación del fichero con la información del nombre de usuario y contraseña.

Datos de autenticación

Creamos el fichero /etc/postfix/sasl/passwd con el siguiente contenido:

[smtp.gmail.com]:587    unacuenta@gmail.com:unacontraseña

Y lo protegemos adecuadamente con:

chmod 600 /etc/postfix/sasl/passwd

El fichero de configuración hay que transformarlo a un fichero indexado de tipo hash mediante la instrucción:

postmap /etc/postfix/sasl/passwd

que creará el fichero /etc/postfix/sasl/passwd.db

Utilización del certificado adecuado

Para añadir la autoridad certificadora Thawte al fichero de certificados que utilizará postfix, hacemos:

cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/cacert.pem

si no existiesen los ficheros de certificados SSL, debemos instalar el paquete ca-certificates

Actualización (21/08/2009):Ayer al enviar mensajes aparecía la siguiente línea en el registro de correo:

certificate verification failed for smtp.gmail.com[74.125.79.111]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Por lo que parece que el servidor smtp.gmail.com ha cambiado de entidad certificadora :-?, utilizando ahora Equifax en lugar de Thawte, para solucionar esto añadimos Equifax al fichero de certificados que está utilizando postfix:

cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem

y reiniciamos el demonio de postfix (bastará hacer reload).

Configuración de la cuenta de gmail

Actualización (20/08/2009): Sección añadida para que los corrreos lleguen a destino con el campo “From:” correcto, gracias a nihilanthlnxa y sylon por sus comentarios.

El campo “From:” de un mensaje de correo indica la dirección de correo electrónico del remitente, pero no es obligatorio que sea la dirección de correo del usuario en el servidor de correo que envía el mensaje, sino que es el cliente de correo el que se encarga de rellenar este campo y puede poner el valor que desee. Cuando se utilizan varias cuentas de correo esto permite enviar mensajes con distintos remitentes desde el mismo servidor de correo, pero tiene la contrapartida de que se puede utilizar (y así lo hacen los mensajes de spam) para poner una dirección de correo ilegítima. Gmail sólo permite poner en el campo “From:” direcciones de correo verificadas o pone por defecto la que se corresponde con la cuenta de gmail.

Añadir un remitente nuevo en nuestra cuenta de gmail

Abrimos en el navegador la página de Gmail, vamos a Configuración > Cuentas e importación > Enviar mensaje como y añadimos como nuevo remitente la dirección de correo de nuestro servidor de correo (usuario@mimaquina.dyndns.org). Para verificar que somos usuarios legítimos de la misma gmail nos enviará un mensaje con un código de verificación, que nos llegará a nuestra cuenta local. Una vez verificada la cuenta, gmail permitirá que se envíen mensajes con ese remitente y no lo modificará.

Prueba de funcionamiento

Para comprobar que todo está funcionando correctamente, enviamos un mensaje a una cuenta cualquiera de correo y miramos de nuevo los registros:

postfix/pickup[6703]: 6AFF534680: uid=1000 from=<usuario>
postfix/cleanup[6786]: 6AFF534680: message-id=<20081231154524.6AFF534680@mimaquina>
postfix/qmgr[5935]: 6AFF534680: from=<usuario@mimaquina.dyndns.org>, size=310, nrcpt=1 (queue active)
postfix/smtp[6788]: 6AFF534680:to=<unacuenta@hotmail.com>,relay=smtp.gmail.com[66.249.93.111]:587, delay=2.8, delays=0.04/0.02/1.2/1.6,
dsn=2.0.0, status=sent (250 2.0.0 OK 1230738538 34sm19633915ugh.10)
postfix/qmgr[5935]: 6AFF534680: removed

Referencias

Los aspectos más importantes están cogidos de Relaying Postfix SMTP via smtp.gmail.com : Ubuntu Tutorials, simplemente he añadido algunos comentarios que me han parecido relevantes.

Escrito por albertomolina

4-01-09 a 8:16 pm

Escrito en General

Etiquetado con ,

13 comentarios

Suscríbete a los comentarios mediante RSS.

  1. Hola, muy buen post, estoy tratando de configurar lo mismo, pero en Zimbra 5 en Ubuntu Server 64, aca cambia alguna cosas, por ser zimbra, tienes informacion al respecto, has usado alguna vez esta suite opensource de correo?….
    Saludos y Gracias

    Dolser

    18-04-09 a 4:53 am

  2. Estimado, segui al pie de la letra su tutorial, pero al mandar un correo a una cuenta de hotmail, me dice este error: Must issue a STARTTLS command first

    a que se deberá eso.
    Utilizando debian 5 lenny, postfix, ip dinamica
    Gracias…..

    Tairux

    19-04-09 a 12:28 am

  3. Tairux, a mi me pasaba lo mismo hasta que cai en la cuenta que para que tome la configuración hay que reiniciar el Postfix. Lo hice y pronto, estaba funcionando tranquilamente.

    Agradezco al autor del post estuve buscando algo asi durante horas hasta que di con esto.

    Saludos

    Cara

    21-04-09 a 6:45 pm

  4. Cara, yo reinicio la maquina, y tambien postfix, y nada, que puede ser, yo creo que debe ser que hay que instalar los certificados a debian, no solamente openssl, ademas creo que van otros paquetes, o configurar correctamente ssl.
    que crees tu?, Saluda
    Tairux

    Tairux

    21-04-09 a 7:02 pm

  5. Saludos.

    Muy buen post. Me gustaría saber cómo hacer esto mismo, pero con 5 cuentas diferentes de GMail.

    Gracias de antemano.

    nihilanthlnxa

    25-04-09 a 5:34 pm

  6. Muy bueno… mando este enlace a
    http://groups.google.es/group/zimbragrupo

    amperis

    12-05-09 a 7:03 pm

  7. Saludos.

    Una pregunta: Cuando lo mandaste (que se ve bien claro en el log), ¿revisaste el correo de destino y viste el campo “From”?

    Te pregunto porque yo hice eso y como quiera cambiaba la direccion de emisión.

    nihilanthlnxa

    17-08-09 a 6:41 pm

  8. Buenas, gracias por el manual.

    Una pregunta, sabes como hacer para enmascarar la dirección de gmail?

    Es decir que cuando envies un mail salga el usuario y no la dirección de gmail?

    Si envio los mails desde consola:

    echo “hola” | mail -s “prueba” mail@mail.com

    como remitente sale el usuario del sistema

    En cambio si uso un cliente de correo sale la dirección de gmail que uso para el smarthost

    Gracias

    sylon

    18-08-09 a 11:12 am

    • El problema que estáis teniendo #nihilanthlnxa y #sylon es que gmail está cambiando la línea From: de vuestros mensajes y poniendo como remitente el usuario de gmail. Esto no tiene nada que ver con la configuración de postfix, es simplemente una precaución que tiene gmail ya que sólo pone como remitentes direcciones verificadas. Tenéis que entrar en la configuración de vuestra cuenta de gmail y añadir una nueva cuenta en “Enviar mensaje como” (verificará que tenéis acceso a la misma mediante un mensaje de correo).

      Modificaré la entrada para explicar esto, gracias por el comentario.

      albertomolina

      18-08-09 a 11:39 am

  9. Saludos,

    Parece ser que que smtp.gmail.com volvió a regresa a su antigua CA, dandome el siguiente error:

    certificate verification failed for smtp.gmail.com[74.125.93.111]:587] untrusted issuer /C=ZA/S
    T=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@
    thawte.com

    Esto fue por que solo tenia la CA de Equifax Secure, así que tuve que agregar la de Thawte Consulting, al archivo /etc/postfix/CAcert.pem

    Zokeber

    29-08-09 a 11:49 am

  10. Gracias!!!

    Llevaba tiempo intentando cerrar este punto y no lo conseguia, yo uso RHEL/CentOS y en mi caso los certificados se generan con un script en /etc/pki/tls/certs, simplemente con invocar ‘make’ te permite crear el que necesitas con ‘tus’ datos.
    Siguiendo tu tutorial, gmail acepta ese certificado y empieza a hacer relay.

    Gracias

    Saludos,

    JJ.

    J.J. Garcia

    12-09-09 a 11:59 am

  11. Muy bueno el post.

    Como puedo con figurar postfix para enviar a travéz de varias cuentas de gmail?

    muchas gracias

    Daniel G Zylberberg

    29-11-09 a 2:48 pm

  12. mas que nada para no tener el limite molesto de 500 emails por dia…

    Daniel G Zylberberg

    29-11-09 a 2:50 pm


Escribe un comentario