[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