postfix-policyd SENDER THROTTLE

Postfix, QMail, Sendmail, Dovecot, Cyrus, Courier, Anti-Spam
bierhasser
Posts: 19
Joined: 2003-05-09 06:23
 

postfix-policyd SENDER THROTTLE

Post by bierhasser »

Ich möchte gerne die ausgehenden Emails Limitieren. Pro Stunde 100 Emails.

Nach einiger Recherche bin ich auf postfix-policyd aufmerksam geworden.
Nun funktioniert das auch bei allen eingehenden Nachrichten aber nicht bei den zu versendeten Nachrichten.

Meine /etc/postfix/main.cf:

Code: Select all

....
smtpd_data_restrictions = check_policy_service inet:127.0.0.1:10031, permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining, permit

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_hostname, reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_recipient_mx_access cidr:/etc/postfix/mx_access, reject_unauth_destination, check_recipient_access pcre:/etc/postfix/recipient_checks.pcre, reject_rbl_client multi.surbl.org, reject_rbl_client zen.spamhaus.org, reject_rbl_client relays.mail-abuse.org, permit_mx_backup, permit

smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031
policy_time_limit = 3600
/var/log/mail.info
Ausgehende Mail

Code: Select all

May 21 12:21:04 happyshitbit postfix/pickup[27342]: AEB434016A5: uid=10004 from=<admin@domain.org>
May 21 12:21:04 happyshitbit postfix/cleanup[27382]: AEB434016A5: message-id=<f517967a8cd96823dc5124e924f3743e@www.domain.org>
May 21 12:21:04 happyshitbit postfix/qmgr[27343]: AEB434016A5: from=<admin@domain.org>, size=1404, nrcpt=1 (queue active)
May 21 12:21:13 happyshitbit postfix/local[27384]: AEB434016A5: to=<pop17_1@mail.domain.de>, orig_to=<chris@domain.org>, relay=local, delay=8.7, delays=0.07/0.01/0/8.6, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail -t -a "$EXTENSION")
May 21 12:21:13 happyshitbit postfix/qmgr[27343]: AEB434016A5: removed
Eingehende Mail:

Code: Select all

May 21 12:24:27 happyshitbit postfix/smtpd[27418]: connect from extern.de[188.40.++.++]
May 21 12:24:27 happyshitbit postfix/smtpd[27418]: setting up TLS connection from extern.de[188.40.++.+]
May 21 12:24:27 happyshitbit postfix/smtpd[27418]: certificate verification failed for extern.de[188.40.++.++]: self-signed certificate
May 21 12:24:27 happyshitbit postfix/smtpd[27418]: extern.de[188.40.++.++]: Untrusted: subject_CN=extern.de, issuer=extern.de, fingerprint=U0:F4:79:F8:76:F8:8C:F0:15:DA:36:2F:98:EB:4B:03
May 21 12:24:27 happyshitbit postfix/smtpd[27418]: Untrusted TLS connection established from extern.de[188.40.++.++]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
May 21 12:24:28 happyshitbit postfix/smtpd[27418]: 7AB0A40048A: client=extern.de[188.40.++.++]
May 21 12:24:28 happyshitbit postfix-policyd: connection from: 127.0.0.1 port: 30226 slots: 0 of 4096 used 
May 21 12:24:28 happyshitbit postfix-policyd: rcpt=77, throttle=new(a), host=188.40.138.86, from=root@mail.extern.de, to=email@domain.org, size=343/10240000, quota=343/250000000, count=1/512(1), rcpt=1/3600(1), threshold=0%|0%|0% 
May 21 12:24:28 happyshitbit postfix-policyd: rcpt=78, throttle=update(a), host=188.40.138.86, from=root@mail.extern.de, to=email@domain.org, size=343/10240000, quota=686/250000000, count=1/512(1), rcpt=2/3600(2), threshold=0%|0%|0% 
May 21 12:24:28 happyshitbit postfix/cleanup[27434]: 7AB0A40048A: message-id=<20100521102426.62C80F0B2@mail.extern.de>
May 21 12:24:28 happyshitbit postfix/qmgr[27343]: 7AB0A40048A: from=<root@mail.extern.de>, size=688, nrcpt=1 (queue active)
May 21 12:24:28 happyshitbit postfix/smtpd[27418]: disconnect from extern.de[188.40.++.++]
Wenn ich das nun richtig verstanden habe müsste ich die Prüfung:

Code: Select all

check_policy_service inet:127.0.0.1:10031
innerhalb smtpd_recipient_restrictions vor das permit_mynetworks einfügen.

Dadurch würde aber bei jeder Verbindung zu Postfix, auch die später verworfen werden, ebenfalls Policyd aufgerufen werden.

Gibt es keine Möglichkeit nur die ausgehenden Emails zu prüfen/zählen?
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: postfix-policyd SENDER THROTTLE

Post by Roger Wilco »

Die smtpd_recipient_restrictions greifen, wie der Name schon andeutet, nur wenn der smtpd-Prozess benutzt wird, die E-Mail also via SMTP eingeliefert wird. In deinem Beispiel für die versendete E-Mail wurde diese allerdings lokal über das sendmail-Binary durch den Benutzer mit der UID 10004 eingeliefert.
bierhasser
Posts: 19
Joined: 2003-05-09 06:23
 

Re: postfix-policyd SENDER THROTTLE

Post by bierhasser »

Danke Roger, das hatte ich mir doch schon fast gedacht. Daher wird auch smtpd_data_restrictions nicht greifen.

Was für eine Möglichkeit habe ich denn nun oder eventuell einen anderen Lösungsansatz?
Es muss ja nicht Policyd sein.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: postfix-policyd SENDER THROTTLE

Post by Roger Wilco »

Erstelle einen Sendmail-Wrapper auf deinem System, der ggf. anhand der UID ermittelt, ob der Sender die E-Mail einliefern darf oder ob dessen Quota schon überschritten wurde. Das geht mit einem recht kurzen Skript.

Mit etwas mehr Hirnschmalz lässt sich das sicherlich auch mit dem Backend von policyd verheiraten.
bierhasser
Posts: 19
Joined: 2003-05-09 06:23
 

Re: postfix-policyd SENDER THROTTLE

Post by bierhasser »

Vielen dank Roger.

Das ist mir doch gleich viel sympathischer und auf die Idee hätte man gleich kommen sollen ](*,)
bierhasser
Posts: 19
Joined: 2003-05-09 06:23
 

Re: postfix-policyd SENDER THROTTLE

Post by bierhasser »

Nun habe ich auch etwas für meine Zwecke gefunden. http://www.iezzi.ch/archives/258
Hierbei wird sendmail mit einem perl Script ersetzt. Welches sich mit der Datenbank verbindet und die Berechtigung prüft.

Soweit ist das ja richtig gut. Nur hat das einen riesen Hacken. Das Datenbank Passwort steht als Klartext in dem Script. Somit ist es auch für alle auslesbar.
chmod 711 bringt nicht den gewünschten Effekt.

Gibt es eine Möglichkeit die Mysql Verbindungsdaten zu verbergen?
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: postfix-policyd SENDER THROTTLE

Post by Roger Wilco »

bierhasser wrote:Gibt es eine Möglichkeit die Mysql Verbindungsdaten zu verbergen?
Irgendwie muss das Skript an die Zugangsdaten fuer die Datenbank kommen und ab diesem Zeitpunkt koennen bzw. muessen auch die Benutzer, die das Skript ausfuehren, die Daten auslesen.

Am einfachsten erstellst du dir einen dedizierten Datenbankbenutzer fuer das Skript, der ausschliesslich Leserechte auf die betreffende Tabelle hat:

http://dev.mysql.com/doc/refman/5.1/en/ ... ystem.html
bierhasser
Posts: 19
Joined: 2003-05-09 06:23
 

Re: postfix-policyd SENDER THROTTLE

Post by bierhasser »

Nicht schlecht die Idee. Aber irgendwo muss ich ja den Zähler für die versendeten Emails pro UID ablegen.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: postfix-policyd SENDER THROTTLE

Post by Roger Wilco »

Wenn dir diese Loesung zu unsicher ist, dann bau dir eben einen Sendmail-Wrapper, der den policyd direkt abfragt. Das Protokoll ist recht simpel. Dazu ist dann auch kein Passwort mehr im Sendmail-Wrapper notwendig.