POSTFIX: limitation de la vitesse à laquelle un utilisateur particulier peut envoyer des e-mails

13

Nous avons une configuration de serveur CentOS serveur qui héberge nos sites Web et notre serveur de messagerie (en utilisant POSTFIX). Nous gérons le système en utilisant respectivement Virtualmin et Webmin.

En général, pour chaque site que nous configurons, nous fournissons au client un compte de messagerie sur notre système. Un client en particulier a décidé que c'était une bonne idée d'envoyer des milliers d'e-mails en masse. Lorsque cela se produit, le serveur de messagerie ne répond plus et le courrier des autres clients diminue pendant le traitement de la file d'attente.

Existe-t-il un moyen de limiter le taux d'envoi d'e-mails pour un utilisateur particulier du système plutôt que pour tout le monde? Existe-t-il également un paramètre que nous devrions modifier pour que rien de ce qu'un utilisateur puisse faire ne puisse provoquer l'échec du serveur de messagerie pour les autres utilisateurs?

Merci

WarpKid
la source

Réponses:

23

Il me semble que toutes les autres réponses à cette ancienne question sont uniquement liées à des liens. Je vais donc décrire en quelques mots comment implémenter ma solution préférée pour ce métier.

Le lien que @ 84104 a suggéré, bien que très utile, ne peut pas être utilisé pour mettre en œuvre correctement le taux par émetteur. smtpd_clientles limites ne sont pas pour le contrôle du trafic mais plutôt pour aider avec le logiciel client: "Mesures contre les clients qui établissent trop de connexions". Bien que l'on puisse trouver des recommandations comme celle- ci , cela peut certainement aider. Comme @E. Yazici a suggéré, un addon pour postfix est requis. Personnellement, je trouve la politique recommandée par @Janne Pikkarainen plutôt lourde bien qu'elle soit considérée comme une norme.

Mon addon préféré est postfwd car il est léger et facile. Il convient également de noter que cela fonctionne très facilement avec Plesk ou autre similaire, sans affecter l'ensemble compliqué de fichiers de configuration de Plesk. La limite de débit des e-mails dans Plesk n'a été implémentée que dans la version 12, mais les fonctionnalités de la politique sont toujours limitées.

Téléchargez d'abord le dernier addon sur le site ci-dessus. Je pense qu'il n'y a pas de rpm pour CentOS, contrairement à Ubuntu et Debian. Néanmoins, il est conseillé d'utiliser la dernière version. Plus spécifiquement, la version 1.32 (qui est présente par exemple dans les dépôts Ubuntu 14.04LTS) a un bogue désagréable qui l'empêche de fonctionner correctement. La version 1.35 trie cela.

Assurez-vous que ces modules PERL sont présents. Si vous utilisez Debian ou Ubuntu, vous pouvez installer à partir des dépôts afin que toutes les dépendances soient automatiquement triées puis remplacées /usr/sbin/postfwdpar la dernière version.

Créez ensuite l'ensemble de règles. Créez un fichier tel que /etc/postfwd.cfou /etc/postfix/postfwd.cfet ajoutez:

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)

L'ensemble de règles ci-dessus a évidemment deux règles qui évaluent pour tous les expéditeurs. La syntaxe de l' rateaction est:

rate (<item>/<max>/<time in sec>/<action>)

D'autres exemples de taux peuvent être trouvés ici . Une référence à la syntaxe se trouve dans la documentation . Une discussion similaire peut être trouvée ici . Si SASL est mis en œuvre (par exemple colombier) , vous pouvez en toute sécurité remplacer senderavec sasl_username. Vous pouvez tester la validité de l'ensemble de règles avec l' -Coption:

postfwd -f /etc/postfwd.cf -C

Ensuite, vous pouvez éventuellement créer un utilisateur et un groupe dédiés postfwdsous lesquels postfwd s'exécutera et le lancera:

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

En cas de l'avoir installé à partir d'apt (Debian, Ubuntu, etc.), il devrait également y avoir un fichier de configuration sous /etc/default/postfwdet vous pouvez démarrer le service correctement, par exemple sudo service postfwd start.

Jetez un œil au journal pour vérifier que postfwd écoute. Postfwd utilise le même journal que postfix (par exemple /var/log/mailou /usr/local/psa/var/log/maillogetc) et une ligne qui postfwd 1.35 ready for inputdevrait être en place.

Ensuite, indiquez à postfix d'utiliser postfwd. Modifiez le fichier conf de postfix (généralement /etc/postfix/main.cf) et dans la ligne:

smtpd_recipient_restrictions = permit_mynetworks,...

ajouter check_policy_service inet:127.0.0.1:10040. Veuillez considérer que l'ordre dans lequel vous mettez cela smtpd_recipient_restrictionsa une grande importance et que vous pourriez finir par passer beaucoup de temps à diagnostiquer ce qui pourrait ne pas fonctionner. Comme expliqué dans cette question , si un chèque renvoie OK ou REJETER, le suffixe ne passe pas au suivant, vous devriez donc probablement placer ce niveau haut.

Enfin, pour vérifier que cela fonctionne, vous pouvez soit spécifier une très petite limite comme 1 ou même ajouter une règle en tant que id=DEFAULT; action=dunno. Tout hit de règle est enregistré de toute façon. Veuillez également noter que la limite de débit par expéditeur ne fait pas de distinction entre plusieurs e-mails avec un seul destinataire ou un seul e-mail avec plusieurs destinataires.

Envoyez ensuite un e-mail à partir d'un compte (sur ce serveur) et consultez le journal:

grep "RULES" /var/log/mail

Autres liens: démarrage rapide postfwd .

Wtower
la source
1
une explosion du passé cette question! merci d'avoir pris le temps de fournir une réponse aussi réfléchie. Je suis impressionné!
WarpKid
1
ma version de postfix barfs sur n'importe quelle smtpd_recipient_restrictionsentrée avec un espace dedans, j'ai donc dû définir postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040dans /etc/postfix/main.cf puis la référencer dans /etc/postfix/master.cf commesmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure
Pour redémarrer postfix dans Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower
En utilisant Ubuntu 16.04 au moins, j'ai trouvé que je devais changer le caractère générique dans les règles à utiliser .+(au moins 1) plutôt que .*(au moins 0) afin que les règles ne correspondent pas aux champs absents.
TommyPeanuts
4

Ce dont vous avez besoin est un complément de politique pour Postfix. Il existe une douzaine d'addons de politique pour Postfix, certains d'entre eux ont une fonction de limitation de débit. Vous pouvez trouver une liste des compléments de politique de Postfix ici .

Emre Yazici
la source