Forum général.cherche-logiciel limiter l'émission de mail en sortie de queue (attention il y a un piège)

Posté par  (site web personnel) .
Étiquettes :
1
19
jan.
2012

Voilà, j'ai un serveur de mail (actuellement un sendmail), et je voudrais limiter l'envoi pour être certain de ne pas envoyer plus de N mail dans un temps T.

Alors avant de crier RTFM ou Google est ton ami, sachez que oui j'ai cherché, et tout ce que j'ai trouvé sont des solutions pour des problèmes qui ressemblent beaucoup en APPARENCE au mien.

J'ai parcouru la doc de sendmail, et je n'ai pas trouvé, j'ai cherché pour postfix et je n'ai pas trouvé, après je n'ai peut-être pas les bons mots-clés, mais surtout j'ai l'impression de demander quelque chose d'inhabituel.

En général, les gens veulent limiter à l' entrée de la queue. C'est très facile de dire à un sendmail ou autre d'arrêter de recevoir des mails au bout d'un certain nombre et de répondre qu'il faut réessayer plus tard. On trouve tout plein de documentation sur comment faire pour limiter un hôte, un utilisateur. J'ai trouvé comment faire avec plusieurs mailer, j'ai trouvé des tas de milter ou autres logiciels tielrs pour faire des filtrage super fin et des rêgles évoluées pour filtrer l'entrée en queue, mais ce n'est pas ce que je veux.
Moi je veux limiter à la sortie de la queue.

Tout accepter, répartir l'envoi dans le temps

Je veux que tout les mails entrent en queue, je ne veux pas que mon mailer réponde "renvoie plus tard" (à cause de certaines applis pas très fiable à ce sujet).

Aussi, je veux être certain que mon mailer ne traite pas plus de N mail dans un temps T : je veux l'utiliser comme relai vers un autre SMTP que je ne maîtrise pas et qui est suceptible de me blacklister pour la journée. Je veux donc être certain que je reste sagement en dessous de sa limite.

Illustration du problème

Une illustration simple à mon problème, imaginons qu'un incident génère un grand nombre de mail d'alertes, que j'ai le droit à seulement 1000 mails par heure, que la somme de mes mails de toute la journée soient à peine supérieur à ce nombre, mais que à une heure particulière, paf je me prends 1001 alerte : je suis bloqué.

Une autre illustration, imaginons des employés qui ont parfois besoin de faire un mailing, et qu'un jour, deux personnes ont fait leur mailing à la même heure, PAF tout le monde est bloqué pour la journée alors à qu'à 30min d'intervalle tout serait passé.

soluces ?

Je ne veux donc empêcher personne d'envoyer des mails, je veux juste empêcher mon relai de dépasser un quotat temporaire, c'est la somme de tout les mails que je veux temporiser. Donc déjà toutes les solutions à base de milter et autre filtres d'entrées ne me semblent pas vraiment opportunes...

