Postfix: IPv6 oder IPv4?

Postfix: IPv6 oder IPv4?

Mal wieder ein Problem zum Thema Email und Postfix. Neulich erst SMTPUTF8, jetzt wieder etwas was sich der Admin vor Ort nach Erklärungen und Lösungen sucht.

Fortune hat einmal zu mir folgendes gesagt:

The light at the end of the tunnel may be an oncoming dragon.

Für alle diejenigen die fortune nicht kennen: https://de.wikipedia.org/wiki/Fortune_(Computerprogramm).

Achtung!

Man sollte natürlich richtig prüfen, ob die IPv6 Auflösung eventuell sogar wirklich ein Problem hat. Da die Frage aufkam hier das grobe Vorgehen dazu: In der Fehlermeldung steht eine IPv6 Adresse drin. Diese per Reverse-DNS auflösen. Der Rechnername, der hierbei raus kommt sollte via Forward-DNS wieder zur gleichen IPv6 Adresse führen. Unterm Strich genauso, wie es auch für IPv4 der Fall sein sollte. Bitte dran denken. Nur wenn das alles passt und immer noch nichts hilft, dann kann dieses vorgehen wie hier beschrieben eine sinnvolle Variante sein.

Das Spiel beginnt

Bevorzugt kommen solche Fragen ja immer am spätem Nachmittag rein. Mal wieder das Thema Email. Mal wieder auf den ersten Blick dubios: Angeblich kann ein Emailserver keine Mails an eine bestimmte Empfangsdomain senden. Als Grund wird der fehlende Reverse DNS-Eintrag angegeben. Dieser ist aber gesetzt. So auf die schnelle passt hier irgendwas nicht zusammen, der detailliertere Blick ins Protokoll muss her. Hier findet sich folgendes - stark gekürzt und anonymisiert. Du weißt schon, Datenschutz und so 😉

May  7 14:12:37 methusalix postfix/smtp[587]: 0D2B11E0027: to=<emfp@aeng.er>, relay=mail.gatew.ay[1.1.1.1]:25, delay=0.57, delays=0.02/0.01/0.33/0.21, dsn=2.0.0, status=sent (250 OK id=1hNyxZ-00061t-DZ)
May  7 14:12:37 methusalix postfix/smtp[587]: 9600B1E0028: to=<emfp@aeng.er>, relay=mail.gatew.ay[1.1.1.1]:25, delay=0.35, delays=0.01/0/0.22/0.12, dsn=2.0.0, status=sent (250 OK id=1hNyxZ-00068z-RW)
May  7 14:13:23 methusalix postfix/smtp[587]: EAE621E0028: to=<emfp@aeng.er>, relay=mail.gatew.ay[1.1.1.1]:25, delay=0.4, delays=0.01/0/0.21/0.18, dsn=2.0.0, status=sent (250 OK id=1hNyyJ-0007Tp-6X)
May  7 14:55:19 methusalix postfix/smtp[6340]: A672D1E0027: to=<emfp@aeng.er>, relay=mail.gatew.ay[1.1.1.1]:25, delay=0.65, delays=0.01/0/0.5/0.14, dsn=2.0.0, status=sent (250 OK id=1hNzct-0006QR-6i)
May  7 15:13:07 methusalix postfix/smtp[8811]: 6C1A31E0027: to=<emfp@aeng.er>, relay=mail.gatew.ay[1:1:1:1::1:1]:25, delay=0.39, delays=0.03/0.01/0.32/0.03, dsn=5.0.0, status=bounced (host mail.gatew.ay[1:1:1:1::1:1] said: 550-Inconsistent/Missing DNS PTR record (RFC 1912 2.1) 550 (methusalix.doma.in) [1:1:1:1::1]:44636 (in reply to RCPT TO command))

Aha... 4x geht es und einmal nicht. Was bei dem einen Versuch anders ist? Der war per IPv6, die anderen via IPv4. Ok, das mag ja jetzt sein: Reverse-DNS für IPv4 gesetzt, für IPv6 schlichtweg vergessen. Fix via host-Befehl im DNS abgefragt auf die IPv6 Adresse die laut Log keinen Reverse Eintrag haben soll: Oh wunder, der ist richtig auflösbar. Ab jetzt wird es seltsam. Aber wie so oft: Erstmal muss eine Lösung her. Die Suche nach der Ursache wird mal wieder hinten angestellt.

