Cuando nuestra organización tiene un servidor de correo de cualquier tipo, Exchange, Kerio, Postfix o cualquier otra solución más o menos compleja y costosa, es muy importante tener un respaldo para que cualquier problema previsto o no de nuestro servidor, de la linea de comunicaciones o de infraestructura, con el que se pierde la conexión desde internet a nuestro servidor, nos garantice que no perdemos los correos que nos envíen durante el corte de servicio. Esto es lo que se denomina MX Backup, servidor de respaldo o Relay de correo.
El funcionamiento es sencillo: Durante el corte de servicio de nuestro servidor principal de correo el de respaldo será el encargado de recoger los correos que nos están intentando enviar y ponerlos en lo que llamamos una cola. Cuando restablecemos el servicio deberá entregarnos los correos para que nuestros usuarios no sean infelices y reciban sus comunicaciones. Para esta función es sencillo configurar un servidor con POSTFIX, necesita muy pocos recursos y tienes total control sobre lo que ocurre con tus correos.
Para tener funcionando este servidor de respaldo necesitamos tres cosas, una maquina donde alojar este servicio, modificar la configuración DNS del dominio y algún retoque en la configuración de nuestro servidor principal de correo. Voy a exponeros el dominio trebede.com como ejemplo.
Como servidor para alojar este servicio yo utilizo un Linux con Debian en el que solamente he instalado el paquete postix, en cualquier otra distribución Linux debería funcionar igualmente. Este servidor debe tener accesible desde internet el puerto SMTP, o sea, el TCP 25, para que pueda recibir los correos, así que no te olvides de configurar el Firewall que te da acceso a internet. Hay que modificar la configuración de Postfix de la siguiente forma:
Crear un fichero /etc/postfix/relay_recipients. En este fichero ponemos las direcciones para las que aceptamos correos, si la lista no cambia escribiremos la lista de correos, si cambia ponemos el dominio completo. Importante: Cada linea debe tener dos partes separadas por un espacio, la segunda da lo mismo, pero es necesaria. Mi fichero contiene una sola linea para admitir cualquier correo del dominio:
@trebede.com x
Despues de crearlo hay que ejecutar el comando «#postmap /etc/postfix/relay_recipients» para convertir el fichero de texto al formato que lee postfix
Modificamos tambien el fichero/etc/postfix/main.cf para añadir estas lineas
relay_domains = trebede.com
smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination
proxy_interfaces = 84.124.75.67
relay_recipient_maps = hash:/etc/postfix/relay_recipients
maximal_queue_lifetime = 15d
relay_domains sera la lista, separada por comas de los dominios para los que vamos a hacer respaldo, proxy_interfaces la direccion de nuestro servidor en internet, no la de la red local, relay_recipient_maps es un enlace al fichero que hemos creado antes que tiene la lista de los correos que vamos a permitir y maximal_queue_lifetime hace que los correos puedan estar en la cola hasta 15 dias, si no pones esta linea por defecto estan 5 que puede ser mas que suficiente.
Despues de modificar este fichero debes ejecutar el comando #postfix reload para que se cargue la nueva configuracion.
La configuración DNS es sencilla. Hasta ahora tendríamos una única entrada del tipo MX para el dominio en cuestión, y hay que crear una nueva con una prioridad menor apuntando a la dirección de internet de nuestro servidor de respaldo. Si no tiene nombre en internet creamos un nuevo registro A y hacemos que el nuevo MX le apunte. Es importante que la prioridad sea menor, pues la entrega de los correos se hace por prioridades y este servidor de respaldo entregará los correos a uno que tenga mayor prioridad en cuanto le sea posible. Cuidado, la prioridad MX10 es mayor que la del MX30.
En mi ejemplo la configuración DNS del dominio trebede.com queda asi:
A mail.trebede.com 80.59.96.83
A mail2.trebede.com 84.124.75.67
MX10 mail.trebede.com
MX30 mail2.trebede.com
Por último hay que hacer un pequeño cambio en la configuración de nuestro servidor principal para que no aplique restricciones de seguridad a nuestro servidor de backup, ya que por defecto suelen aplicar restricciones del tipo «mensajes máximo por hora» que si tenemos habilitadas harán que los correos no puedan llegar porque nuestro servidor principal pensará que el de backup es un spammer.
Ahora resta probar y controlar el servicio, para ello puedes parar el servicio SMTP de tu servidor principal y monitorizar el de respaldo, los siguientes comandos seran utiles:
# tail /var/log/mail.log -> Nos muestra las últimas lineas del fichero de log del servidor de correo, de esta forma podemos ver en vivo y en directo qué es lo que esta haciendo, recogiendo correos, intentando entregarlos, ….
# postqueue -p -> Muestra los correos que hay en la cola. Con esto puedes ver como va creciendo la cola cuando el principal esta parado y cuando lo arranques veras que baja el numero de correos retenidos.
# postqueue -f -> Fuerza vaciar la cola, para obligar al servidor a entregar al principal los mensajes cuando sabemos que el servicio está restablecido.
# postqueue -s trebede.com -> Para forzar la entrega de los correos al dominio trebede.com
# postqueue -d id -> Borra el correo con esa id.
# postsuper -d ALL -> Borra todos los correos de la cola.
[…] This post was mentioned on Twitter by Francisco J Martinez, sebas. sebas said: Respaldo de servidores de correos corporativos, enhorabuena por el blog @martinezalegre http://ow.ly/3TP9u […]
mmm y cual es el cambio que se hace para que no aplique restricciones?
Saludos,
Damian
Hola Damian, eso dependerá del servidor principal. Esas restricciones que comento no son del servidor de respaldo.
Saludos.
¿Si se tratara de un servidor Postfix cuales serian las directivas para el servidor principal?
No sé si con añadir la IP del servidor de backup en la directiva mynetworks ya seria suficiente….
mynetworks=80.59.96.83/28 127.0.0.0/8 84.124.75.67/32
Gracias por el tuto, esta bastante claro pero mi duda es la siguiente, con esta configuración sería suficiente para que en cuanto el mx secundario vea que el mx primario ya esta operativo envíe los correos?
Gracias a ti, Oscar por participar.
Si es suficiente, postfix hace reintentos automáticamente y cuando el principal esté operativo reenvía los mensajes.
Si quieres puedes forzarlo con los comandos que comento en la entrada.
Saludos
Gracias por el tutorial, no obstante me encuentro con un problema que no logro solucionar, por alguna razón algunos correos son rechazados en base al registro SPF en la página SPF: Why me solcitan el siguiente cambio en el SPF del cliente:
yo@miempresa.com received a message from reverse.adsl.static.ccgg.telefonica.net (mi ip local) that claimed an envelope sender address of client@client.com.
However, the domain client.com has declared using SPF that it does not send mail through reverse.adsl.static.ccgg.telefonica.net (mi IP). That is why the message was rejected.
He intentado configurar de todas las maneras posibles el registro SPF (no puedo pedir a todos los clientes que incluyan mi reverse de telefónica) y no lo he logrado, estoy seguro que me dejo algo en la configuración de los servidores pero mis conocimientos no dan para mas.
¿Sería posible un poco de luz al respecto? Gracias.
Hola Josep.
Creo que te falta configurar el registro SPF de tu dominio para que considere que el servidor desde el que se manda correo es «confiable». Puedes leer más en este enlace de David Bonilla en el que lo explica perfectamente.
http://www.bonillaware.com/newsletter-mailchimp-calificada-como-spam
Saludos.
Gracias, mirare el artículo.
Como se manejan los buzones? los tengo que crear en ambos servidores?
Hola Herber. Los buzones solamente se crean en el servidor principal.
Antes de nada… gracias por tu artículo.
si no he entendido mal… Mientras el servidor principal esté inactivo el secundario recibirá correos que luego mandará al principal. Pero, un usuario podrá enviar y recibir a través del secundario ?
Si es el caso que el usuario no podrá enviar… un cluster de servidores sería lo indicado ?
solo una correccion, en tu texto pones smtp_recipient_restrictions = permit_mynetworks reject_unauth_destination, pero la variable es smtpd_recipient_restrictions = bla bla bla (smtp»d»_ …….
Saludos
Tienes toda la razón, voy a cambiarlo.
Gracias por aportar
Hola Francisco.
Llegue a tu tutorial (por cierto es muy bueno), porque ando buscando como instalar un postfix/dovecot en una red local para que los usuarios accedan al correo alojado en el servidor local pero que este envie y reciba desde un servidor externo (se entiende?)
Tendras alguna info para orientarme en el tema?
Saludos.