[Postfixbuch-users] recipient_restrictions reihenfolge
Kai Fürstenberg
kai_postfix at fuerstenberg.ws
Mi Mär 11 14:33:43 CET 2009
Andre Hübner schrieb am 11.03.2009 13:19:
> smtpd_recipient_restrictions =
> reject_unauth_pipelining,
> reject_non_fqdn_sender,
> reject_non_fqdn_recipient,
> permit_auth_destination,
> reject_authenticated_sender_login_mismatch,
> check_client_access hash:/etc/postfix/pop-before-smtp,
> permit_sasl_authenticated,
> reject_unknown_sender_domain,
> reject_unknown_recipient_domain,
> reject_unauth_destination,
> check_recipient_access hash:/etc/postfix/recipient_access,
> check_recipient_access hash:/etc/postfix/recipient_restrictions,
> permit
>
> Das Problem ist eigentlich folgendes. Wir wollen erstmal verhindern das
> sasl-authentifizierte user mit falschem from das denen nicht gehört nach
> außen senden. nach innen, also praktisch an eigene adressen soll dies
> möglich sein.
Das geht so nicht. permit_sasl_authenticated lässt alles durch, wenn
sich der User authentifiziert hat.
reject_unauthenticated_sender_login_mismatch blockt in jedem Fall, wenn
die Daten nicht übereinstimmen.
> Aus diesem Grund habe ich vor das reject_authenticated_sender_login_mismatch
> ein permit_auth_destination gesetzt was natürlich quatsch ist da dann die
> späteren recipient_restrictions umgangen werden.
und zwar für sämtliche Mails, die du verwaltest.
> hat jemand einen tipp?
Ich sehe hier im Moment keine andere Möglichkeit, als einen Policy
Daemon zu verwenden, der Absender- und Empfängeradresse, bzw. die
Domainanteile miteinander vergleicht, und bei Übereinstimmung, die Mail
einfach durchlässt. Der SASL-Username muss aber auch noch geprüft
werden, zumindest auf Existenz.
z.B. à la:
#!/usr/bin/perl
# Nicht geprüft und Fehler vorbehalten.
my %parameter;
while (<STDIN>) {
chomp();
last unless length($_);
@temp=split(/=/,$_);
$parameter{$temp[0]} = $temp[1];
}
if ($parameter{'request'} eq "smtpd_access_policy") {
$recipient=$parameter{'recipient'};
$sender=$parameter{'sender'};
@temp_domain = split(/@/,$recipient);
$recipient_domain = $temp_domain[1];
@temp_domain = split(/@/,$sender);
$sender_domain = $temp_domain[1];
if (($recipient_domain eq $sender_domain) &&
($parameter{'sasl_username'} ne "" )) {
print <STDOUT>,"OK\n\n";
}
else {
print <STDOUT>,"DUNNO\n\n";
}
}
Schwieriger wird es nur, wenn der Kunde mehrere Domains hat. Dann musst
du noch die Eigentümer der Domains raussuchen und auch damit abgleichen.
--
Kai Fürstenberg
PM an: kai at fuerstenberg punkt ws
Mehr Informationen über die Mailingliste Postfixbuch-users