Also gut, das hier ist ganz klar ein Fall für den Blick in die Postfix Dokumentation bzw. in die aktuelle Konfiguration.

Recent Postfix SMTP clients randomly select between IPv4 and IPv6 so that mail won't get stuck when one of the two is down.

Wietse Zweitze Venema
Programmierer und Physiker

smtp_address_preference = any ist wie es sich gehört richtig gesetzt. Das macht so einfach mit am meisten Sinn und wird in der Dokumentation letztendlich genauso empfohlen. inet_protocols brauche ich gar nicht zu kontrollieren, muss auf any stehen. Sonst hätte es gar nicht die beiden unterschiedlichen Zustellvarianten geben dürfen. Um jetzt zu verstehen was da passiert sollte man die Doku kennen oder sich an das im Block links angeführte Zitat von Wietse erinnern.

Somit ist die Lösung für dieses Rätsel fix gefunden: Für diese eine Empfangsdomain sollte der Emailausgang ausschließlich auf IPv4 festgelegt werden. Nur kennt Postfix keine inet_protocol_map in der man dies festlegen könnte. Es ist also mal wieder die Frage nach etwas Kreativität um eine passende Lösung mit Postfix Mitteln entsprechend abzubilden.

Und der Weg zum Ziel ist unterm Strich mal wieder ganz einfach: Man definiert in der master.cf einen weiteren smtp Dienst welcher als Option das oben bereits erwähnte inet_protocols = ipv4 hat. Im zweiten Schritt noch fix einen passenden Eintrag für die Zieldomain in der transport Tabelle gesetzt welche genau diesen Dienst verwendet und voilà: Ziel erreicht.

Die Umsetzung

Die folgenden Beispiele zeigen an reinen Textdateien unter /etc/postfix die passende Konfiguration für die Empfängerdomain gehirn-mag.net. Wer dort bereits eine transport-Tabelle hat kann diese selbstverständlich nutzen. Wer ein Datenbank- oder LDAP-Backend hat kann diese Lösung sinngemäß übertragen. Hier aber, der Einfachheit wegen, das Beispiel an den "blanken" Textdateien. Und Du solltest logischerweise die Empfängerdomain richtig anpassen 🙂

Die erste Datei die geändert wird ist /etc/postfix/master.cf. Hier wird ein weiterer Dienst eingetragen. Eine Zeile analog zur ersten gibt es bereits. Wichtig ist, dass zu Beginn am Anfang und am Ende smtp steht und kein smtpd. Diese kopiert ihr, ändert den Namen (Zeile 2, Spalte 1) und fügt darunter den Inhalt der Zeile 3 ein.

Als nächstes ist /etc/postfix/main.cf dran. Hier ist zu prüfen ob es eine transport_maps Zeile gibt. Falls nicht fügt Ihr diese einfach ein.

Und zu guter Letzt ist die transport Tabelle /etc/postfix/transport selbst. Hier ist der Eintrag für die Zieldomain zu setzen, dass diese unseren neuen IPv4 smtp Dienst verwendet.

smtp      unix  -       -       y       -       -       smtp
smtp-ipv4 unix  -       -       y       -       -       smtp
    -o inet_protocols=ipv4
transport_maps = hash:/etc/postfix/transport
gehirn-mag.net           smtp-ipv4:

Nun müsst Ihr noch via postmap /etc/postfix/transport diese für postfix übersetzen und mit postfix reload den Mailserver neu starten. Postfix versendet nun für Eure Zieldomain alle Mails dorthin via IPv4 anstatt frei zu wählen was er jetzt verwenden könnte.

Und fertig!

Was eine Lösung. Ist das wirklich elegant gemacht auf diese Art und Weise? Ja, das ist Sie. Auf ihre ganz spezielle Art. Einen eigenen Dienst in der master.cf anzulegen macht man eigentlich öfters. Am häufigsten wohl als Ziel für irgendwelche Postfachsysteme wie IMAP/POP3 oder Groupware-Systeme. Wenn man diese externe Domain mit der sinngemäßen gleichen Logik betrachtet ist das schon sehr ähnlich: Ein Postfachspeicher welcher Emails via SMTP annimmt und obwohl er eine IPv6 Adresse hat kann der Dienst aber nur IPv4. Ich betreue Postfix Umgebungen bei denen aufgrund von der Vielzahl und der Größe der dahinter liegenden Groupware Lösungen die transport-Tabelle länger ist bei vielen anderen Installationen die virtual-Tabelle. Da erlebt man noch ganz andere Dinge...

