DerSucker schrieb:
Das scheint wirklich etwas komplexer zu sein ☹ da ich froh bin, dass mein postfix in meinem szenario schon so funktioniert, wie er soll und auch produktiver Mailserver ist, will ich mich momentan mit meinem halbwissen nicht an das Thema wagen.
Warum nicht? So schwer ist das auch wieder nicht 😉
Den Thread lasse ich mal bis morgen offen...vlt hat ja noch jemand eine einfachere Lösung 😉
Ich habe mal eine ganz simple Lösung gestrickt. Die ist natürlich erstmal nur ein Proof-of-Concept, aber sie funktioniert. Du solltest das natürlich mit einem lokalen Postfix testen, vielleicht ist noch ein Fehler drin, der bei mir nicht auffällt.
Folgendes ist dazu an der Postfix-Konfiguration anzupassen:
| /etc/postfix/master.cf:
policy unix - n n - 0 spawn
user=nobody argv=/usr/local/bin/postfix_policy_server.pl
/etc/postfix/main.cf:
smtpd_end_of_data_restrictions = check_policy_service unix:private/policy
|
Und hier das Skript (liegt bei mir unter /usr/local/bin/):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | #!/usr/bin/env perl
#
# Ein simpler Policy-Server für Postfix, der message_size_limit pro Domain
# implementiert.
use strict;
# Hier ist die Definition der Domains mit Limit (in Bytes)
my %hashConfig = (
"marco-pc-debian.localdomain" => 75,
"example.org" => 1024,
);
my $action;
my %attr = ();
while( <STDIN> ) {
if( /([^=]+)=(.*)\n/ ) {
$attr{$1} = $2;
} elsif( $_ eq "\n" ) {
$action = "action=OK";
foreach my $domain (keys%hashConfig) {
if( $attr{'recipient'} =~ /${domain}$/ ) {
if( $attr{'size'} > $hashConfig{$domain} ) {
$action = "action=534 message size for this domain is limited to ".$hashConfig{$domain};
}
last;
}
}
print $action."\n\n";
exit( 0 );
}
}
|
An sich ist Perl nicht schwer zu lesen, der Ablauf sollte klar sein. Die Domains und Limits werden oben im Hash definiert. Die Standardaktion ist "OK", also wenn die Domain oben nicht auftaucht, greift nur das globale message_size_limit. Das ist natürlich noch nicht ausgereift. Man sollte die Definitionen aus einem Config-File lesen und bei viel frequentierten Mailservern wäre es besser den Server nicht als "spawn", sondern als Service zu definieren, der ständig läuft (aus Performancegründen).