[Postfixbuch-users] amavisd-new und MySQL-Abfrage für lokale/zuständige Domains
Patrick Ben Koetter
p at sys4.de
Fr Aug 9 21:22:04 CEST 2013
Hallo Michael,
* Michael Köhler <postfixbuch-users at listen.jpberlin.de>:
> ich möchte mein Mailserver-Setup (Postfix 2.9.3 + amavisd-new 2.6.4 + sa 3.3.1, Dovecot 2.1 mit gemeinsamer Datenbasis durch Postfixadmin (MySQL-DB) auf Debian Squeeze), welches nun inzwischen mehr als zwei Jahre alt ist und kaum angefaßt wurde, auf den Prüfstand stellen und natürlich optimieren. Ausserdem steht bald ein Serverwechsel zu Debian Wheezy an, da kann ein erneutes Beschäftigen mit dem Sysem kaum schaden :).
> In dem Zusammenhang bin ich an dem Artikel von Patrick hängen geblieben: http://sys4.de/en/blog/2013/02/15/e-mail-content-policies-mit-amavis/ und versuche das gerade nachzuvollziehen. Natürlich frage ich bisher nicht die lokalen Domains ab und natürlich benutze ich nur eine einheitliche policy bank :). Das funktioniert zwar seit über zwei Jahren ganz gut, aber warum nicht optimieren?!
premature optimization is the root of all evil! Ich würde nochmal zwei Jahre
warten... ;)
> Konkret fehlt es mir an folgendem Verständnis: In dem Artikel läßt Patrick amavis eine Datei nach lokalen Domains abfragen:
>
> @local_domains_maps = (
> ".$mydomain",
> read_hash('/etc/postfix/virtual_domains')
> );
Das ist richtig, wenn Du mit files/maps hantierst oder Einträge direkt in der
Konfigurationsdatei vornimmst.
> Bei mir stehen die Informationen in der postfixadmin-mysql-db drin. Ich habe also in die amavisd-new config
>
> @lookup_sql_dsn = ( ['DBI:mysql:database=postfixadmin;host=127.0.0.1;port=3306', 'poster', 'PASSWORD'], );
> $sql_select_policy = 'SELECT "Y" as local, 1 as id FROM domain WHERE CONCAT("@",domain) IN (%k)';
> $sql_select_white_black_list = undef;
Genau. Das und LDAP werte amavisd auch aus, wenn Du es konfiguriert hast.
Dabei geht es davon aus, dass ein Recipient/eine Domain 'local' ist, wenn die
Suche einen Treffer beim lookup im RDBMS/LDAP ergibt:
A special shorthand is provided when SQL lookups are used: when a match
for recipient address (or domain) is found in SQL tables (regardless of
field values), the recipient is considered local
> eingefügt. Ich bin mir aber unsicher, was ich nun in
>
> @local_domains_maps = ( [".$mydomain"]);
>
> und
> @local_domains_acl = ( "." );
>
> eintragen soll. Wie weiß amavis, dass es für die Abfragen in die MySQL-DB schauen soll? Und wie sollte dann ein Logfile-Eintrag aussehen, wenn amavis feststellt, dass ein eintreffende EMail für oder von einer internen Domain ist oder anders gefragt: Wie kriege ich raus, obs funktioniert?
Sobald Du SQL aktivierst, wird amavis automatisch seine Lookups auf SQL mit
erweitern. Die Suchstrategie ist wie folgt:
9 - lookup for user+foo at sub.example.com
8 - lookup for user at sub.example.com (only if $recipient_delimiter is '+')
7 - lookup for user+foo (only if domain part is local)
6 - lookup for user (only local; only if $recipient_delimiter is '+')
5 - lookup for @sub.example.com
3 - lookup for @.sub.example.com
2 - lookup for @.example.com
1 - lookup for @.com
0 - lookup for @. (catchall)
SQL-Abfragen kommen zuerst dran:
(...) the default sequence of lookups SQL, LDAP, hash, ACL, regexp, constant.
The first that returns a definitive answer (not undef/NULL) stops the search.
Und rausfinden, ob es funktioniert? IIRC werden SQL-Abfragen ab loglevel 2 mit
ausgegeben. Alternativ: Domain in SQL eintragen, Mail an Domain senden,
nachsehen ob z.B. die Spamresults eingetragen wurden (<- setzt passende config voraus).
p at rick
--
[*] sys4 AG
http://sys4.de, +49 (89) 30 90 46 64
Franziskanerstraße 15, 81669 München
Sitz der Gesellschaft: München, Amtsgericht München: HRB 199263
Vorstand: Patrick Ben Koetter, Axel von der Ohe, Marc Schiffbauer
Aufsichtsratsvorsitzender: Florian Kirstein
Mehr Informationen über die Mailingliste Postfixbuch-users