In größeren Emailumgebungen ist man gefühlt nie am Ende mit der Konfiguration angekommen. Man mag sich in dem zu Beginn angesprochenen Tunnel fühlen. Sobald die Ursache aber sauber erfasst wurde ist die Lösung des Problems rasch erledigt und das Ende des Tunnels naht. Bis zum nächsten Anruf 😉

Aber morgen kontaktiere ich erstmals den Emailadmin auf der anderen Seite und frage nach den Gründen für diese Fehlermeldung - Feierabend für heute.

Quellen

  • GNU Bild: Wikimedia - kann aber genauso gut auf gnu.org direkt gezogen werden
  • Wietse Bild: Wikimedia - public domain
Das xn--mrchen-bua vom Punycode…

Das xn--mrchen-bua vom Punycode…

Ich erzähl euch mal eine kurze Geschichte: Heute am späten Nachmittag ereilte mich der Hilferuf eines befreundeten Emailadmins. Einer seiner Mailserver, zugegen einer auf dem recht wenig los ist, nimmt keine Emails mehr an. "Relay Access Denied" steht da im syslog drin. Ok, etwas genauer darauf geschaut: Das trifft nur auf die Emails zu die von Gmail kommen. Alles andere, wenn mal was vorbei kommt, läuft "richtig" durch. Eine Besonderheit der Empfangsdomain: IDN, Punycode, SMTPUTF8 und kein ASCII. Oder, ganz anders ausgedrückt "German umlaut in the domain name". Seit RFC-6530...6533 soll das ja kein Thema mehr sein. Siehe z.B. hier: https://tools.ietf.org/html/rfc6531 - das ist wohl das RFC wo der interessanteste Teil zu den Grundlagen von SMTPUTF8 drin steht.
 
In der Postfix-Doku ist ganz gut erklärt warum Postfix sich schwer damit tut zu erahnen ob eine Domain jetzt UTF8 oder ASCII ist und was das für Seiteneffekte mit sich ziehen kann. Siehe hierzu http://www.postfix.org/SMTPUTF8_README.html#detecting sowie die darauf folgenden Abschnitte. Unterm Strich sollte das aber keine große Hürde darstellen - mag man meinen.
 
Per telnet fix nachgeschaut:
telnet <bla.blubb> 25
Trying 253.254.255.256..
Connected to <bla.blubb>.
Escape character is '^]'.
220 <bla.blubb> ESMTP Try me, beat me!
ehlo duda
250-<bla.blubb>
250-PIPELINING
250-SIZE 31457280
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
quit
221 2.0.0 Bye
 
Alles gut, SMTPUTF8 steht mit drin. Und ja, im Postfix Log steht die Emailadresse je nach Modul mal als UTF8 oder als ASCII drin - siehe oben, der Link zum Readme. Aber irgendwie, Relay Access Denied. Trotz allem. Hm... Während die Gedanken sich so winden: Kleiner Online-Konverter gefällig mit dem der Titel dieses Textes zurück nach ASCII übersetzt werden kann? Bitte schön, gibt es hier: http://unicode.org/cldr/utility/idna.jsp. Aber zurück zum eigentlichen Thema, wir waren beim Hm... stehen geblieben. Dort läuft noch ein amavisd-new-milter. Ob der was damit zu tun haben kann? Laut https://www.ijs.si/software/amavisd/release-notes.txt nein, der soll alles richtg können (Achtung, bei dem Link hab ich gerade ein SSL-Zertifkatsfehler ignorieren müssen). Fix via telnet nachgeprüft - lief hier auf dem üblichem Amaivs-Port 10024: SMTPUTF8 taucht in der Liste erwartungsgemäß auf.
 
Bleibt noch der letzte Beteiligte in der Kette: Dovecot LTMP. Kann der mit SMTPUTF8 umgehen? Eine eindeutige Aussage dazu habe ich nicht gefunden. Also falls Ihr was finden solltet wo eindeutig drin steht "ja, das geht" oder "nein, das geht (noch?) nicht": Nur her damit!
 
