staging.inyokaproject.org

Dovecot + Postfix = LDAP filter schlägt fehl

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

Masace

Anmeldungsdatum:
15. November 2017

Beiträge: Zähle...

Hallo, ich habe folgendes Problem: Ich habe einen Server auf dem Dovecot + Postfix laufen, beide in Verbindung mit LDAP. Wenn eine Mail reinkommt, wird die Domain von der Mail-Adresse weggeschnitten und somit schlägt die LDAP Abfrage von Dovecot fehl 😢 . Also für mich sieht es so aus, als würde dieser Cut irgendow zwischen Postfix und Dovecot stattfinden, aber ich finde das Problem nicht, hier einmal die Meldung:

Mar 07 12:47:26 auth: Debug: master in: USER    1       max.mustermann@domain.de        service=lda
Mar 07 12:47:26 auth: Debug: ldap(max.mustermann): user search: base=OU=People,DC=domain,DC=de scope=subtree filter=(mail=max.mustermann) fields=uidNumber,gidNumber,uid
Mar 07 12:47:26 lda(max.mustermann@domain.de): Debug: auth USER input:
Mar 07 12:47:26 auth: Debug: ldap(max.mustermann): no fields returned by the server
Mar 07 12:47:26 auth: Debug: userdb out: NOTFOUND   

Ich bin noch nicht sehr vertraut mit Postfix und Dovecot, aber diese Abfrage macht soweit ich das sehe Dovecot und wie man sehen kann ist die Mail-Adresse richtig vorhanden, aber bei der LDAP Abfrage wird die Domain einfach abgeschnitten... Ich kann mir aber nicht vorstellen, dass das Problem bei Dovecot liegt, da der Login von Thunderbird funktioniert und der läuft ja darüber. Bei dem Login wird auch der Filter richtig gefüllt:

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/mustermann    auth_token=63a5c2f$
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: Added userdb setting: mail=maildir:/home/vmail/mailboxes/domain.de/mustermann
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/mustermann
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: maildir++: root=/home/vmail/mailboxes/domain.de/mustermann, index=, indexpvt=, control=, inbox=/home/vmail/mailboxes/domain.de/mustermann, alt=
Mar 07 14:17:26 imap(max.mustermann@domain.de): Debug: INBOX: Mailbox opened because: SELECT

Vielen Dank schonmal!

sebix Team-Icon

Ehemalige

Anmeldungsdatum:
14. April 2009

Beiträge: 5584

Ich bin mir nicht sicher, ob dir der Unterschied zwischen IMAP und SMTP klar ist.

Die Logs sind unvollstaendig, da erkennt man nicht, was passiert und Konfiguration kann ich auch keine erkennen.

Masace

(Themenstarter)

Anmeldungsdatum:
15. November 2017

Beiträge: Zähle...

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...

Masace

(Themenstarter)

Anmeldungsdatum:
15. November 2017

Beiträge: 16

Ist folgende Zeile verantwortlich für den Transport zu Dovecot?

 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Weil ich glaube, dass diese "Variable" {recipient} falsch gefüllt wird, wenn ich die ändere, ändert sich nämlich der Filter, der von Dovecot an LDAP geschickt wird. Wie wird diese "Variable" denn gefüllt?

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Masace schrieb:

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 😢

Dann solltet ihr dringend wieder einen Administrator einstellen. Der Betrieb eines Mailservers ist kein Kinderspiel, und gerade im Firmenumfeld ist ein funktionierender Mailserver Lebensgrundlage.

Und da sieht man in Zeile 2, dass die Domain hinten im Filter abgeschnitten wurde und ich verstehe einfach nicht wieso...

Zeig mal

doveconf -n

Masace

(Themenstarter)

Anmeldungsdatum:
15. November 2017

Beiträge: 16

Dann solltet ihr dringend wieder einen Administrator einstellen. Der Betrieb eines Mailservers ist kein Kinderspiel, und gerade im Firmenumfeld ist ein funktionierender Mailserver Lebensgrundlage.

Angeblich ist der Herr Chef dabei jemanden zu suchen...

Hier die doveconf -n:

# 2.2.33.2 (d6601f4ec): /usr/local/etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.22 (22940fb7)
# OS: Linux 4.4.0-116-generic x86_64 Ubuntu 16.04.4 LTS 
auth_debug = yes
auth_master_user_separator = *
auth_username_format = %n
auth_verbose = yes
auth_verbose_passwords = yes
debug_log_path = /var/log/dovecot-debug.log
default_internal_user = ccu
default_login_user = ccu
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
mail_debug = yes
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
  type = private
}
passdb {
  args = /usr/local/etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
plugin {
  sieve = /home/vmail/mailboxes/%d/%u/sieve/dovecot.sieve
  sieve_dir = /home/vmail/mailboxes/%d/%u/sieve
  sieve_global_dir = /usr/local/etc/dovecot/sieve/global
  sieve_global_path = /usr/local/etc/dovecot/sieve/default.sieve
}
postmaster_address = postmaster@domain.de
protocols = imap sieve
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
  user = root
}
service dict {
  unix_listener dict {
    group = vmail
    mode = 0660
    user = vmail
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key =  # hidden, use -P to show it
userdb {
  args = /usr/local/etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
verbose_ssl = yes
protocol lmtp {
  mail_plugins = " sieve"
  postmaster_address = root@services.domain.de
}
protocol lda {
  mail_plugins = " sieve"
}

Masace

(Themenstarter)

Anmeldungsdatum:
15. November 2017

Beiträge: 16

Ohmann schön blöd, habe den Fehler gefunden dank doveconf -n...

auth_username_format = %n

Wenn man sich die Doku dazu mal anschaut, steht da, dass bei %n die Domain hinten weggeschnitten wird... Habe die Zeile mal auskommentiert und jetzt klappts wunderbar, vielen Dank!

misterunknown Team-Icon

Ehemalige
Avatar von misterunknown

Anmeldungsdatum:
28. Oktober 2009

Beiträge: 4403

Masace schrieb:

Dann solltet ihr dringend wieder einen Administrator einstellen. Der Betrieb eines Mailservers ist kein Kinderspiel, und gerade im Firmenumfeld ist ein funktionierender Mailserver Lebensgrundlage.

Angeblich ist der Herr Chef dabei jemanden zu suchen...

👍

Ohmann schön blöd, habe den Fehler gefunden dank doveconf -n...

Ja, wenn mal was mit dem Mailserver nicht so funktioniert wie erwartet, sind die beiden essentiellen Kommandos:

postconf -n
doveconf -n

... und natürlich die Logs. Ich setze den Thread mal auf gelöst.

Antworten |