Actuellement j'utilise sendmail (parce que culture d'entreprise, historicité, syndrôme de Stockholm, toussa), mais si vous avez une solution avec postifx ou exim, je prends aussi ! Et si je n'ai pas su voir l'évidence, et soyez indulgent et montrez moi la lumière. :D

  • # man gcc ?

    Posté par  . Évalué à -5.

  • # exim !

    Posté par  . Évalué à 2.

    Genre ça ; trouvé ici :

    The main objective of the code is to stop runaway internal accounts from sending out large amount of emails. This has happened 2 or 3 times in the last 6 months because of compromised MS Exchange accounts and mail loops. The 'remote' section is to limit the machine gun type spam and dictionary attacks. The modified code is below. Please note this code is experimental and is designed for testing the water only.

    # Local senders rcpt rate limiting 250 per 6 hour (1,000 per day)
    warn ratelimit = 250 / 6h / leaky / per_rcpt / $sender_address
    senders = ! lsearch;/usr/local/exim/tables/ratelimit_whitelist.txt
    hosts = +relay_from_hosts
    log_message = Local senders rcpt rate limit ( $sender_address ) exceeds $sender_rate per $sender_rate_period

    # Remote IP rate limiting 10 per min (60 per hour)
    warn ratelimit = 10 / 1m / strict / per_mail / $sender_host_address
    senders = ! lsearch;/usr/local/exim/tables/ratelimit_whitelist.txt
    hosts = !+relay_from_hosts
    log_message = Remote IP message rate limit ( $sender_address_domain ) exceeds $sender_rate per $sender_rate_period

    La doc d'Exim
    http://www.exim.org/exim-html-current/doc/html/spec_html/index.html

    Je pense que tu t'en sortiras sans problème : )

    • [^] # Re: exim !

      Posté par  (site web personnel) . Évalué à 2.

      The main objective of the code is to stop runaway accounts from sending out large amount of emails.

      J'ai un peu du mal avec l'anglais mais il semble que c'est un bon exemple de ce qui ressemble beaucoup à mon problème, mais n'est pas mon problème : je ne veux pas vouloir arrêter qqn d'envoyer ("stop from sending") mais de répartir le relai dans le temps.

      Cela dit, ces acl dans exim sont intéressantes, et peut-être que je trouverai mon bonheur dedans. En survolant j'ai vu une commande "delay", que je peux probablement déclencher quand le ratelimit est dépassé, si ce délai est interne à la queue (pas le smtp qui répond au client) j'ai donc ce que je cherche.

      merci déjà pour la piste, et je creuse. :)

      ce commentaire est sous licence cc by 4 et précédentes

    • [^] # Re: exim !

      Posté par  (site web personnel) . Évalué à 2.

      lu sur http://exim.org/exim-html-current/doc/html/spec_html/ch40.html :

      In order to cause an ACL to be used, you have to name it in one of the relevant options in the main part of the configuration. These options are:

      acl_not_smtp 	ACL for non-SMTP messages
      acl_not_smtp_mime 	ACL for non-SMTP MIME parts
      acl_not_smtp_start 	ACL at start of non-SMTP message
      acl_smtp_auth 	ACL for AUTH
      acl_smtp_connect 	ACL for start of SMTP connection
      acl_smtp_data 	ACL after DATA is complete
      acl_smtp_etrn 	ACL for ETRN
      acl_smtp_expn 	ACL for EXPN
      acl_smtp_helo 	ACL for HELO or EHLO
      acl_smtp_mail 	ACL for MAIL
      acl_smtp_mailauth 	ACL for the AUTH parameter of MAIL
      acl_smtp_mime 	ACL for content-scanning MIME parts
      acl_smtp_notquit 	ACL for non-QUIT terminations
      acl_smtp_predata 	ACL at start of DATA command
      acl_smtp_quit 	ACL for QUIT
      acl_smtp_rcpt 	ACL for RCPT
      acl_smtp_starttls 	ACL for STARTTLS
      acl_smtp_vrfy 	ACL for VRFY
      
      

      For example, if you set

      acl_smtp_rcpt = small_acl
      
      

      the little ACL defined above is used whenever Exim receives a RCPT command in an SMTP dialogue.

      ces règles sont exécutées pendant le dialogue smtp, donc elles servent pour l'entrée en queue... donc ce n'est pas ce que je cherche, ou alors je n'ai pas compris. :/

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: exim !

        Posté par  (site web personnel) . Évalué à 2.

        J'ai fait un truc tout bidon :

        $ cat /etc/exim4/conf.d/acl/50-rate_limit 
        rate_limit_acl:
          warn ratelimit   = 0 / 10m / strict
               log_message = rate limit exceeded
               delay = 20s
          accept
        
        $ /etc/exim4/conf.d/main/99-rate_limit 
        # THD 120120
        acl_smtp_helo = rate_limit_acl
        
        

        et bien j'ai dans mon log exim

        2012-01-20 17:06:13 H=(localhost) [client] Warning: rate limit exceeded
        
        

        et dans mon dialogue SMTP j'ai bien 20s entre mon HELO et le 250 du serveur

        $ telnet relay 25
        Trying 192.168.254.121...
        Connected to relay.
        Escape character is '^]'.
        220 relay.local ESMTP Exim 4.72 Fri, 20 Jan 2012 17:06:52 +0100
        HELO localhost
        <--- ici s'écoule exactement 20s --->
        250 relay.local Hello localhost [192.168.254.4]
        
        

        Bref, ce n'est pas ce que je veux, moi je veux pouvoir terminer le dialogue SMTP, pouvoir éteindre électriquement mon client, me coucher, que sais-je, mais être sûr que mon mail est entré en queue. Qu'il sorte de la queue dans 1h ne me dérange pas, et je veux qu'il sorte de la queue dans une heure si j'ai déjà dépassé mon quota.

        Déjà le A de ACL pour Access était louche.

        ce commentaire est sous licence cc by 4 et précédentes

  • # iptables ?

    Posté par  (site web personnel) . Évalué à 2.

    il y a moyen de limiter les flux sortants par des iptables avec une option --hitcount

  • # policyd ?

    Posté par  (site web personnel) . Évalué à 2.

    D'après la doc ( http://www.policyd.org/content/quotas) la gestion des quotas de policyd devrait aussi permettre de limiter les flux sortants.

  • # chez postfix

    Posté par  . Évalué à 2.

    bonjour

    en fouillant les options de Postfix, on peut trouver cette option qui devrait faire l'affaire:
    http://www.postfix.org/postconf.5.html#transport_destination_rate_delay

    pour sendmail, par contre, je ne connais pas.

    • [^] # Re: chez postfix

      Posté par  (site web personnel) . Évalué à 2.

      Ah sympa !

      S'il me faut remplacer sendmail, en plus de la problématique évoquée dans ce forum je vais comparer exim et postfix en fonction du reste de mes usages :)

      ce commentaire est sous licence cc by 4 et précédentes

  • # Procédure pour Postfix

    Posté par  (site web personnel) . Évalué à 2.

    Réponse tardive, mais il semble que tu ne sois pas le seul à gérer ce problème, et d'autres avant toi on essayé de trouver une solution :

    Ralentir le débit de postfix pour wanadoo/orange

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.