Jetzt mal ernsthaft und das ganze Bild nochmals komplett betrachtet: Andere Emails kommen an. Und die haben kein Problem mit dem Umlaut in der Domain. Nur die von Gmail nicht. Ggf. auch noch von ein paar weiteren, da ist bloß bisher noch nichts aufgefallen. So muss Gmail hier als stellvertretendes Beispiel dienen. Was macht in diesem Falle hier Gmail anders als der Rest? Das Internet schweigt sich aus. Nur wenig lässt sich finden wo das exakt gleiche Problem beschrieben wird. Lösungen fehlen aber. Gefühlte tausende Logzeilen von Postfix im Debug Modus später und zwar das Problem immer weiter eingekreist auf das oben beschriebene aber keine Lösung gefunden. Doch Moment mal: Das Problem ist doch wohl der Natur, dass die Ursache im Umlaut, also SMTPUTF8 liegen muss. Es ist ja nun mal so, dass einige Emails ankommen obwohl die Domain einen Umlaut hat. Was ist wohl bei denen anders als bei denen die nicht ankommen? So langsam wird es zwingend logisch was bei denen anders sein muss. Na, schon die passende Idee dazu? Ich hab es einfach gleich mal ausprobiert und in die main.cf von Postfix folgendes eingetragen: "smtputf8_enable = no". Per telnet geprüft: SMTPUTF8 fehlt. Und siehe da: Die Emails von Gmail kommen an. Da jetzt kein SMTPUTF8 mehr angeboten wird übergibt Google die Mails in ASCII-Darstellung. Und schon klappt alles wie erwartet. Google scheint, wenn es die Gegenseite anbietet, doch tatsächlich SMTPUTF8 zu nutzen. Und ist damit wohl noch einer der wenigen die das so tun.
 
Freundlicherweise hab ich ja noch ein paar Appliances von namhaften Herstellern im Angebot wo man via telnet auf den SMTP-Port mal rasch prüfen kann was die so tun: Kein SMTPUTF8. Ok, die werden wohl wissen warum. Das weiß ich jetzt ebenfalls.
 
Aber irgendwie bleibt ein ungutes Gefühl bei der ganzen Sache. Die Durchdringung von Umlautdomains ist wohl doch noch nicht so weit wie man denken mag. Wirklich toll ist das nicht. Ich freue mich schon, oder auch nicht, wenn der erste Kunde kommt der bei diesem Mailhoster aus Redmond liegt. Wo dem Namen nach die Kunden das ganze Jahr lang jeden Tag im Büro verbringen. Und wenn dann dieser Kunde sagt er hat eine Umlaut-Domain: An dem Tag hab ich vermutlich Urlaub...
 
 
Einmal Emails in Kopano Unterordner bitte

Einmal Emails in Kopano Unterordner bitte

Kopano ist eine wunderbare Collaboration-Lösung welche mich schon seit vielen Jahren begleitet und welche ich bereits bei vielen zufriedenen Kunden erfolgreich installiert habe. Nur eins hat mich über die Jahre immer und immer wieder gestört: Benutzer werden per LDAP verwaltet, Berechtigungen, Adressbücher usw. ebenso. Nur die Zuordnung von Emailadressen an Ordner damit Mails an diese Adressen immer in den entsprechenden Ordner landen anstatt im Posteingang wird stiefmütterlich behandelt.

Lösungsansätze

Natürlich gibt es für dieses Problem mehrere Lösungsansätze. An dieser Stelle will ich verschiedene Lösungsansätze zeigen und diese mit einem kurzen für und wider gegeneinander stellen. Als Ausgangsbasis dient die in der Kopano Dokumentation beschriebene postfix Integration: https://documentation.kopano.io/kopanocore_administrator_manual/configure_kc_components.html?highlight=postfix#postfix-integration.

Du suchst die "ultimative" Lösung? Dann lies bitte sofort bei "Lösung 4" weiter. Du hättest gerne die Konfigurationen im Detail zu den Lösungen 1 bis 3.5? Dann melde Dich bei mir. Ich habe diese Details hier weggelassen um den Text nicht noch weiter aufzublähen.

Lösung 1: Regeln

In den Einstellungen der webapp oder deskapp können Regeln hinterlegt werden. Eine passende Regel sieht zum Beispiel so aus:

Falls die Nachricht enthält diese Wörter in den transport-headern "info@gehirn-mag.net" Folgende Aktion ausführen Nachricht in Ordner verschieben Gehirn-Mag.Net/Info

