Hace poco hemos visto en otro artículo que crear un servidor de correo puede ser algo mucho más sencillo de lo que aparenta, y que además nos puede brindar muchas opciones interesantes. Con un servidor de correo propio no estamos sujetos en ningún momento a las limitaciones que nos pueda imponer un proveedor externo, y además con él podríamos tener todo el espacio que necesitamos para la labor a la que lo destinemos. Por ejemplo, he visto muchas veces a gente con problemas en cuentas de correo con espacio limitado, debido a que quieren ver el correo a la vez tanto en el móvil como en el ordenador (mediante imap), y eso con una cuenta de correo normal y corriente no suele ser posible porque en cuanto el correo se destine a usos importantes y empiece a recibir un volumen de correo importante se acaba saturando.
Sin embargo hay una limitación importante en cuanto a la gestión de un servidor de correo en una red doméstica o en una pequeña empresa, y es que en estos ámbitos se suelen tener líneas de internet que aunque puedan llegar a tener mucha velocidad, tienen un importante problema a la hora de montar un servidor de correo y es que estamos conectados a través de una IP pública variable.
Tiene razón. Algo de eso habías comentando en el artículo sobre los servidores de correo, pero... refréscame la memoria, anda.
Por supuesto, Usuario Anónimo: Existen tres clases de líneas de internet, atendiendo a qué tipo de conectividad presentan desde fuera de la red local.
- Las mejores para montar un servidor de internet son las que tienen IP fija. Estas líneas nos dan una dirección IP que nunca varía. Si tengo una línea de este tipo y dejo abierto un puerto escuchando peticiones de cualquier tipo, desde internet podré conectarme a él a través de una determinada dirección IP. Y lo importante es que esta dirección IP no cambiará nunca, así que será la misma mañana, pasado y dentro de un mes. No vamos a tener problemas para instalar un servidor de correo en una línea de este tipo.
- También existen líneas que tienen IP variable. En este caso la ip que tiene asignada nuestra red también es accesible desde internet, pero cambiará cada vez que apaguemos y encendamos de nuevo el router (o cuando la operadora de internet lo dictamine), así que la IP que tengo hoy puede que no sea la misma que la que tenga mañana, lo cual puede ser un problema para acceder a mi servicio a través de internet.
- Por último, existe un engendro llamado «CG-NAT» que usan las operadoras para ahorrarse costes, y se trata de que un «pool» de clientes comparten la misma ip pública entre ellos. Eso les va a permitir navegar por internet con normalidad y hacer casi todo lo que un usuario doméstico hace en internet… pero nunca jamás les permitirá acceder desde internet a nada que monten en su red doméstica. Algunas operadoras te permiten pasar de CG-NAT a IP variable sólo solicitándolo por teléfono. En todo caso las líneas con CG-NAT son una vergüenza para cualquier distribuidor de internet que quiera hacerse pasar como «compañía tecnológica no-chapucera» y es algo que desde la creación de IPV6 debería haberse arrojado al pozo del olvido, pero aún así muchas operadoras siguen ofertándoselo a sus clientes.
Así que si quieres montar un servidor de correo en casa y tienes una línea CG-NAT, debes preguntar inmediatamente a tu proveedor de internet para que te cambie a una línea que ofrezca IP variable, porque sobre CG-NAT no se puede montar ningún tipo de servidor y mientras no soluciones este problema no hay más que hacer.
Si tienes una línea con IP fija, entonces estás en el otro extremo de la balanza: Puedes montar un servidor de correo tal y cómo hemos explicado en nuestro anterior artículo sin mayores complicaciones.
Peeeeero… si lo que tienes es una línea con IP variable estás en un limbo. Por un lado la línea será accesible desde internet ya que no tendrás problemas para abrir los puertos que necesites (Salvo que el proveedor de internet te «cape» alguno, cosa que pasa con algún distribuidor español como Vodafone). Puedes abrir cualquier puerto y estos te responderán. Sin embargo tendrás aún dos problemas que resolver: El primero es que tu dominio deberá apuntar a una ip que sabes que tarde o temprano va a cambiar (y no vas a estar pendiente de cambiar a dónde apunta de forma manual), pero este problema ya vimos en el tutorial sobre el montaje de un servidor de correo que es sencillo de resolver usando alguna herramienta que nos permita apuntar un dominio a una IP variable. El segundo problema es el más complicado de resolver, y es que para otros servidores de internet tu servidor, por el simple hecho de estar instalado en una IP variable, es un probable servidor de SPAM por lo que no aceptarán correos que puedas enviar desde él. Estás en su lista negra y lo estarás mientras sigas teniendo IP variable.
Bueno. Pues entonces sencillo: teneís que pedirle a vuestra operadora una IP fija. Con esto podemos terminar el tutorial. No olviéis suscribiros al canal, darle a like, apuntaros a...
Espera, espera. La verdad es que ese ácido comentario tiene mucha razón. Evidentemente si yo hablo con mi operadora y contrato una IP fija para mi línea el problema queda resuelto. Sin embargo eso tiene un coste para nada despreciable. Mira: esta captura que te voy a poner es de la página web del principal comercializador de internet en España, que no es otro que Movistar.
30 Euros al mes tal vez puedan parecer poco, pero si lo ponemos en perspectiva es un coste muy elevado. Mirad: Esta otra captura es una oferta que tiene en el momento de escribir este artículo el mismo comercializador para contratar una línea de internet con ellos.
Así que una ip fija cuesta al mes casi tanto como la línea de internet entera. Las IP’s fijas no son precisamente baratas, por lo que veo normal que la gente intente no contratarla salvo que sea extrictamente necesario. Más si se trata de un servidor doméstico que alguien quiera montar en casa (como el que tengo yo) o en una muy pequeña empresa. Así que hay que encontrar la forma de evitar este coste, y esa forma se llama hacer un «Relay» en el servidor de correo saliente.
¿Lo cualo? ¿Qué es ese palabro?
No te preocupes, que se trata de algo sencillo de entender. Configurar un relay en nuestro servidor de correo nos va a permitir usar otro servidor de correo conectado a internet para enviar correos en nuestro nombre a través de él. Es algo así como conectar dos servidores de correo. Mi servidor de correo que tiene ip variable le dice a otro servidor de correo en internet que tiene ip fija: «Oye… envíame este correo, porfa, que yo no puedo» y ese otro servidor lo envía conservando tu dirección de envío al destinatario escogido. El correo acaba llegando al destinatario de la misma forma que si lo enviara yo y el destinatario no se enterará de que ha pasado por ningún otro servidor salvo que se ponga a leer los encabezados del correo.
¿Encabezados del correo? Me estás metiendo demasiados conceptos nuevos en la cabeza. ¿Qué diablos es eso?
Los encabezados de un correo es una codificación que tiene cada correo electrónico recibido que nos da mucha información, tanto del origen del correo (el servidor de origen) como del servidor de destino y de todos los servidores intermedios por los que haya pasado. Voy a poneros un ejemplo enviando un correo desde una cuenta mía que tengo configurada en mi servidor de correo (bajo ip dinámica) hacia una dirección de mail hospedada en gmail. Este correo se va a enviar desde el relay que tengo configurado. Una vez que me ha llegado el correo a la bandeja de entrada de gmail, voy a pulsar sobre los tres puntitos y luego seleccionaré «Mostrar original».
Una vez que hemos pulsado en esa opción, nos saldrá una pantalla dividida en dos partes, muy similar a ésta.
Los encabezados son la parte de abajo.
Un momento ¿Esperas que me entere de algo con tanto código y tanta "cosa rara" que hay por ahí? Eso es un galimatías.
Espeeera. No te preocupes. En medio de toda esa maraña de información hay cosas que podemos llegar a entender, como estas líneas.
Si te fijas, ahí nos dice que el correo se ha enviado desde una dirección que acaba en «.es», pero gmail ha recibido el correo desde un servidor de mundo-r.com en lugar de recibirlo directamente desde mi servidor de correo. ¿Cómo es posible esto? Pues es posible porque he usado el servidor de correo de mundo-r (Que es el operador de internet que tengo contratado en mi casa) como relay de correo. Mi servidor ha usado una cuenta configurada en ese servidor de correo para enviar ese correo en mi nombre, conservando la dirección de correo original.
Ahora que tenemos claro lo que vamos a hacer, vamos explicar cómo se hace.
Requisitos previos para crear un relay de correo electrónico.
Esto es casi una obviedad, pero necesitamos tener dos cosas preparadas antes de empezar a configurar un relay de correo en nuestro servidor.
- Debemos tener el servidor de correo configurado correctamente, de la misma forma que si tuviéramos IP fija. Con esa configuración y sin haber hecho todavía ningún tipo de relay muchos servidores de correo denegarán nuestros mails, pero debemos partir de ahí (luego ya resolveremos este problema). Voy a suponer también que el servidor que tenéis instalado usa «postfix» para el envío de correos (Todos los que os mostré en el artículo sobre servidores de correo lo usan).
- Debemos tener una cuenta de correo en algún proveedor de correo que nos permita hacer relay.
¿Y cómo sé yo que mi proveedor de correo electrónico me permite hacer relay?
Buena pregunta, Usuario Anónimo, y la respuesta es… que normalmente no lo vas a saber y simplemente vas a tener que probar si funciona el servicio con tu proveedor de correo o no. Mi recomendación es intentar huír de servicios públicos de correo que estén masificados (gmail, outlook, hotmail, yahoo…). Sé que hay gente que ha logrado hacer relays desde cuentas de gmail, pero como personalmente no confío en Google ni un pelo, prefiero darle esa tarea a algún otro proveedor.
Yo os diría que probáseis lo siguiente: normalmente los proveedores de internet suelen dar algún tipo de servicio de correo junto con la línea. Yo intentaría configurarlo con el servicio de correo que os presta vuestro proveedor de internet y si no os funciona, entonces tendréis que mataros con otros servicios de correo, pero el que dan las operadoras suele funcionar para estos temas. En todo caso si vuestra operadora no os proporciona ninguna cuenta de correo, en cuanto a servicios alternativos una buena opción es Mailjet. Su servicio gratuíto os proporcionará una cuenta para enviar por medio de SMTP 200 correos al día, pero eso es precisamente lo que queremos (para un uso doméstico o de una oficina pequeña me parecería muy raro que necesitásemos un volumen mayor).
Una vez que tengáis la cuenta de correo que váis a usar como relay, tenéis que tener muy claros los siguentes parámetros de la cuenta:
- Dirección de la cuenta de correo.
- Contraseña de la cuenta.
- Servidor SMTP del proveedor de correo.
- Puerto y tipo de encriptación del servidor SMTP.
Vamos… que necesitaremos los mismos datos que usamos para configurar la cuenta en un cliente de correo electrónico.
Configuración del relay en nuestro servidor.
Vamos a ir a la carpeta de nuestro servidor dónde se almacenan las configuraciones de los programas instalados, así que debemos ir a la ruta /etc/postfix y ahí dentro editar el archivo main.cf . Lo haremos con el siguiente comando.
sudo nano /etc/postfix/main.cf
Ojo: Esta ruta que os pongo es para la gran mayoría de distribuciones de linux, pero hay que tener en cuenta que en algunos sistemas (Como FreeBSD) la ruta cambia. En FreeBSD por ejemplo hay que hacer la edición en la ruta /usr/local/etc/postfix/main.cf . Si véis que el archivo «main.cf» no se encuentra en la ruta que os digo, os tocará documentaros sobre el sistema operativo y el servidor de correo que estáis usando.
Al final de todo de ese archivo vamos a añadir las siguientes líneas.
#RELAY DE SMTP relayhost = [servidorsmtpdemiproveedor.com]:25 #relayhost = [servidorsmtpdemiproveedor.com]:587 #smtp_tls_security_level = encrypt #smtp_tls_loglevel = 1 #smtp_sasl_tls_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_password smtp_sasl_auth_enable = yes smtp_sasl_mechanism_filter = login smtp_sasl_security_options = noanonymous smtpd_tls_CAfile = /etc/postfix/postfix.ca.pem smtp_dns_support_level = dnssec smtp_host_lookup = dns smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 milter_default_action = accept smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Como estáis suponiendo, debéis reemplazar el contenido entre corchetes de la segunda línea con el servidor de correo saliente de vuestro proveedor de correo. Por ejemplo, en mi caso, que uso un relay del proveedor de internet «mundo-r», esa línea queda tal que así.
relayhost = [smtp.mundo-r.com]:25
Si os veis obligados a usar el servidor de Gmail como relay, entonces deberíais poner algo del tipo:
relayhost = [smtp.gmail.com]:25
Pero recordad que gmail es muy «puñetero» para determinadas configuraciones, y que deberíais bajar la seguridad a vuestra cuenta de google para que acepte el uso de aplicaciones no seguras si queremos usar Gmail como servidor de relay. Además, lo más probable es que para que Gmail os sirva de servidor de relay necesitéis configurarlo con encriptación (que es lo que viene a continuación). Vuelvo a deciros: siempre que sea posible, usad el correo que os proporciona vuestro proveedor de internet, que seguramente no os cause tantos problemas como los correos genéricos.
Si el servicio que usaremos de relay necesita encriptación (STARTTLS), entonces vamos a poner un corchete en la segunda línea y quitaremos los de las líneas 3 al 6, dejando esa parte de ésta forma.
#relayhost = [servidorsmtpdemiproveedor.com]:25 relayhost = [servidorsmtpdemiproveedor.com]:587 smtp_tls_security_level = encrypt smtp_tls_loglevel = 1 smtp_sasl_tls_security_options = noanonymous
Si habéis aplicado la configuración correctamente, os debería quedar el final del archivo similar a ésto.
Una vez comprobado que esté todo escrito correctamente, pulsamos «Control»+»o» para guardar cambios y con esto quedaría lista la parte de la configuración del servidor de correo saliente, pero si os fijáis aún no hemos puesto en ningún lado el usuario ni la contraseña de la cuenta de correo que usaremos de relay. Eso lo hemos definido en la línea que dice «smtp_sasl_password_maps = hash:/etc/postfix/sasl_password». Así que vamos a crear el archivo «sasl_password» en la ruta que hemos indicado con éste comando:
sudo nano /etc/postfix/sasl_password
Ahora debemos poner dentro de ese archivo una línea con este formato:
relay.server usuarioproveedor@dominioproveedor.com:passwordproveedor
Vamos, que debéis poner:
- Primero «relay.server»
- Luego poned un espacio y teclead el usuario de la cuenta de correo que vayáis a usar como relay. Normalmente son del tipo «usuario@dominio.com» pero no tiene por qué ser así, y puede que para logaros sólo necesitéis un nombre de usuario. Consultad la documentación de vuestra cuenta de correo para saber cómo poner el usuario.
- Por último poned dos puntos y luego la contraseña de esa cuenta de correo.
Al final os debería quedar todo tal que así (Con los datos de la cuenta que usaréis como relay).
Sólo nos falta pulsar «Control»+»o» para guardar cambios y nos quedaría el relay correctamente configurado. Ahora tendréis que ejecutar «postmap» para que que estas contraseñas queden activadas. Eso se hace con el siguiente comando.
postmap hash:/etc/postfix/sasl_password
Así quedará toda la configuración correctamente guardada. Para poner todo esto a funcionar, deberemos reiniciar el servidor de postfix con este comando.
service postfix restart
Y listo. Desde este mismo momento deberíais poder enviar correos desde vuestro servidor de correo con normalidad, aunque tengáis IP variable.
¡Qué bien! Entonces ¿Desde ahora puedo enviar todos los correos que quiera a todos los destinatarios que quiera? Estoy pensando en montarle entonces un servidor de correo para una empresa que conozco que andan enviando correos a saco y...
Espera Usuario Anónimo. No te emociones tan pronto. Vayamos por partes.
Sobre si te va a permitir a ti enviar todo el correo que necesites. La respuesta es un rotundo sí. Si montas un servidor de correo y es para un uso personal tuyo (y para un uso personal de unas cuantas personas más) no vas a tener ningún problema. A la hora de recibir, supongo que ya sabrás que vas a poder recibir todos los correos que necesites, y a la hora de enviar, si el uso es un uso doméstico (De unos cuantos correos al día) no vas a tener problemas.
El problema viene cuando empiezas a cogerle gusto al servidor de correo y empiezas a enviar correo de forma masiva. Aunque tengas un montón de usuarios configurados en tu servidor de correo, con este método van a salir todos los correos por una única cuenta de relay, por lo que es factible que el servidor de correo que usas como relay vea que pasa algo raro con esa cuenta y la deshabilite o no te permita enviar todos los mensajes.
Por ponerte un ejemplo, Gmail permite enviar a un usuario 500 mensajes durante 24 horas. Si en menos de 24 horas envío más de 500 mensajes a través de una cuenta de Gmail, entonces Google me corta el grifo y no me va a dejar enviar más mensajes durante ese día. Y lo mismo que pasa con Gmail puede pasarte con cualquier otro proveedor de correo (cada uno tendrá sus condiciones particulares). En cuanto a MailJet, su límite para cuentas gratuítas es de 200 correos al día.
Paro seamos serios. A nivel personal no me he llegado a acercar a esa cifra en la vida, pero a nivel de empresa, dónde yo estoy tengo algún usuario que al tener reenvíos configurados en su equipo puede llegar a enviar 200 o 300 correos en un sólo día, por lo que no es una cifra tan difícil de alcanzar.
Así que lo dicho. Puedes usar el servidor e incluso crear cuentas para tu familia y amigos con total tranquilidad, pero no te pases e intentes crear cuentas de correo para todo el barrio o para una empresa con un montón de trabajadores, y sobre todo intenta averiguar las condiciones que tiene el servidor que uses de relay para no tener sorpresas en el futuro.
Y oye… a lo mejor incluso tú o algún lector podéis encontrar algún servidor que podamos usar de relay y que tenga limites tan absurdamente altos que resuelvan este problema definitivamente. Así que animo a los lectores a compartir sus experiencias con estos temas en los comentarios. ¿Te ha dado problemas el relay? ¿Conoces algún proveedor de correo interesante que sirva como relay y que quieras compartir con nosotros? Estaré encantado de leer vuestros comentarios.
Me acabas de ganar jajaja, era lo que estaba buscando para un proyecto…
te acabas de poner nº1 en mi lista de favoritos jajaja
No funciona, ni en tu sistema según tu server no con el mío
No entiendo muy bien ese comentario. A ver… este método lo llevo usando desde el 2015, cuando salió la primera Raspbery Pi 2, por lo que lo tengo más que probado, tanto en iRedMail como en Virtualmin, aunque se puede usar en cualquier servidor de correo que use postfix (como por ejemplo mail-in-a-box o muchos otros). De hecho mi correo principal es una cuenta que usa este procedimiento y desde el principio cero problemas.
Si concretas qué es lo que te está pasando puede que te pueda echar una mano.
Recalco un poco lo que dije en el artículo: para que esto funcione correctamente es recomendable una cuenta de correo que no sea excesivamente extricta con la seguridad. Gmail tiene mil restricciones en este sentido y puede que resulte una mala elección para este procedimiento (aunque sé que hay gente que usa cuentas de gmail para estos menesteres, por lo que se pueden llegar a usar). Personalmente si vas a seguir este método recomiendo alguna cuenta que te dé tu propio ISP y no una cuenta de gmail o similares.
Lo dicho. Si concretas un poco qué es lo que te pasa con la configuración a lo mejor te puedo echar una mano.
Me encanta tu blog, he implementado más de un proyecto en mi red local con las explicaciones e ideas de tu blog. ¡Gracias por el buen trabajo!
Acabo de descubrir esta página y solo decir que enhorabuena, bien documentado y con mucho sentido del humor. Yo tengo mi mailserver con iredmail en docker y el relay con mailjet (200 correos diarios) y va fenomenal. Aun así me estoy planteando generar mi propio relay con algún free tier de aws, pero aún tengo que investigar como hacerlo.
Adiós a los 25€ que me cobran por la ip estatica xD
Excelente articulo, muy bien explicado, suena como la respuesta a mis plegarias, pero aun me quedan un par de dudas.
¿como el servidor relay sabe la ubicación de nuestro servidor de correo? ¿Toca creae algun registro MX, A, AAA, o un alias en nuestro DNS?
El servidor de relay no tiene por qué saber nada acerca de nuestro servidor de correo. De hecho, muchas veces un servidor que usemos como relay no va a poder configurarse por nosotros (por ejemplo, si usamos como relay el servidor de correo de nuestro operador de internet).
Lo que sí que debemos hacer para evitar que nuestros correos no sean catalogados como spam es usar dkim, dmark y spf en la configuración del dominio para que cuando alguien reciba el correo, el servidor que reciba el correo sepa que hemos autorizado al servidor que usamos como relay a enviar correos en nuestro nombre. No he añadido esta parte al artículo para no hacerlo más tedioso de lo que ya es, pero básicamente es añadir información en tu dominio para autorizar a tu relay el envío de correos. Puedes seguir esta guía: https://www.digitalresponse.es/blog/configuracion-protocolos-spf-dkim-dmarc-bimi/