Heute gibt es einen Artikel zu Dovecot, Postfix und die Anbindung an ein Active Directory via LDAP.
Verwendet habe ich Debian Jessie (da schon „bald“ stable) sowie Microsoft Windows Server 2012 R2.
Dovecot sollte in Version >=2.1 vorliegen, um Postfix müssen sich die wenigsten Gedanken machen. Ich denke, dass alle Distributionen eine Version ausliefern, die aktuell genug ist.
Ich gehe an vielen Stellen nicht so sehr ins Detail, wie es sich viele vielleicht wünschen. Besonders die allgemeine Konfiguration von Dovecot und Postfix lasse ich größtenteils aus oder erkläre sie einfach nicht weiter (sorry).
Ich denke, dass ich mit diesem Artikel viele offene Fragen zu Linux-Mailserver + Active Directory klären- oder zumindest in die richtige Richtung stoßen kann.
Die Syntax sieht ab und zu wild aus, ist aber gar nicht so schwer. Es braucht einfach etwas Zeit.
Seid mir nicht böse, dass auf den Screenshot „dc=debinux“ und nicht „dc=domain“ zu sehen ist… ;-)
Was in diesem Setup ebenso möglich ist, ist das Erstellen von Gruppen innerhalb der OU „People“ (im Verlauf beschrieben…) mit einer E-Mailadresse, deren Mitglieder diese Mails empfangen.
Eine Quota wird ebenso mit einem (benutzerdefiniertem) Attribut aus dem Active Directory ausgelesen.
Changelog
- 03. Dez 2014 – Caching von Login-Daten, wenn LDAP offline für 5 Minuten
Vorbereitungen
In meinem Active Directory erstelle ich einen Account für den LDAP-Bind vom Mailserver zum AD, den DN („Distinguished Name“) notiere ich mir:
Der „Distinguished Name“ lautet also:
CN=Dovecot Administrator,OU=ServiceAccounts,DC=domain,DC=local
Als nächstes benötige ich ein eigenes Attribut „quotaBytes“, welches global für alle Benutzer zur Verfügung stehen soll.
Im Technet ist verständlich beschrieben, wie ich ein eigenes Attribut in ein AD einpflege:
Meine Benutzer lege ich in der OU „People“ ab.
Auf Seite des Linux-Servers werden folgende Pakete installiert:
apt-get install dovecot-ldap dovecot-imapd postfix-ldap
Postfix wird nach dem Standort/der Art des Servers fragen, eure Auswahl spielt keine Rolle, da die Konfiguration später sowieso gelöscht wird.
Sollten während der Dovecot-Installation Fehler auftreten, liegt das einfach am fehlenden Zertifikat für SSL und ist überhaupt kein Problem.
Die entsprechende Konfigurationsdatei kann gelöscht- und die Pakete erneut installiert werden:
rm /etc/dovecot/conf.d/10-ssl.conf apt-get install dovecot-ldap dovecot-imapd
Bevor ich fortfahre, erstelle ich den Benutzer „vmail“ mit der UID 5000 und die Gruppe „vmail“ mit der GID 5000.
Dovecot wird später (im Verlauf) angewiesen, seine Privilegien auf diesen User zu reduzieren, nachdem die Authentifizierung erfolgreich war.
Mail soll im Verzeichnis „/var/vmail“ liegen, welches das Heimverzeichnis des Users „vmail“ wird:
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/vmail mkdir /var/vmail chown vmail:vmail /var/vmail
Dovecot
Der Übersichtlichkeit wegen, lösche ich alle Beispiel-Konfigurationsdateien:
rm -r /etc/dovecot/*
Für eine Kopplung von Dovecot zum AD, habe ich folgende LDAP-Konfiguration erstellt.
Hinter den Optionen einige Erklärungen:
nano /etc/dovecot/dovecot-ldap.conf.ext
Der Inhalt:
hosts = 192.168.99.1 # Windows Active Directory dn = CN=Dovecot Administrator,OU=ServiceAccounts,DC=domain,DC=local dnpass = MeinPasswortDesServiceAccounts tls = no # Benötige ich (!) nicht auth_bind = yes # Für die Dauer der Authentifizierung bindet sich Dovecot als einloggender Mailuser ldap_version = 3 base = OU=People,DC=domain,DC=local # Meine OU mit Benutzern scope = subtree # Oder "base", falls nicht rekursiv in der OU gesucht werden soll user_attrs = \ =quota_rule=*:bytes=%{ldap:quotaBytes}, \ =home=/var/vmail/%d/%{ldap:sAMAccountName}, \ =mail=maildir:/var/vmail/%d/%{ldap:sAMAccountName}/Maildir user_filter = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) # Nur Personen, nur nicht-deaktivierte, nur mit Mail-Attribut pass_filter = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) # Nur Personen, nur nicht-deaktivierte, nur mit Mail-Attribut iterate_attrs = mail=user # Wird vor allem von "doveadm" benötigt, um Benutzer zu finden iterate_filter = (objectClass=person)
Zu „user_attrs“:
– Die „quota_rule“ muss im AD nicht in Byte angegeben werden, auch möglich sind Werte wie „100M“ oder „2G“.
– Der Parameter „home“ ist das Heimverzeichnis des Mailusers. Dieses sollte niemals dem Mailverzeichnis entsprechen.
– Jedoch können „home“ und „mail“ zwei komplett unterschiedliche Verzeichnisse sein.
Ich entscheide mich „mail“ innerhalb von „home“ abzulegen. Zum besseren Verständnis:
Home: /var/vmail/domain.tld/user.name
Mail: /var/vmail/domain.tld/user.name/Maildir
Abschließend die Datei vor fremdem Zugriff schützen:
chown root: /etc/dovecot/dovecot-ldap.conf.ext ; chmod 600 /etc/dovecot/dovecot-ldap.conf.ext
Hier nun im nächsten Schritt eine simple „dovecot.conf“-Vorlage.
nano /etc/dovecot/dovecot.conf
auth_mechanisms = plain login mail_uid = vmail mail_gid = vmail ssl_cert = </etc/ssl/mail.crt ssl_key = </etc/ssl/mail.key login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k" mail_plugins = quota ssl_protocols = !SSLv3 !SSLv2 ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA log_timestamp = "%Y-%m-%d %H:%M:%S " protocols = imap listen = * auth_cache_size = 50000 # ~ 200 Benutzer mit Passwort auth_cache_ttl = 300 # in Sekunden, 5 Minute auth_cache_negative_ttl = 30 # wenn Benutzer nicht existierte bei letztem Check userdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } passdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } service auth { unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-userdb { mode = 0600 user = vmail } user = root } service dict { unix_listener dict { mode = 0660 user = vmail group = vmail } } namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { auto = subscribe special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = } protocol imap { mail_plugins = quota imap_quota } plugin { quota = maildir:User quota }
In dieser Konfiguration wird es lediglich IMAP- und die Möglichkeit der Quota-Nutzung geben. Die üblichen Verzeichnisse/“Mailboxen“ werden beim Einloggen erstellt.
Erwähnenswert ist der Socket innerhalb von „service dict“, welcher verständlicherweise als „vmail“ gestartet werden muss.
„service auth“ wird den Socket für Postfix bereitstellen, über den sich dieses dann authentifizieren kann. Daher ist der Pfad innerhalb der „chroot“-Umgebung „/var/spool/postfix“ und ausgeführt als postfix:postfix.
Dass „ssl_cert“ und „ssl_key“ anzupassen sind, brauche ich keinem zu sagen. :)
Postfix
Wieder eine sehr einfache Vorlage für die Konfiguration der Datei „/etc/postfix/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}
In letzten beiden Zeilen wird die Übergabe der Mail an Dovecot beschrieben. Ansonsten wurde lediglich der „submission“ Port 587/tcp aktiviert. Hier muss ich mit STARTTLS eine sichere Verbindung initiieren.
Für den Listener auf Port 25 wird dies optional ebenso möglich- aber nicht notwendig sein.
Nun zur Datei „/etc/postfix/main.cf“.
nano /etc/postfix/main.cf
Der Inhalt:
smtpd_banner = $myhostname biff = no inet_protocols = ipv4 append_dot_mydomain = no readme_directory = /usr/share/doc/postfix smtpd_tls_cert_file = /etc/ssl/mail.crt smtpd_tls_key_file = /etc/ssl/mail.key smtpd_tls_security_level=may smtp_tls_cert_file = /etc/ssl/mail.crt smtp_tls_key_file = /etc/ssl/mail.key smtp_tls_security_level=may smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_auth_only = yes smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_ciphers=high tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA smtpd_tls_eecdh_grade = strong myhostname = hostname.domain.tld # zum Beispiel mail.domain.tld alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = hostname.domain.tld localhost # Hier darf AUF KEINEN FALL eine virtuelle Domäne stehen! relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all disable_vrfy_command = yes smtpd_helo_required = yes smtpd_sasl_type=dovecot smtpd_sasl_path=private/auth_dovecot smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, reject_unknown_sender_domain, permit_sasl_authenticated smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_rbl_client zen.spamhaus.org, reject_unauth_destination, reject_unknown_reverse_client_hostname, smtpd_data_restrictions = reject_unauth_pipelining, permit virtual_mailbox_base = /var/vmail/ virtual_alias_domains = virtual_minimum_uid = 104 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_transport = dovecot html_directory = /usr/share/doc/postfix/html sender_bcc_maps = recipient_bcc_maps = relay_domains = relay_recipient_maps = smtpd_sasl_local_domain = domain.tld # Wird angehangen, wenn keine Domäne angegeben wurde virtual_mailbox_domains = domain.tld # Alle virtuellen Domänen smtpd_sender_login_maps = proxy:ldap:/etc/postfix/ldap/sender_login_maps.cf virtual_mailbox_maps = proxy:ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf virtual_alias_maps = proxy:ldap:/etc/postfix/ldap/virtual_group_maps.cf dovecot_destination_recipient_limit=1 # Notwendig für die Gruppenfunktion
Obiges ist wieder nur eine Vorlage, welche ich zum Teil bei fufix abgeguckt habe. Natürlich ohne MySQL Proxymaps.
Unbedingt anpassen: myhostname, mydestination, smtpd_sasl_local_domain, virtual_mailbox_domains
Der Inhalt der Proxymaps lautet wie folgt:
1. – /etc/postfix/ldap/sender_login_maps.cf
nano /etc/postfix/ldap/sender_login_maps.cf
Inhalt:
server_host = 192.168.99.1 server_port = 389 version = 3 bind = yes start_tls = no bind_dn = CN=Dovecot Administrator,OU=ServiceAccounts,DC=domain,DC=local bind_pw = MeinPasswortDesServiceAccounts search_base = OU=People,DC=domain,DC=local scope = sub query_filter = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) result_attribute= mail
2. – /etc/postfix/ldap/virtual_group_maps.cf
nano /etc/postfix/ldap/virtual_group_maps.cf
Inhalt:
server_host = 192.168.99.1 server_port = 389 version = 3 bind = yes start_tls = no bind_dn = CN=Dovecot Administrator,OU=ServiceAccounts,DC=domain,DC=local bind_pw = MeinPasswortDesServiceAccounts search_base = OU=People,DC=domain,DC=local scope = sub query_filter = (&(objectClass=group)(mail=%s)) leaf_result_attribute = mail special_result_attribute = member result_attribute= mail debuglevel = 0
3. – /etc/postfix/ldap/virtual_mailbox_maps.cf
nano /etc/postfix/ldap/virtual_mailbox_maps.cf
Inhalt:
server_host = 192.168.99.1 server_port = 389 version = 3 bind = yes start_tls = no bind_dn = CN=Dovecot Administrator,OU=ServiceAccounts,DC=domain,DC=local bind_pw = MeinPasswortDesServiceAccounts search_base = OU=People,DC=domain,DC=local scope = sub query_filter = (&(mail=%s)(objectclass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))) result_attribute= mail result_format = %d/%u/Maildir/ debuglevel = 0
Die neuen Proxymaps bitte noch absichern vor fremden Zugriff:
chmod 744 /etc/postfix/ldap/*
Abschließend noch ein paar Worte zu den obigen Proxymaps. Vieles kann jedoch aus der Dovecot-Konfiguration abgeleitet werden.
Der „query_filter“ ist, logisch, ein Filter für die Suche, zum Beispiel:
(&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
Hier würde nach Personen gesucht mit der Mailadresse „%s“, die nicht deaktiviert sind („userAccountControl:XYZ“).
Alles muss zutreffen, daher der Operator „&“ gleich zu Beginn. Es gibt viele verschiedene Operatoren und Active Directory-spezifische Filter.
Der Parameter „result_attribute“ ist der Wert, der zurück gegeben wird. Er kann leer sein, wenn kein Treffer erzielt wurde.
Pingback: OpenLDAP in Dovecot und Postfix zum Login nutzen - Gurkengewuerz
Jetzt haben wir 2019 und Deine Anleitung ist felsenklar. Zwar für den Anfänger, vermutlich, nicht direkt durchschaubar, aber für jemanden der bereits hier und da was gemacht hat, eine super Zeitbrücke. Es macht Spaß mit Deiner Anleitung. Vielen Dank :)
In case someone gets the error message: Server is unwilling to process the request, while creating an attribute.
For you guys that setup an AD DC with Samba 4. In order to be able to create Attributes, there is one additionally thing we need to write in /etc/samba/smb.conf.
Add into [Global] this line:
dsdb:schema update allowed=true
After that, restart the samba-ad-dc service to activate the changes.
Hallo,
ich weiss die Anleitung ist nicht mehr taufrisch, aber die bisher beste und strukturierteste die ich gefunden hatte.
Leider ist die Anleitung wohl nicht mehr komplett.
Mir scheint als würde die Beispielkonfiguration der dovecot.conf fehlen :(
Kannst du das evtl nochmal fixen?
Hi, kannst Du die Dovecot Beispielconfig noch einmal reinkopieren. Die scheint irgendwie abgeschnitten zu sein.
Danke & Gruß
Eine Frage noch zur dieser Konfiguration.
Die Postfächer werden nach diesem Setup erst nach dem ersten Einloggen angelegt. So spuckt mir Postfix beim Testen, das der Benutzer unbekannt wäre, aus. Kann dies trotz ohne Interaktion des Benutzers angeschoben werden?
Erstmal Danke für das gute Tutorial!
Ich nutze einen Ubuntu-Server als Mail-Server. Hatte mich erst an diese Anleitung gehalten:
http://www.my-it-brain.de/wordpress/der-eigene-mailserver-start-der-artikelreihe/
Als ich die ersten Benutzer anlegen wollte, empfand ich den Weg alles über das Terminal zu machen sehr mühsam, vor allem wenn es über 1000 Postfächer später mal werden sollen. Daher fand ich die Authentifizierung über ein AD sehr erleichtern. Beim Testen von Postfix, spuckte mir die Konsole aber folgende Fehler aus:
● postfix.service – LSB: Postfix Mail Transport Agent
Loaded: loaded (/etc/init.d/postfix; bad; vendor preset: enabled)
Drop-In: /run/systemd/generator/postfix.service.d
└─50-postfix-$mail-transport-agent.conf
Active: active (running) since Fr 2017-04-21 15:24:29 CEST; 3 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 7
Memory: 4.8M
CPU: 15.217s
CGroup: /system.slice/postfix.service
├─11415 /usr/lib/postfix/sbin/master
├─11427 qmgr -l -t unix -u
├─19257 tlsmgr -l -t unix -u -c
├─29436 trivial-rewrite -n rewrite -t unix -u -c
├─29438 pickup -l -t unix -u -c
├─29439 cleanup -z -t unix -u -c
└─30540 proxymap -t unix -u
Apr 25 10:17:11 mail postfix/cleanup[29439]: F2A904840402: message-id=
Apr 25 10:17:11 mail postfix/proxymap[30540]: warning: dict_ldap_lookup: Search error -7: Bad search filter
Apr 25 10:17:11 mail postfix/cleanup[29439]: warning: proxy:ldap:/etc/postfix/ldap/virtual_group_maps.cf lookup error for \“xxx@xxx.de\“
Apr 25 10:17:11 mail postfix/cleanup[29439]: warning: F2A904840402: virtual_alias_maps map lookup problem for xxx@xxx.de — message not accepted, try again later
Apr 25 10:18:12 mail postfix/pickup[29438]: warning: 001894840402: message has been queued for 3 days
Apr 25 10:18:12 mail postfix/pickup[29438]: 001894840402: uid=1000 from=
Apr 25 10:18:12 mail postfix/cleanup[29439]: 001894840402: message-id=
Apr 25 10:18:12 mail postfix/proxymap[30540]: warning: dict_ldap_lookup: Search error -7: Bad search filter
Apr 25 10:18:12 mail postfix/cleanup[29439]: warning: proxy:ldap:/etc/postfix/ldap/virtual_group_maps.cf lookup error for \“xxx@xxx.de\“
Apr 25 10:18:12 mail postfix/cleanup[29439]: warning: 001894840402: virtual_alias_maps map lookup problem for xxx@xxx.de — message not accepted, try again later
Laut Fehlermeldung hat er ein Problem mit den query_filter. Könnten Sie mir einen Denkanstoß geben, wo der Fehler liegt?
Meine Konfig:
virtual_group_maps.cf
server_host = 192.168.x.x
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = CN=Dovecot Admin,OU=Dienstkonten,DC=x,DC=x
bind_pw = xxx
search_base = OU=Benutzerkonten,DC=x,DC=x
scope = sub
query_filter = (&(mail=%s)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
result_attribute = mail
result_format = %d/%u/Maildir/
debuglevel = 0
Viele Grüße! Und Vielen Dank für Ihr Feedback!
hat sich erstmal erledigt, habe den Fehler gefunden. Einfach nur ein Schusselfehler ;-)
Pingback: Migration eines Windows Server auf Linux | Homepage
Hi André,
vielen Dank für die ausführliche und gut nachvollziehbare Anleitung, hat mir sehr geholfen.
Ich bin gerade bei der Umstellung auf ein Active Directory und habe jetzt den Stand erreicht dass ich von einem PC in der Domäne den neu installierten Mail-Server verwenden kann. Thunderbird authentifiziert sich dabei über SSL/TLS mit unverschlüsseltem Password. Es ist mir bisher noch nicht gelungen, eine der anderen Authentifizierungsmethoden (Kerberos oder NTLM) zum funktionieren zu bekommen. Möglicherweise etwas off-topic, aber hättest Du vielleicht einen Tipp dazu? Ziel ist single-sign-on…
Vielen Dank
Michael
Hi Michael,
leider noch nicht selber implementiert, aber schon das ein oder andere zu gelesen. Aber auch nur in Mailing Lists und im Dovecot Wiki.
Kannst uns ja mal up-to-date halten, wenn du Fortschritte machst. :-)
Viele Grüße
André
Hallo,
ich finde Deinen Beitrag wirklich genial und sitze grad daran ihn umzusetzen um daraus ein kleines Mailsystem für unsere Hochschule zu basteln.
Mag sein, dass ich da grad etwas auf dem Schlauch stehe, aber irgendwie sehe ich die Angaben für das Quota-Attribut im AD nicht. Mir ist klar, dass dort die Mailboxgröße gespeichert werden soll und es wahrscheinlich Integer sein soll, ganz sicher bin ich mir jedoch nicht.
Liebe Grüße
Patrick
Der letzten Teil des Tutorials wirft bei mir Probleme auf. Beim Versuch eine Mail zu empfangen sucht Postfix in der AC nach einem passenden Account für die Empfängeradresse. Allerdings LDAP laut den logs keinen passenden Account. Ersetzt man den lookup in der AC durch einen einfachen lokalen lookup (‚virtual_mailbox_maps = hash:/etc/postfix/vmailbox‘ mit einer passenden vmailbox Datei) funktioniert alles reibungslos.
Jemand eine Idee woran es liegen könnte?
Hi,
dazu bitte auf jeden Fall deine „virtual_mailbox_maps“ posten und die Angaben, gegen was du abfragst. Im Artikel ist es das Attribut „mail“. Prüfst du evtl. gegen den sAMAccountName? Was loggt Postfix? (Auch mal das Debugging einschalten.)
Ein Hinweis zum schnelleren Testen der LDAP-Abfrage:
Viele Grüße
André
Hallo,
vielen Dank für die schnelle Antwort!
Vom Aufbau her habe ich es so gemacht, dass neue Mails im Ordner /var/vmail/username/inbox gespeichert werden. Das Auflösung beim Empfangen einer Mail von der Mailadresse zum passenden Ordner würde mit folgender vmailbox Datei einwandfrei funktionieren:
/etc/postfix/vmailbox
username1@mydomain.de username1/inbox
username2@mydomain.de username2/inbox
username3@mydomain.de username3/inbox
Wenn ich nun auf LDAP Auflösung umstelle und versucht eine Mail von einem kommerziellen Provider an mich zu senden kommt folgende Meldung in /var/log/mail.info (→ LDAP scheint die Mailadresse nicht in seinem Verzeichnis zu finden):
Apr 10 10:24:40 debian postfix/smtpd[2343]: connect from mout.gmx.net[212.227.17.20]
Apr 10 10:24:40 debian postfix/smtpd[2343]: NOQUEUE: reject: RCPT from mout.gmx.net[212.227.17.20]: 550 5.1.1 : Recipient address rejected: User unknown in virtual mailbox table; from= to= proto=ESMTP helo=
Apr 10 10:24:40 debian postfix/smtpd[2343]: disconnect from mout.gmx.net[212.227.17.20]
Die dict_ldap_debug Logzeilen habe ich der übersichtlichkeit des Kommentars hier hinterlegt:
https://www.dropbox.com/sh/bxhgjbjgredccky/AACiaS7fM0gLgXywxCwWLZOia?dl=0
hier die Ausschnitte aus meinen Konfigdateien:
/etc/postfix/main.cf
…
virtual_mailbox_domains = mydomain.de
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = ldap:/etc/postfix/ldap/virtual_mailbox_maps.cf
#virtual_mailbox_maps = hash:/etc/postfix/vmailbox #für die Variante mit vmailbox Datei
virtual_minimum_uid = 1000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
…
/etc/postfix/ldap/virtual_mailbox_maps.cf
server_host = 192.168.178.35
server_port = 389
version = 3
bind = yes
start_tls = no
bind_dn = cn=postfix,ou=ServiceAccounts,dc=mydomain,dc=de
bind_pw = ldappasswort
search_base = ou=people,dc=mydomain,dc=de
scope = sub
result_attribute = mail
result_format = %u/inbox/
debuglevel = 3
Und zum Schluss noch ein Beispielnutzer aus meinem LDAP Verzeichnis:
dn: uid=username,ou=people,dc=mydomain,dc=de
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: Username
gidNumber: 5000
homeDirectory: /var/vmail/username
sn: Username
uid: username
uidNumber: 5000
displayName: Username
givenName: Username
mail: username@mydomain.de
userPassword:: usernamepassword
Vielen Dank für die Hilfe im Voraus!
Noname
Hi,
hui – viele Infos, sehr gut, danke! :-)
Das ist ein OpenLDAP, oder? Da ist es ein bissl anders als beim AD:
Hier mal auf die Schnelle angepasste Queries:
Postfix Queries
Dovecot Queries
Da fehlt natürlich jetzt die Anweisung für die Quota, da deine User scheinbar kein Quota-Attribut haben. Ist nicht schlimm, wollte es nur anmerken. :-)
Vielleicht klappt es ja schon so. Ansonsten habe ich nur einen blöden Flüchtigkeitsfehler gemacht. Könnte aber gerne auch mal drauf schauen.
Viele Grüße
/Edit: Es fehlten Klammern.
/Edit2: Typo…
Ja, ich benutze OpenLDAP und habe die Quota Regelung erstmal außen vor gelassen.
Mit deinen Hinweisen konnte ich das Problem lösen:
Ich hatte vorher die Filterregel query_filter weggelassen da mein LDAP Verzeichnis zu testzwecken nur mit einigen Testaccounts bestückt war bei denen kein Account gefiltert werden musste. Leider versteht Postfix es falsch wenn man das Attribut query_filter einfach komplett rauslässt und filtert wohl alles heraus.
Mit der Zeile „query_filter = (&(mail=%s)(objectclass=inetOrgPerson))“ empfängt nun Postfix Mails von Usern die sich in meinem LDAP Verzeichnis befinden und sich mindestens einmal über IMAP angemeldet haben (sonst existiert kein Ordner in /var/vmail/).
Vielen Dank für deine Hilfe, ich hab nun endlich Mein Traumserversetup vollständig!
…bei meinen Konfigs oben hat sich ein Fehler eingeschlichen, die Inbox sollte nicht im Maildir-Format gespeichert werden:
/etc/postfix/ldap/virtual_mailbox_maps.cf
…
result_format = %u/inbox #ohne abschließenden „/“
…
I’m not quite sure how to say this; you made it exlremety easy for me!