Damit die Emailadresse info@gehirn-mag.net bei mir überhaupt ankommt wird diese als kopanoAliases im LDAP eingetragen. Das funktioniert. Nur zentral verwaltet ist was anderes und da ich Fan vom LDAP bin finde ich dies wenig praktikabel. Zumal das für private Ordner ganz nett sein mag. Nur welchem Benutzer ordne ich so eine Regel sinnvoll zu wenn das Ziel ein öffentlicher Ordner sein soll? Nein, diese Lösung überzeugt mich nicht wirklich. Also auf geht es zur Lösung Nummer 2.

Details zu den Regeln gefällig? Die gäbe es hier: https://documentation.kopano.io/user_manual_webapp/settings.html#rules

Lösung 2: procmail

Die eierlegende Wollmilchsau Lösung. Mit procmail kann wirklich ein Regelwerk mit allem Schnick und Schnack erstellt werden. Ein Beispiel könnte wie folgt aussehen:

# Privat Einkaufen: Hibike, ...
:0H
* ^From:.*(newsletter@newsletter.*\\.hibike\\.com|news@news\\.bike-discount\\.de)
| /usr/bin/zarafa-dagent -p / -F "Posteingang/Newsletter/Einkaufen" steffen

Das Beispiel stammt noch aus Zeiten wo Kopano als Zarafa bekannt war und zeigt einen kurzen Einblick in meine privaten Hobbys. Aber egal, als Beispiel absolut ausreichend. Jetzt noch Postfix dazu gebracht, dass er die Mails für die im ersten Beispiel verwendete info@gehirn-mag.net Adresse an procmail übergibt oder falls fetchmail verwendet wird dort als mda eintragen. Egal, irgendwie die Mails an procmail übergeben. Wie ist hier nicht das Thema. Aber mal ehrlich: Hierfür muss ich eine Konfig-Datei im Dateisystem bearbeiten. Das ist ebenfalls nicht das was ich unter zentralem Management an einem Ort wie LDAP verstehe. Wenn ich schon Benutzer in LDAP verwalten tue, dann doch auch bitte mein Problem mit der Zustellung an Ordner.

Also das Fazit zur dieser Lösungsvariante: Toller Funktionsumfang. Was hier nicht mit einem Filter erfasst werden kann geht sonst auch nirgends. Falls die Emails von Dritten via POP3 oder IMAP abgeholt werden müssen hat dies Lösung im Zusammenspiel mit fetchmail einen ganz speziellen Charme. Aber: Eine Konfigurationsdatei anpassen zu müssen sobald sich was ändert ist nicht mein Ding. Nette Lösung, nur leider für mich alles andere als perfekt.

Lösung 3: Ein Hilfsskript verwenden

Bisher waren alle Lösungen noch weit von dem entfernt was ich Lösungsansatz via LDAP genannt hätte. Aber mit Zuhilfenahme von zusätzlichen Skripten lässt sich hier sicherlich was machen. Also fix los programmiert - die erste Fassung welche hierbei entstanden ist war fast so alt wie Zarafa selbst.

Der Gedanke dazu war wie folgt: Wenn die Email für einen öffentlichen Ordner an ein Skript übergeben wird kann dieses im LDAP nachschlagen in welchen Ordner die Email zu legen wäre. Das funktioniert, braucht aber zusätzliche Perlskripte. Ok, mit etwas Aufwand könnte man aus den zwei sicherlich eins machen. Ändert nichts daran, dass man zusätzliche Skripte braucht.

Ich habe die Skripte von damals noch auf die multi-tenancy Variante erweitert und unter https://gitlab.com/Gehirn-Mag.net/kopano-delivery-to-folders abgelegt.

Aber mal ehrlich: Das funktioniert zwar, aber der Aufwand ist hoch. Geht noch einfacher wie die folgenden Beispiele zeigen.

Zwischenlösung 3.5: Direkt in postfix

Naja, der Umweg über procmail mag viel Luxus bringen. Der über das eigene Skript die Möglichkeiten zu tun was man will. Nur braucht man dies nicht immer. kopano-dagent kann auch direkt aus postfix heraus gestartet werden. Das ist schlank, einfach und mehr braucht es in der Regel auch gar nicht.

# Info-Postfach
gehirnInfo unix - n n - - pipe
    flags=DORhu user=kopano:kopano argv=/usr/sbin/kopano-dagent admin@gehirn-mag.net -v -C -p / -F Gehirn/Info

