[Postfixbuch-users] Debian/Etch, Postfix, SASL, TLS: Konfigurationssackgasse

Agon S. Buchholz asb at kefk.net
Mi Mai 2 02:45:09 CEST 2007


Uwe Driessen wrote:

[ Seamonkey: "Mail server does not support secure authentication" ]

> Das scheint etwas damit zu tun zu haben welche arten der
> Passwortübermittlung in Devocot/Sasl aktiviert sind (evtl. nur Plain
> erlaubt?)

# cat /etc/dovecot/dovecot.conf | grep plain
   mechanisms = plain login

Das habe ich analog zur Konfiguration von Cyrus SASL 
(/etc/postfix/sasl/smtpd.conf) gesetzt, wo ich zuletzt eingestellt hatte:

    pwcheck_method: saslauthd
    mech_list: PLAIN LOGIN

Dovecot kennt auch den Parameter

    disable_plaintext_auth = yes

Seamonkey kann sich dann weiterhin auf dem Server einloggen, die 
Fehlermeldung ("Mail server does not support secure authentication") 
bleibt jedoch, wenn ich "Use secure authentication" aktiviere.

Die Frage ist allerdings auch hier wieder, was "secure authentication" 
sein soll. Glaubt man [1], dann sind das: GSSAPI, Kerberos, CRAM_MD5, 
DIGEST-MD5, NTLM und APOP. Davon biete ich dem Seamonkey tatsächlich 
nichts an, obwohl das Dovecot anscheinend alles könnte. Ich denke, ich 
lasse da am besten erstmal die Finger von und beschäftige mich mit 
später mit TLS, wenn der Rest funktioniert (Soweit ich verstehe, ist der 
Sinn von APOP doch nur, dass POP (a) authentifiziert wird und (b) keine 
unverschlüsselten Passwörter übers öffentliche Netz fließen? Funktional 
sollte das doch SASL + TLS vollständig ersetzen, jedenfalls bilde ich 
mir das bisher ein...).

>> Auch faszinierend: dovcot.log liefert mit bei einem POP3-Login von 
>> Seamonkey das verschlüsselte Passwort (also das, was mir "perl 
>> -MMIME::Base64 -e 'print encode_base64("user\0user\0password");' 
>> ausspuckt); gehe ich den Login mit Telnet auf Port 110 durch, wird
>> eben dieses verschlüsselte Passwort abgelehnt, das unverschlüsselte
>> dagegen angenommen.

> Devocot nimmt das PW verschlüsselt es und testet es gegen die
> Map/Datenbank. Kommt also ein verschlüsseltes PW dann wird es noch
> mal verschlüsselt und schon stimmt es nicht mehr.

Da ist anscheinend der Fall. Ich hatte mich an die Anleitung von [3], 
Abschnitt "Testing SASL authentication in the Postfix SMTP server", 
gehalten, wo der testlogin mit "AUTH PLAIN {encrypted_password}" 
durchgeführt wird. Vermutlich bezieht sich das nur auf Cyrus SASL, das 
sich offensichtlich anders verhält. Sowas muss man anscheinend mit der 
Muttermilch aufgesaugt haben ;-/

[ PTR-Record ]

> Wenn das ein Rootserver ist z.B. bei Hetzner solltest auch den PTR
> anpassen (das hatten wir doch schon mal)

Rootserver ja, aber nicht bei Hetzner. Unter [4] finde ich nichts 
passendes; der ISP hat den PRT-Record folgendermaßen konfiguriert:

# dig -x 1.2.3.4

; <<>> DiG 9.3.4 <<>> -x 1.2.3.4
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21789
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;4.3.2.1.in-addr.arpa.     IN      PTR

;; ANSWER SECTION:
4.3.2.1.in-addr.arpa. 1800 IN      PTR     my.domain.

;; Query time: 13 msec
;; SERVER: 81.169.163.106#53(81.169.163.106)
;; WHEN: Tue May  1 22:03:03 2007
;; MSG SIZE  rcvd: 65

Allerdings:

# host -t ptr my.domain
my.domain has no PTR record

??

[ Was antwortet auf eine Authentifizierungsanfrage? ]

> Saslauth ist doch wieder ein eigenes Paket(oder irre ich mich da?)

In Debian gibt es kein Paket "saslauth"; die Komponenten sind auf eine 
unbestimmte Anazahl "n" von Paketen wie "libsasl2-modules" und 
"sasl2-bin" verteilt; in letzterem steckt auch saslauthd. Soweit ich da 
durchblicke, handelt es sich dabei _immer_ um Cyrus SASL, was ich ja 
theoretisch nicht brauchen sollte (Fragezeichen?), fals ich Devecot zum 
Funktionieren bringe. Hmm, wie teste ich eigentlich, ob Dovecot wirklich 
authentifiziert **Wühl**

