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.
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
Me gustaMe gusta
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…..
Me gustaMe gusta
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
Me gustaMe gusta
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
Me gustaMe gusta
Saludos.
Muy buen post. Me gustaría saber cómo hacer esto mismo, pero con 5 cuentas diferentes de GMail.
Gracias de antemano.
Me gustaMe gusta
Muy bueno… mando este enlace a
http://groups.google.es/group/zimbragrupo
Me gustaMe gusta
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.
Me gustaMe gusta
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
Me gustaMe gusta
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.
Me gustaMe gusta
Ok, gracias, pero para esto como debería tener configurado mi postfix para que me lleguen correos de fuera?, Obvieamente no me llega el código d everificación de gmail.
Me gustaMe gusta
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
Me gustaMe gusta
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.
Me gustaMe gusta
soy nuevo con linux centos, realizo esto ?
Me gustaMe gusta
Muy bueno el post.
Como puedo con figurar postfix para enviar a travéz de varias cuentas de gmail?
muchas gracias
Me gustaMe gusta
mas que nada para no tener el limite molesto de 500 emails por dia…
Me gustaMe gusta
Que configuracion termina usando para el envio de correo
* dominio.org:25
* dominio.org:587
*stmp.gmail.com:587
me perdi en las configuraciones
Me gustaMe gusta
Hola a todos he seguido este manual pero encuentro parado en el punto de añadir la autoridad certificadora
ya que la ruta que aparece en el manual ( cat /etc/ssl/certs/ ) no la tengo en mi sistema.
Un saludo
Me gustaMe gusta
Hola J.B
Comprueba si tienes instalado el paquete ca-certificates, que incluye los certificados de las autoridades de certificación (CA)
Me gustaMe gusta
Me parece que el problema es que la distro es CentOS 5.5, porque al intentar instalar ese paquete me dice que no existe.
yum install ca-certificates
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
* addons: http://ftp.gui.uva.es
* base: http://ftp.udl.es
* extras: http://ftp.udl.es
* rpmforge: fr2.rpmfind.net
* updates: centos.crazyfrogs.org
Setting up Install Process
No package ca-certificates available.
Nothing to do
Me gustaMe gusta
Puedes mirar el comentario de J.J. García que explica como hacerlo en CentOS, ¡suerte!
Me gustaMe gusta
Si, lo he seguido y generado el certificado sin problema he reiniciado el servicio de postfix, pero no llegan los correos, asi que algo tengo que estar haciendo mal.
Me gustaMe gusta
Si ejecuto :
echo .hola. | mail -s .prueba. micuenta@gmail.com
El correo llega a micuenta pero no me llega a mi, entonces ya no sé si está fallando, algo de postfix , nagios o el reenvio de gmail.
Me gustaMe gusta
Si envio un mail desde hotmail por ejemplo a micuenta@gmail.com , me llega el reenvio, pero si ejecuto desde el ser servidor » echo .hola. | mail -s .prueba. micuenta@gmail.com » llega a micuenta@gmail.com pero no realiza el reenvio.
Me gustaMe gusta
Revisa los logs de postfix (su cat /var/log/mail.log desde linux).
Ahi te dice si se entregó o no, si gmail lo está rechazando y por que motivo, etc.
También si Centos , el router y todo lo que tengas que realmente tengan los puertos abiertos.
Hay una web que te escanea los puertos. pero te recomiendo que vayas a un cyber y pruebes si el server que tiene postfix levanta.
Si no podes conectar, probá todo por separado desde telnet.
chau
Me gustaMe gusta
Hola si ejecuto un echo .hola. | mail -s .prueba. micuenta@gmail.com en el maillog me parece lo siguiente:
Oct 14 13:05:12 nagios sendmail[6043]: o9EB5B5H006043: from=root, size=49, class=0, nrcpts=1, msgid=, relay=root@localhost
Oct 14 13:05:12 nagios postfix/smtpd[6044]: connect from nagios.miempresa.es[127.0.0.1]
Oct 14 13:05:12 nagios postfix/smtpd[6044]: 31F4316DDD4: client=nagios.miempresa.es[127.0.0.1]
Oct 14 13:05:12 nagios postfix/cleanup[6047]: 31F4316DDD4: message-id=
Oct 14 13:05:12 nagios sendmail[6043]: o9EB5B5H006043: to=micuentadegmail@gmail.com, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30049, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 31F4316DDD4)
Oct 14 13:05:12 nagios postfix/qmgr[11795]: 31F4316DDD4: from=, size=533, nrcpt=1 (queue active)
Oct 14 13:05:12 nagios postfix/smtpd[6044]: disconnect from nagios.miempresa.es[127.0.0.1]
Oct 14 13:05:15 nagios postfix/smtp[6048]: 31F4316DDD4: to=, relay=smtp.gmail.com[209.85.229.109]:587, delay=3.5, delays=0.06/0.21/1.6/1.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1287054272 h29sm9300772wbc.15)
Oct 14 13:05:15 nagios postfix/qmgr[11795]: 31F4316DDD4: removed
Pero mi servidor no tiene la ip 127.0.0.1
Me gustaMe gusta
127.0.0.1 es lo mismo que localhost, o sea tu maquina.
fijate que si haces ping localhost te sale:
silver@server:~$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
En tu log me llama la atencion 2 cosas, que dice 31F4316DDD4: to=, o sea que el destinatario está vacio.
Lo mismo para el from= que tambien viene vacio, cuando ahi, debería decir tu direccion.
Fijate si haciendo esto te sirve de algo:
apt-get install mailutils
echo testing | mail -s Bla tucuenta@tuempresa.com (en vez de usar con el dominio de gmail).
Me gustaMe gusta
Si hago un ping al localhost me responde, no he podido instalar mailutils ya que estoy con CentOS, y despues de realizar echo testing, no me hado nungun error al ejecutarlo pero no me hallegado ningun mail.
Me gustaMe gusta
hola muy buen manual, no lo he llevado a cabo, sin embargo quería saber si es el motivo así como lo explica tu manual que no se envíen correos a dominios externos, sin embargo si puedo recibir de cualquier domino externo..
Me gustaMe gusta
Exacto Fernando, es como tú dices. La recepción de correo depende más de una configuración adecuada del servidor DNS y quizás del cortafuegos. El problema es el envío y aquí se explica una forma de hacerlo desde una dirección IP dinámica.
Me gustaMe gusta
HELP ME…!!!
Cuando digito la linea:
cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem
cat: /etc/ssl/certs/Equifax_Secure_CA.pem: No such file or directory
Me sale ese error No such file or directory, he mandado a hacer un ls /etc/ssl/certs/*.pem y me muestra el siguiente resultado:
ls: cannot access *.pem: No such file or directory
Me gustaMe gusta
Siguiendo el tutorial tuve el error:
530 5.7.0 Must issue a STARTTLS command first
El correcto funcionamiento lo obtuve también agregando un archivo /etc/postfix/tls_policy con el exacto inicio del realyhost y este contenido:
[smtp.gmail.com]:587 encrypt
En resúmen siguiendo esta explicación: http://askubuntu.com/questions/228938/how-can-i-configure-postfix-to-send-all-email-through-my-gmail-account
Gracias por el esfuerzo de compartir esto y mantener actualizado tu artículo que es una muy buena y clara referencia.
Me gustaMe gusta
Gracias Rodolfo,
Lo miraré con detalle y actualizaré la entrada.
Me gustaLe gusta a 1 persona
Tengo el mismo problema, lo llegaste a resolver?
Me gustaMe gusta
Segui tus onsejos paso a paso pero al ejecutar cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem en root ubuntu me vota PERMISSION DENIED como soluciono ello
Me gustaMe gusta