Dies funktioniert wunderbar. Die Emailadresse admin@gehirn-mag.net muss es natürlich geben und diese muss im Ordner Gehirn/Info schreiben dürfen. Im LDAP leitet man die entsprechenden Adressen einfach nach gehirnInfo: um. Infos zum postfix pipe Prozess gibt es hier: http://www.postfix.org/pipe.8.html. Doch Moment: Das soll flexibel sein? Wohl eher nicht, der Zielpfad steht ja statisch in der master.cf mit drin. Und genau das ist der Haken an der Sache. Sollte es sich um eine "kleine" Installation handeln wo nur ein paar wenige Adressen in Ordner umgeleitet werden mag das absolut ausreichend sein. Sobald es aber mehr werden oder diese Umleitungen einer gewissen Dynamik unterliegen stößt diese Variante an Ihre Grenzen. Der Zwischenschritt ist dennoch gut und führt uns direkt zur perfekten Lösung welche sich mit minimalen Aufwand realisieren lässt.

Zuviel Log-Ausgaben im mail Log? Dann entferne das -v aus der Argumenten-Liste von kopano-dagent.

Lösung 4: Direkt in postfix mit Dynamik via LDAP

Noch mal schnell in die Doku von postfix pipe rein geschaut: "${nexthop} This macro expands to the next-hop hostname". Na das ist es doch! Also kurz die master.cf entsprechend anpassen.

# Kopano an public Ordner
kpublic unix - n n - - pipe
    flags=DORhu user=kopano:kopano argv=/usr/sbin/kopano-dagent admin@gehirn-mag.net -v -C -p / -P ${nexthop}

Das funktioniert ähnlich zur obigen Lösung unter 3.5. Nur steht als Zielordner hier das Makro ${nexthop} welches via LDAP als Wert nach "kpublic:" eingetragen wird. Auch hier sollte es die Emailadresse admin@gehirn-mag.net entsprechend mit den passenden Rechten für den Zielordner geben.

Dies funktioniert natürlich auch mit einem privaten Ordner. Dazu muss lediglich das -P durch ein -F ausgetauscht werden und die Emailadresse auf die des jeweiligen Benutzers getauscht werden. Aber Achtung: Für jeden Benutzer braucht man hier einen eigenen Eintrag in die master.cf von Postfix. Zu umständlich wenn wir es genau betrachten und somit in den Regeln des jeweiligen Kopano Benutzers besser aufgehoben.

Als LDAP-Schema verwende ich wieder das von Lösung 3: https://gitlab.com/Gehirn-Mag.net/kopano-delivery-to-folders/blob/master/sitsPostfixTable.ldif. Letztendlich kann man aber nehmen was man will bzw. ein anderes, unbenutztes Feld zweckentfremden.

dn: PTransSrc=offen@gehirn-mag.net,ou=Gehirn-Mag.Net,...
objectClass: sitsPostfixTransport
objectClass: top
PActive: TRUE
PTransDest: kpublic:Gehirn-Mag.Net/Offen
PTransSrc: offen@gehirn-mag.net

Die dazu passende LDAP Konfig Datei für postfix ldap.kopano-folders.conf:

#
# virtual LDAP Map for Kopano (PTransSrc für Ordner-Ablage)
#

server_host = ldap:///
start_tls = yes
search_base = ou=CharlieB.Schoch-IT.Solutions,dc=Schoch-IT,dc=Solutions
bind_dn = cn=postfix,...
bind_pw = ...

query_filter = (&(objectClass=sitsPostfixTransport)(PTransSrc=%s)(PTransDest=kpublic:*)(PActive=TRUE))
result_attribute = PTransDest

debuglevel = 0

Diese Datei muss dann noch in der main.cf von postfix den virtual mailbox maps hinzugefügt werden:

virtual_mailbox_maps =
  ldap:/etc/postfix/ldap.dovecot-virtual-users.conf,
  ldap:/etc/postfix/ldap.kopano-virtual-users.conf,
  ldap:/etc/postfix/ldap.kopano-folders.conf,
  ldap:/etc/postfix/ldap.kopano-groups.conf

Wie Du sehen kannst habe ich neben den Kopano-Benutzern auch noch die Gruppen aktiv und jetzt den Transport in den öffentlichen Ordner. Darüber hinaus gibt es bei mir auf diesem Server noch einen Dovecot für die reinen IMAP-Postfächer. Dieser Eintrag muss von Dir logischerweise sinnvoll angepasst werden.