> Was steht denn in deiner Main.cf drinne ?
> smtpd_sasl_type = cyrus  ??

Nein, ich versuche ja die SASL-Authenthifizierung von Dovecot zu nutzen; 
daher habe ich dort eingetragen:

    [...]
    smtpd_sasl_auth_enable = yes
    smsmtpd_sasl_local_domain =
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    _smtpd_sasl_type = dovecot_
    smtpd_sasl_path = private/auth
    smtpd_sasl_authenticated_header = yes
    [...]

Das ist jedenfalls in etwa das, was die Anleitung [5] vorgibt.

# postconf -a
cyrus
dovecot

Laut man postconf(1) tut "postconf -a": "List the available SASL server 
plug-in types". Die Ausgabe will mir vermutlich mitteilen, dass das 
_alle_ SASL-Authentifizierungstypen sind, die Postfix überhaupt 
versteht, nicht jedoch (wie ich bisher dachte), dass das die Typen sind, 
die _aktiv_ sind und genutzt werden können (andererseits könnte ich auch 
vielleicht doch noch nicht alle Leichenteile des Cyrus-Massakers 
entsorgt haben).

Mein Hauptproblem ist momentan allerdings wohl noch immer, dass ich 
nicht wirklich Mail an den Server schicken kann (bei Mail an $mydomain: 
"Relay access denied" bzw. bei Mail an eine virtual_alias_domain: "loops 
back to myself"). Das wurde hier schon etliche Male durchgekaut [6], 
[7], ich habe bisher aber keinen geeigneten Lösungsansatz gefunden.

Konfiguriert ist das momentan folgendermaßen:

# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
inet_interfaces = all
local_recipient_maps =
mailbox_size_limit = 0
mydestination = $myhostname, localhost.$mydomain, localhost, 
www.$mydomain, mail.$mydomain
mydomain = {DOMAIN1}
mynetworks = 127.0.0.1/32 {IP}/32 [::1]/128 [{MAC}]/128
myorigin = /etc/mailname
notify_classes = resource, software, protocol, policy, delay, 2bounce, 
bounce
recipient_delimiter =
relayhost =
smtpd_banner = $myhostname ESMTP
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, 
permit_mynetworks,  reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
virtual_alias_domains = {DOMAIN2}, www.{DOMAIN2}, mail.{DOMAIN2}
virtual_alias_maps = hash:/etc/postfix/virtual_alias_maps

{DOMAIN1} und {DOMAIN2} sind eingetragen im Format domain.tld. Die 
Hostnamen in "mydestination" und "virtual_alias_domains" habe ich [8] 
entnommen, wo es heißt:

    "Caution: in order to avoid mail delivery loops, you must
    list all hostnames of the machine, including $myhostname,
    and localhost.$mydomain".

[ Mail an $mydomain: "Relay access denied" ]

Im Log sieht das etwa folgendermaßen aus, wenn ich eine Mail an 
{USER}@$mydomain (= {DOMAIN1}) sende:

# tail -f /var/log/mail.log
May  2 00:32:07 h652544 postfix/smtpd[3916]: NOQUEUE: reject: RCPT from 
ug-out-1314.google.com[66.249.92.169]: 554 5.7.1 <{USER}@{DOMAIN1}>: 
Relay access denied; from=<ich at gmail.com> to=<{USER}@{DOMAIN1}> 
proto=ESMTP helo=<ug-out-1314.google.com>
May  2 00:32:07 h652544 postfix/cleanup[3919]: B6E3C5E000B: 
message-id=<20070501223207.B6E3C5E000B at h652544.{DOMAIN1}>
May  2 00:32:07 h652544 postfix/smtpd[3916]: disconnect from 
ug-out-1314.google.com[66.249.92.169]
May  2 00:32:07 h652544 postfix/qmgr[3417]: B6E3C5E000B: 
from=<double-bounce at h652544.{DOMAIN}>, size=917, nrcpt=1 (queue active)
[...]

[ Mail an eine virtual_alias_domain: "loops back to myself" ]

Etwas anders sieht das Log aus beim Senden einer Mail an 
{USER}@{DOMAIN2}) (definiert in virtual_alias_domains):

