POSTFIX: Begrenzung der Rate, mit der ein bestimmter Benutzer E-Mails senden kann

13

Wir haben einen Server mit CentOS-Server-Setup, der unsere Websites und E-Mail-Server hostet (mit POSTFIX). Wir verwalten das System mit Virtualmin bzw. Webmin.

Im Allgemeinen stellen wir dem Kunden für jede von uns eingerichtete Site ein E-Mail-Konto in unserem System zur Verfügung. Insbesondere ein Kunde hat entschieden, dass es eine gute Idee ist, buchstäblich Tausende von E-Mails in großen Mengen zu versenden. In diesem Fall reagiert der Mailserver nicht mehr und E-Mails für andere Kunden gehen aus, während die Warteschlange verarbeitet wird.

Gibt es eine Möglichkeit, die Rate des E-Mail-Versands für einen bestimmten Benutzer des Systems und nicht für alle Benutzer zu begrenzen? Gibt es auch eine Einstellung, die wir ändern sollten, damit ein Benutzer nicht dazu führen kann, dass der Mailserver für andere Benutzer ausfällt?

Vielen Dank

WarpKid
quelle

Antworten:

23

Mir fällt auf, dass alle anderen Antworten auf diese alte Frage nur Links sind. Deshalb werde ich in wenigen Worten beschreiben, wie ich meine Lieblingslösung für diesen Job implementieren kann.

Der Link , dass @ 84104 hat vorgeschlagen, wenn auch sehr nützlich, kann nicht richtig Rate pro Sender zu implementieren. smtpd_clientGrenzwerte dienen nicht der Verkehrssteuerung, sondern der Unterstützung der Client-Software: "Maßnahmen gegen Clients, die zu viele Verbindungen herstellen". Man kann zwar Empfehlungen finden wie diese ein , dass es sicherlich helfen kann. Als @E. Yazici hat vorgeschlagen, ein Addon für Postfix zu installieren . Persönlich finde ich die von @Janne Pikkarainen empfohlene Polizeiarbeit ziemlich umständlich, obwohl sie als Standard gilt.

Mein Lieblings-Addon ist postfwd, weil es leicht und einfach ist. Es ist auch erwähnenswert, dass dies mit Plesk oder ähnlichem sehr einfach funktioniert, ohne die komplizierten Konfigurationsdateien von Plesk zu beeinträchtigen. Das E-Mail-Ratenlimit in Plesk wurde nur in Version 12 implementiert, die Richtlinienfunktionen sind jedoch begrenzt.

Laden Sie zuerst das neueste Addon von der obigen Site herunter. Ich glaube, dass es für CentOS im Gegensatz zu Ubuntu und Debian keine U / min gibt. Es wird jedoch empfohlen, die neueste Version zu verwenden. Genauer gesagt, Version 1.32 (die zB in Ubuntu 14.04LTS-Repos vorhanden ist) hat einen üblen Fehler , der die ordnungsgemäße Funktion verhindert. Mit Version 1.35 wird dies behoben.

Stellen Sie sicher, dass diese PERL-Module vorhanden sind. Wenn Sie Debian oder Ubuntu verwenden , können Sie von Repos installieren, so dass alle Abhängigkeiten automatisch aussortiert und durch /usr/sbin/postfwddie neueste Version ersetzt werden.

Dann erstelle den Regelsatz. Erstellen Sie eine Datei wie /etc/postfwd.cfoder /etc/postfix/postfwd.cfund fügen Sie Folgendes hinzu:

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)

Der obige Regelsatz enthält offensichtlich zwei Regeln, die für alle Absender ausgewertet werden. Die Syntax der rateAktion lautet:

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

Weitere Tarifbeispiele finden Sie hier . Hinweise zur Syntax finden Sie in der Dokumentation . Eine ähnliche Diskussion finden Sie hier . Wenn SASL implementiert ist (zB Dovecot) können Sie sicher ersetzen sendermit sasl_username. Sie können die Gültigkeit des Regelsatzes mit der -COption testen :

postfwd -f /etc/postfwd.cf -C

Anschließend können Sie optional einen dedizierten Benutzer und eine dedizierte Gruppe erstellen, postfwdunter der postfwd ausgeführt und gestartet wird:

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

Wenn es von apt (Debian, Ubuntu usw.) installiert wurde, sollte es auch eine Konfigurationsdatei unter geben, unter der /etc/default/postfwdSie den Dienst ordnungsgemäß starten können, z sudo service postfwd start.

Sehen Sie sich dann das Protokoll an, um sicherzustellen, dass postfwd abhört. Postfwd verwendet dasselbe Protokoll wie postfix (zB /var/log/mailoder /usr/local/psa/var/log/maillogetc) und eine Zeile, die vorhanden postfwd 1.35 ready for inputsein sollte.

Dann lassen Sie postfix wissen, dass postfwd verwendet werden soll. Bearbeiten Sie die postfix conf-Datei (normalerweise /etc/postfix/main.cf) und in der Zeile:

smtpd_recipient_restrictions = permit_mynetworks,...

hinzufügen check_policy_service inet:127.0.0.1:10040. Beachten Sie bitte, dass die Reihenfolge, in der Sie dies angeben, von smtpd_recipient_restrictionsgroßer Bedeutung ist und Sie möglicherweise viel Zeit damit verbringen, zu diagnostizieren, was falsch sein könnte. Wie in dieser Frage erläutert , wird Postfix nicht mit der nächsten Prüfung fortgesetzt, wenn eine Prüfung OK oder REJECT zurückgibt. Sie sollten diese also wahrscheinlich hoch setzen.

Um zu überprüfen, ob dies funktioniert, können Sie entweder eine sehr kleine Grenze wie 1 angeben oder sogar eine Regel als hinzufügen id=DEFAULT; action=dunno. Jeder Regelschlag wird trotzdem protokolliert. Bitte beachten Sie auch, dass das Preislimit pro Absender nicht zwischen mehreren E-Mails mit einem einzelnen Empfänger oder einer einzelnen E-Mail mit mehreren Empfängern unterscheidet.

Dann senden Sie eine E-Mail von einem Konto (auf diesem Server) und sehen Sie sich das Protokoll an:

grep "RULES" /var/log/mail

Andere Links: Schnellstart nach der Weiterleitung .

Wtower
quelle
1
eine Explosion aus der Vergangenheit diese Frage! Vielen Dank, dass Sie sich die Zeit genommen haben, eine so gut durchdachte Antwort zu geben. Ich bin beeindruckt!
WarpKid
1
Meine Version von postfix barfs für jeden smtpd_recipient_restrictionsEintrag, in dem ein Leerzeichen steht, musste ich postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040in /etc/postfix/main.cf definieren und dann in /etc/postfix/master.cf alssmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure
So starten Sie Postfix in Ubuntu neu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower
Zumindest mit Ubuntu 16.04 stellte ich fest, dass ich den Platzhalter in den Regeln ändern musste, um .+(mindestens 1) anstatt .*(mindestens 0) zu verwenden, damit Regeln nicht mit fehlenden Feldern übereinstimmen.
TommyPeanuts
4

Was Sie brauchen, ist ein Richtlinien-Addon für Postfix. Es gibt ein Dutzend Richtlinien-Addons für Postfix, von denen einige über eine Funktion zur Ratenbegrenzung verfügen. Eine Liste der Postfix-Richtlinien-Addons finden Sie hier .

Emre Yazici
quelle