Wie man dovecot und kopano-gateway auf der gleichen Adresse mit den gleichen Ports betreiben kann verrate ich Dir in einem der nächsten Blog-Beiträge 😉

Auf der Suche nach anderen Stellen im Internet die diesen Weg beschreiben habe ich die Doku von LECKERBEEFde gefunden. Zwar funktioniert die Homepage nicht mehr, aber den GitHub Eintrag gibt es noch: https://github.com/LECKERBEEFde/zarafa-deliver-mail-to-public-folder. Wie Du am Link erkennst bezieht sich diese Doku noch auf Zarafa. Das macht aber rein gar nichts, die lässt sich super einfach in Richtung Kopano umbauen. Und LECKERBEEFde verwendet ein Windows Active Directory. Da er sich nicht die Mühe gemacht hat ein spezielles Schema zu erstellen tut er, wie angesprochen, ein vorhandenes Feld für seine Zwecke "verwenden". Eine tolle Doku welche wirklich zu lesen lohnt.

Lösung 5: Kopano dagent Plugin

Wie, es gibt noch eine Lösung 5? Natürlich und die will ich Dir auch gar nicht vorenthalten. Ganz so egal ist Kopano das Thema Zustellung an den öffentlichen Ordner nämlich gar nicht. Hier mag die Einleitung etwas anderes suggeriert haben, deswegen nochmals der Hinweis: Es gibt einen Lösungsweg und der steht sogar im Handbuch: https://documentation.kopano.io/kopanocore_administrator_manual/special_kc_configurations.html#move-to-public. Dazu wird kopano-dagent über ein Plugin erweitert und eine Konfigurationsdatei entsprechend bearbeitet. Selbstverständlich funktioniert auch dies wunderbar!

Nun mein persönliches Fazit dazu: Eigentlich wollte ich die Zustellung an die öffentlichen Ordner via LDAP verwalten anstatt wie hier in einer Konfigurationsdatei. Also eine funktionierende Lösung die jedoch eine andere Strategie verwendet wie die von mir gewünschte. Die ist gut weil Sie funktioniert. Nur nichts für mich.

Du hast nur eine kleine Installation? Du editierst eine einfache Text-Konfigdatei lieber als LDIF-Daten? Du suchst eine Lösung die offiziell von Kopano angeboten wird? Dann bist Du hier genau richtig!

Fazit

Lösung 4 ist wunderbar. Sie ist schlank, einfach und schlichtweg elegant. Der zusätzliche Aufwand ist kaum nennenswert wenn man ohnehin dabei ist postfix mit Kopano zu verbinden. Einmal eingerichtet lässt sich das Verhalten komplett via LDAP beeinflussen. So macht es Spaß. Das ist schnell erledigt.

Was ich mir jetzt noch für die Zukunft wünschen würde und da schließt sich der Kreis zur Einleitung: Hinweise in der Kopano Dokumentation wie man dies macht wären super, richtig nett wäre die Erweiterung des Kopano LDAP Schemas um ein passendes Feld. Aber: Genau genommen ist diese Lösung schnell im Internet recherchiert oder durch das Studium der postfix Dokumentation rasch hergeleitet. Der Mehraufwand ist kaum nennenswert. Die Kopano Dokumentation ist meiner Meinung nach eher als Lösungsansatz zu verstehen da es zu viele verschiedene Umgebungen mit ihren ganz besonderen Eigenschaften gibt. Diese kleine zusätzliche postfix Anpassung fällt somit unterm Strich kaum ins Gewicht.

Und vergessen wollen wir nicht, dass es sehr wohl einen Kopano-Lösungsweg gibt. Nur finde ich persönlich, dass dieser nicht ganz in die Zeiten von LDAP-Bäumen, egal ob openLDAP, eDir oder Windows AD passt.

Darüber hinaus zeigt sich meiner Meinung nach noch ein ganz anderer wichtiger Aspekt: Kopano wirbt immer damit wie gut die Lösung in bestehende Strukturen integriert werden kann. Integration bedeutet Schnittstellen zu haben. Diese sind entsprechend dokumentiert und somit finden sich in kürzester Zeit verschiedene Lösungsansätze. Siehe oben. Das ist mal richtig toll! Leider gibt es viele andere Software da draußen wo man nicht mal einen Lösungsansatz finden würde...