Controlar velocidad de envío en Postfix

David Gatica -

Introducción

Algunos servidores están configurados para rechazar correos cuando la taza de envío supera el límite establecido. Por ejemplo, si enviamos 100 correos por minuto a GMail, nuestros correos serán rechazados con un mensaje similar a:

Jan 22 03:49:16 zimbra-proxy postfix/smtp[29092]: 7F42E2A1D5D: to=<xxx@yyyy.com>, relay=smtp.yyyy.com[300.72.236.190]:25, delay=42527, delays=42527/0.02/0.03/0.02, dsn=4.0.0, status=deferred (host smtp.yyyy.xom[300.72.236.190] said: 450 too many connections from your IP (rate controlled) (in reply to RCPT TO command))

 

Como se puede ver en el log, nuestros correos están siendo rechazados porque hemos realizado más conexiones que las que están permitidas en un tiempo determinado. Los correos rechazados quedarán encolados en nuestros servidores y se intentará su reenvio según nuestra configuración. 

En algunos casos podemos optar por esperar a que el envío se realice después, pero si necesitamos que estos se realicen lo más pronto posible y sabemos que el dominio de destino tiene una politica de restricción podemos configurar Postfix para que envíe los correos a una taza menor.

A continuación veremos como se realiza esta configuración en Postfix y como se aplica en Zimbra CS.

Configuración

Creación de nuevos servicios en Postfix

Podemos crear varias reglas para restringir la velocidad de envio y aplicarlas según corresponda a diferentes dominios. Para ello debemos agregar nuevos "servicios" a Postfix. En este ejemplo crearemos dos reglas/servicios: superslow y slow, las cuales enviarán correo cada 1 minuto y cada 10 segundos respectivamente.

Editamos el archivo master.cf (/opt/zimbra/postfix/conf/master.cf.in en Zimbra) y agregamos las siguientes líneas:

superslow       unix      -     -     n    -    -     smtp
-o smtp_fallback_relay=
slow       unix      -     -     n    -    -     smtp
          -o smtp_fallback_relay=

 

Acabamos de crear las dos reglas que necesitamos para controlar la velocidad de envío.

Configuración de restricciones

Ahora vamos a proceder a configurar tres tipos de restricciones para cada una de los servicios que creamos:

  • destination_rate_delay: Cada cuanto tiempo (segundos) se despachan los correos. Por ejemplo: despachar correos cada 10 segundos.
  • initial_destination_concurrency: Cuantos correos se envían al mismo tiempo. Se comienza con esta cantidad y se aumenta, si el destino lo permite, hasta el límite establecido en destination_concurrency_limit.
  • destination_concurrency_limit: Máximo de envíos simultáneos que podemos realizar.
La configuración se realiza en el archivo main.cf (/opt/zimbra/postfix/conf/main.cf en Zimbra):
 
superslow_destination_rate_delay = 60s
superslow_initial_destination_concurrency=1
superslow_destination_concurrency_limit=5
slow_destination_rate_delay = 10s
slow_initial_destination_concurrency=10
slow_destination_concurrency_limit=20

 

Es importante destacar que a las restricciones se les debe agregar como prefijo el nombre del servicio que hemos creado.

Ahora sólo tienes que reiniciar postfix, o el zmmtactl en Zimbra, para que Postifx lea la nueva configuración.

Aplicar las restricciones

Ahora que tenemos configuradas nuestras políticas es tiempo de aplicarlas. Esto se hace configurando la tabla de transporte de Postfix: transport_maps

Para ello vamos a crear el archivo /etc/postfix/slow_domains (/opt/zimbra/conf/slow_domains en Zimbra) y agregaremos las siguientes líneas:

gmail.com         slow:
hotmail.com slow:
reallyslowdomain.com  superslow:
everyexchangeserver.com superslow: 

 

Una vez editado el archivo, y cada vez que lo modifiques, es necesario crear la base de datos ejecutando el siguiente comando:

$> postmap /etc/postfix/slow_domains

 

Y eso es todo. Ahora puedes limitar la velocidad de envio a ciertos dominios.

 

**Información para Zimbra**

En Zimbra la tabla de transporte esta conectada a LDAP, para que nuestra configuración tenga éxito debemos agregar a Zimbra una nueva tabla de transporte. Para ello debes ejecutar el siguiente comando, antes de reiniciar el servicio mta:

zmprov ms `zmhostname` zimbraMtaTransportMaps "proxy:ldap:/opt/zimbra/conf/ldap-transport.cf  texthash:/opt/zimbra/conf/slow_domains"
¿Tiene más preguntas? Enviar una solicitud

0 Comentarios

Inicie sesión para dejar un comentario.
Tecnología de Zendesk