# tail -f /var/log/mail.log
May  2 00:51:26 h652544 postfix/qmgr[3417]: A32FE5E0014: from=<>, 
size=3714, nrcpt=1 (queue active)
May  2 00:51:26 h652544 postfix/cleanup[4010]: B83775E001F: 
message-id=<20070501225126.B83775E001F at h652544.{DOMAIN1}>
May  2 00:51:26 h652544 postfix/bounce[4012]: 1C4CC5E000B: postmaster 
non-delivery notification: B83775E001F
May  2 00:51:26 h652544 postfix/qmgr[3417]: B83775E001F: 
from=<double-bounce at h652544.{DOMAIN1}>, size=3330, nrcpt=1 (queue active)
May  2 00:51:26 h652544 postfix/qmgr[3417]: 1C4CC5E000B: removed
May  2 00:51:26 h652544 postfix/smtp[4013]: B83775E001F: 
to=<postmaster at h652544.{DOMAIN_ISP}>, orig_to=<postmaster>, relay=none, 
delay=0.06, delays=0.05/0.01/0/0, dsn=5.4.6, status=bounced (mail for 
h652544.{DOMAIN_ISP} loops back to myself)
May  2 00:51:26 h652544 postfix/bounce[4012]: warning: B83775E001F: 
undeliverable postmaster notification discarded
May  2 00:51:27 h652544 postfix/qmgr[3417]: B83775E001F: removed
May  2 00:51:27 h652544 postfix/smtp[4011]: A32FE5E0014: 
to=<ich at gmail.com>, relay=gmail-smtp-in.l.google.com[66.249.93.27]:25, 
delay=0.77, delays=0.08/0/0.06/0.62, dsn=2.0.0, status=sent (250 2.0.0 
OK 1178059887 j1si78378ugf)
May  2 00:51:27 h652544 postfix/qmgr[3417]: A32FE5E0014: removed
May  2 00:51:56 h652544 postfix/smtpd[4007]: disconnect from 
ug-out-1314.google.com[66.249.92.172]

Die Dokumentation sagt dazu [9]...

    "Where the Postfix SMTP client should deliver mail when it detects a
    "mail loops back to myself" error condition. This happens when the
    local MTA is the best SMTP mail exchanger for a destination not
    listed in $mydestination, $inet_interfaces, $proxy_interfaces,
    $virtual_alias_domains, or $virtual_mailbox_domains. By default,
    the Postfix SMTP client returns such mail as undeliverable".

... und schlägt als Abhilfe den Parameter "best_mx_transport = local" 
vor. Das ändert bei mir aber nichts, der Fehler bleibt gleich.

Wenn ich nun aber "myhostname", "mydomain" und "myorigin" komplett 
auskommentiere (Fallback auf $myhostname und dann auf /etc/mailname?), 
"best_mx_transport = local" ergänze und "virtual_alias_domains = 
hash:/etc/postfix/virtual_alias_domains" setze, scheint der Mailempfang 
plötzlich zu funktionieren, zumindest bei einigen Testmails. In 
/etc/postfix/virtual_alias_domains steht lediglich:

    {DOMAIN1}   anything
    {DOMAIN2}   anything

Das widerspricht, soweit ich überhaupt noch irgendwas verstehe, 
vollkommen den Angaben aus der Postfix-Dokumentation, nach der in 
virtual_alias_domains eben _nicht_ die Domain aus $mydomain bzw. 
$myhostname stehen darf. Demnach funktioniert das Geraffel jetzt nur, 
weil ich "myhostname", "mydomain" und "myorigin" komplett auskommentiert 
habe und Postfix auf die Defaultwerte, also wohl /etc/mailname, 
zurückfällt? Das verstehe ich wieder nicht, weil ich eigentlich 
h652544.{DOMAIN_ISP} längst als Werte für $myhostname etc. durchprobiert 
hatte. Außerdem ist das eine Konfiguration, die ich bisher in keinem 
Howto oder Tutorial gesehen habe. Anyway...

MfG & danke fürs Mitdenken, -Agon


[1] http://kb.mozillazine.org/Connection_errors_-_POP3
[2] http://wiki.dovecot.org/Authentication/PasswordSchemes
[3] http://www.postfix.org/SASL_README.html
[4] 
http://www.google.de/search?hl=de&safe=off&client=opera&rls=de&hs=iyI&q=+site%3Alisti.jpberlin.de+postfix+ptr&btnG=Suche&meta=lr%3Dlang_de
[5] http://wiki.dovecot.org/PostfixAndDovecotSASL und 
http://www.postfix.org/SASL_README.html#server_dovecot
[6] 
http://www.google.de/search?hl=de&safe=off&client=opera&rls=de&hs=68d&q=+site%3Alisti.jpberlin.de+%22loops+back+to+myself%22&btnG=Suche&meta=lr%3Dlang_de
[7] 
http://www.google.de/search?hl=de&safe=off&client=opera&rls=de&hs=sTJ&q=+site%3Alisti.jpberlin.de+%22relay+access+denied%22&btnG=Suche&meta=lr%3Dlang_de
[8] http://www.postfix.org/BASIC_CONFIGURATION_README.html
[9] http://www.postfix.org/postconf.5.html




Mehr Informationen über die Mailingliste Postfixbuch-users