Me parece que todas las otras respuestas a esta vieja pregunta son solo de enlace. Así que voy a describir en pocas palabras cómo implementar mi solución favorita para este trabajo.
El enlace que @ 84104 ha sugerido, aunque es muy útil, no se puede usar para implementar correctamente la tasa por remitente. smtpd_client
los límites no son para el control del tráfico, sino para ayudar con el software del cliente: "Medidas contra clientes que hacen demasiadas conexiones". Aunque uno puede encontrar recomendaciones como este uno que sin duda puede ayudar. Como @E. Yazici ha sugerido que se requiere un complemento para postfix . Personalmente, encuentro policyd según lo recomendado por @Janne Pikkarainen bastante engorroso, aunque se considera un estándar.
Mi complemento favorito es postfwd porque es ligero y fácil. También vale la pena señalar que esto funciona muy fácilmente con Plesk u otro similar, sin afectar el complicado conjunto de archivos de configuración de Plesk. El límite de velocidad de correo electrónico en Plesk solo se implementó en la versión 12, pero las características de la política aún son limitadas.
Primero descargue el último complemento del sitio anterior. Creo que no hay rpm para CentOS, en contraste con Ubuntu y Debian. Sin embargo, se recomienda utilizar la última versión. Más específicamente, la versión 1.32 (que está presente en, por ejemplo, repositorios Ubuntu 14.04LTS) tiene un error desagradable que impide que funcione correctamente. La versión 1.35 soluciona esto.
Asegúrese de que estos módulos PERL estén presentes. Si usa Debian o Ubuntu , puede instalar desde repos para que todas las dependencias se resuelvan automáticamente y luego se reemplacen /usr/sbin/postfwd
con la última versión.
Luego crea el conjunto de reglas. Cree un archivo como /etc/postfwd.cf
o /etc/postfix/postfwd.cf
y agregue:
id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)
El conjunto de reglas anterior tiene obviamente dos reglas que evalúan para todos los remitentes. La sintaxis de la rate
acción es:
rate (<item>/<max>/<time in sec>/<action>)
Otros ejemplos de tarifas se pueden encontrar aquí . Se puede encontrar una referencia a la sintaxis en la documentación . Discusión similar se puede encontrar aquí . Si se implementa SASL (p. Ej., Palomar), puede reemplazarlo sender
con seguridad sasl_username
. Puede probar la validez del conjunto de reglas con la -C
opción:
postfwd -f /etc/postfwd.cf -C
Después, opcionalmente puede crear un usuario y grupo dedicado postfwd
bajo el cual postfwd se ejecutará y lo iniciará:
postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd
En caso de tenerlo instalado desde apt (Debian, Ubuntu, etc.), también debe haber un archivo de configuración debajo /etc/default/postfwd
y puede iniciar el servicio correctamente, por ejemplo sudo service postfwd start
.
Luego eche un vistazo al registro para verificar que postfwd está escuchando. Postfwd utiliza el mismo registro como postfix (por ejemplo, /var/log/mail
o /usr/local/psa/var/log/maillog
etc) y una línea como postfwd 1.35 ready for input
debería ser en su lugar.
Luego, informe a postfix para usar postfwd. Edite el archivo conf de postfix (generalmente /etc/postfix/main.cf
) y en la línea:
smtpd_recipient_restrictions = permit_mynetworks,...
agregar check_policy_service inet:127.0.0.1:10040
. Tenga en cuenta que el orden en el que coloca esto smtpd_recipient_restrictions
tiene una gran importancia y podría terminar pasando mucho tiempo diagnosticando qué podría estar mal. Como se explica en esta pregunta , si un cheque devuelve OK o RECHAZAR, entonces postfix no continúa con el siguiente, por lo que probablemente debería colocar este valor alto.
Por último, para comprobar que esto funciona, puede especificar un límite muy pequeño como 1 o incluso agregar una regla como id=DEFAULT; action=dunno
. Cualquier golpe de regla se registra de todos modos. Tenga en cuenta también que el límite de velocidad por remitente no distingue entre múltiples correos electrónicos con un solo destinatario o un solo correo electrónico con múltiples destinatarios.
Luego envíe un correo electrónico desde una cuenta (en ese servidor) y mire el registro:
grep "RULES" /var/log/mail
Otros enlaces: inicio rápido postfwd .