[Postfixbuch-users] DKIM mit Amavis und Postfix funktioniert nicht

Stefan Förster cite+postfix-buch at incertum.net
Sa Aug 1 01:06:12 CEST 2009


Das schöne, wenn man auf solche uralten Mails antwortet ist, daß sie
keiner mehr liest und man sich ziemlich weit aus dem Fenster lehnen
kann.

Zur Erinnerung: Es ging darum, ohne Trennung verschiedener Ports etc.
in amavisd-new eine Policy zu laden, die $originating auf 1 setzt,
wenn der Client sich per SASL authentifiziert hat.

* Kai Fürstenberg <kai_postfix at fuerstenberg.ws> wrote:
> Peer Heinlein schrieb am 19.07.2009 12:09:
>> Warum soll das nicht gehen? Wo steht denn das? Ich habe das zumindest
>> noch nicht beobachten können, aber ich nutze aus verschiedenen Gründen
>> in der Tat auch eigene Policy-Banks.
[...]
> 
> Mark hat auf jeden Fall auf der Amavis-Liste gesagt, dass MYUSERS erst
> dann geladen wird, wenn $originating explizit auf 1 gesetzt wird. Die
> andere Möglichkeit besteht darin, die IP-Adressen in @mynetworks
> einzutragen.
> 
> Damit Amavis aber nun nicht den ganzen IPv4-Adressraum als lokal
> ansieht, bleibt nur noch, entweder den Port, oder die IP-Adresse des
> Mailservers für ausgehende Mails zu ändern, und diese dann auf einen
> separaten Amavis-Port weiterzuleiten wo dann in einer policy bank
> $originating=1 gesetzt wird.

Ja. Oder man hat ein Postfix, das RFC 3848 unterstützt (2.5+, glaube
ich).

Dann definiert man sich im amavisd-new:

$policy_bank{'MINI-SUBMISSION'} = {
    originating => 1,
};

Jetzt kann man amavisd-new überreden, diese Policy nachzuladen, wenn
er vom eigenen Mailserver einen "Received:" header findet, der
ESMTP(S)A enthält - dazu muß man ihm nur ein "custom package"
unterschieben:

package Amavis::Custom;
use strict;

BEGIN {
        import Amavis::Conf qw(:platform :confvars c cr ca $myhostname);
        import Amavis::Util qw(do_log untaint safe_encode safe_decode);
        import Amavis::rfc2821_2822_Tools;
        import Amavis::Notify qw(build_mime_entity);
}

sub new {
        my($class,$conn,$msginfo) = @_;
        my($self) = bless {}, $class;

        my $sasl_owned = 0;

        foreach my $line (@{$msginfo->{'orig_header'}}) {
                $line =~ s/\n\t/ /g;
                $sasl_owned = 1 if $line =~ m/^Received:.*by mail.incertum.net.*with ESMTP(S)?A.*/i;
        }

        if ($sasl_owned) {
                do_log(2, sprintf("Load SASL policy bank"));
                Amavis::load_policy_bank('MINI-SUBMISSION')
        }

        return $self;
}

1;  # insure a defined return

Hier dürfte jetzt klar werden, warum man in der obigen Policy-Bank
besser nicht allzuviele Settings aufweicht: So ein "Received:"-Header
lässt sich nämlich beliebig fälschen und ich habe mir nicht die Mühe
gemacht, darüber nachzudenken, ob man das mit Header/Body-Checks in
den Griff kriegen kann.

Den Code kann man mit ziemlicher Sicherheit, die RegExp mit absoluter
Sicherheit noch verbessern.


Ciao
Stefan
-- 
Stefan Förster     http://www.incertum.net/     Public Key: 0xBBE2A9E9
FdI #269: C - Nomic als Programmiersprache. (Florian Weimer)



Mehr Informationen über die Mailingliste Postfixbuch-users