Den Unterschied kenne ich schon, aber vertieftes Wissen habe ich dazu leider nicht... Das Problem ist unser SysAdmin ist "geflohen" und ich arme *** als Anwendungsentwickler und Werkstudent darf dessen Arbeit jetzt fortführen, obwohl ich davon naja eher nur die Grundkenntnisse gradeso kenne 😢
Ok, ich versuche es nochmal mit paar mehr Daten:
Also Dovecot habe ich folgendermaßen mit LDAP verbunden (dovecot-ldap.conf.ext):
hosts = 10.1.1.111
dn = CN=admin,DC=domain,DC=de
dnpass = pass
tls = no
auth_bind = yes
debug_level = -1
ldap_version = 3
base = OU=People,DC=domain,DC=de
scope = subtree
deref = never
user_attrs = uidNumber=uid,gidNumber=gid, \
=mail=maildir:/home/vmail/mailboxes/%d/%u
user_filter = (mail=%u)
pass_filter = (&(objectClass=posixAccount)(uid=%u))
pass_attrs = mail=user,userPassword=password
iterate_attrs = mail=user
iterate_filter = (objectClass=person)
default_pass_scheme = PLAIN
Das wird soweit ich das verstanden habe aufgerufen, wenn ich mich mit Thunderbird auf den Server per IMAP und userid ("mustermann") verbinde.
Daraufhin finde ich dann folgendes im Dovecot-Debug Log:
Mar 07 14:17:26 auth: Debug: ldap(mustermann,10.2.1.4,<B2phYdJmhJ8KAgEE>): bind search: base=OU=People,DC=domain,DC=de filter=(&(objectClass=posixAccount)(uid=mustermann))
Mar 07 14:17:26 auth: Debug: ldap(mustermann,10.2.1.4,<B2phYdJmhJ8KAgEE>): result: mail=max.mustermann@domain.de; mail unused
Mar 07 14:17:26 auth: Debug: ldap(mustermann,10.2.1.4,<B2phYdJmhJ8KAgEE>): username changed mustermann -> max.mustermann@domain.de
Mar 07 14:17:26 auth: Debug: ldap(max.mustermann@domain.de,10.2.1.4,<B2phYdJmhJ8KAgEE>): result: mail=max.mustermann@domain.de
Mar 07 14:17:26 auth: Debug: client passdb out: OK 1 user=max.mustermann@domain.de original_user=mustermann
Mar 07 14:17:26 auth: Debug: master in: REQUEST 1371537409 4495 1 c68c71b3c47020dec4afebac50dadc15 session_pid=4498 request_auth_token
Mar 07 14:17:26 auth: Debug: ldap(max.mustermann@domain.de,10.2.1.4,<B2phYdJmhJ8KAgEE>): user search: base=OU=People,DC=domain,DC=de scope=subtree filter=(mail=max.mustermann@domain.de) fields=uidNumber,gidNum$
Mar 07 14:17:26 auth: Debug: ldap(max.mustermann@domain.de,10.2.1.4,<B2phYdJmhJ8KAgEE>): result: gidNumber=10000 uid=mustermann uidNumber=5068; uidNumber,uid,gidNumber unused
Mar 07 14:17:26 auth: Debug: ldap(max.mustermann@domain.de,10.2.1.4,<B2phYdJmhJ8KAgEE>): result: gidNumber=10000 uid=mustermann uidNumber=5068
Mar 07 14:17:26 auth: Debug: master userdb out: USER 1371537409 max.mustermann@domain.de uid=5068 gid=10000 mail=maildir:/home/vmail/mailboxes/domain.de/max.mustermann@domain.de auth_token=63a5c2f$
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: Added userdb setting: mail=maildir:/home/vmail/mailboxes/domain.de/max.mustermann@domain.de
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: Effective uid=5068, gid=10000, home=
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/home/vmail/mailboxes/domain.de/max.mustermann@domain.de
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: maildir++: root=/home/vmail/mailboxes/domain.de/max.mustermann@domain.de, index=, indexpvt=, control=, inbox=/home/vmail/mailboxes/domain.de/max.mustermann@domain.de, alt=
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: INBOX: Mailbox opened because: SELECT
Wenn ich jetzt eine Mail an den Server sende, sollte diese in den Ordner "/home/vmail/mailboxes/domain.de/max.mustermann@domain.de" geschoben werden.
Was ich bisher verstanden habe:
Wenn die E-Mail auf dem Server erkannt wird, wofür POSTFIX zuständig ist, wird diese von POSTFIX an Dovecot weitergeleitet.
Und Dovecot ist dann dafür verantwortlich, dass diese Mail in den richtigen Ordner geschoben wird.
Was ich nicht verstanden habe und wo auch wahrscheinlich das Problem liegt:
POSTFIX bekommt ja die Mail-Adresse, an die die Mail geleitet werden soll.
Wie gibt POSTFIX das nun an Dovecot weiter, da Dovecot diese für die LDAP Abfrage benötigt?
Hier mal die master.cf:
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_tls_security_level=encrypt
-o tls_preempt_cipherlist=yes
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
und main.cf:
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = services.domain.de
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = services.domain.de, localhost
relayhost = mail.domain.de
relay_domains = static:all
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = domain.de
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
dovecot_destination_recipient_limit = 1
message_size_limit = 65536000
Und genau bei dem Fall, wenn eine E-Mail an Dovecot weitergeleitet wird, passiert das Problem, dass aus max.mustermann@domain.de max.mustermann gemacht wird und desshalb dann bei Dovecot die LDAP Abfrage im Log fehlschlägt:
Mar 08 11:46:09 auth: Debug: master in: USER 1 max.mustermann@domain.de service=lda
Mar 08 11:46:09 auth: Debug: ldap(max.mustermann): user search: base=OU=People,DC=cc-gmbh,DC=de scope=subtree filter=(mail=max.mustermann) fields=uidNumber,gidNumber
Mar 08 11:46:09 auth: Debug: userdb out: NOTFOUND 1
Mar 08 11:46:09 auth: Debug: ldap(max.mustermann): no fields returned by the server
Mar 08 11:46:09 auth: Debug: userdb out: NOTFOUND 1
Mar 08 11:46:09 lda(max.mustermann@domain.de): Debug: auth USER input:
Und da sieht man in Zeile 2, dass die Domain hinten im Filter abgeschnitten wurde und ich verstehe einfach nicht wieso...
Und im Syslog steht dann, dass das Ganze fehlgeschlagen ist:
Mar 8 11:48:35 services postfix/pipe[3938]: 55C0D94004A: to=<max.mustermann@domain.de>, relay=dovecot, delay=376, delays=375/0.01/0/0.97, dsn=5.1.1, status=bounced (user unknown)
Hoffe, ich habe nicht alles völlig falsch verstanden und die Konfig Dateien helfen ein wenig weiter...