Linuxmuster-mail und relay-host

Hallo,
ich habe mit einer neuen LM7-Installation auch einen linuxmuster-mail Server auf unserem Docker-Server installiert. Das funktioniert inzwischen wirklich gut. Herzlichen Dank an alle Entwickler.
Leider haben wir noch Probleme mit dem Relay-Host und der lokalen Mail-Domain.

Das Setup erstellt am Docker-Server automatisch unter /srv/docker/linuxmuster-mail/docker-compose.yml eine sinnvolle Konfig. In der Docker-Mail-Instanz ist unter /etc/postfix/main.cf der Eintrag relayhost allerdings leer.
Mit ist aufgefallen dass die yml-Datei den Relay-Host über AWS_SES_-Variablen definiert. Laut der Anleitung von tomav sollte man dies inzwischen über RELAY_-Variablen machen. Ich habe die docker-compose.yml entsprechend angepasst und es wird auch in der Docker-Mail-Instanz eine korrekte /etc/postfix/sasl_passwd-Datei für den Relay-Host erstellt (kann sein, dass diese auch vorher schon funktionierte), aber in der main.cf bleibt der relayhost-Eintrag weiterhin leer, obwohl auch der RELAY_HOST in der .yml gesetzt ist.
Gibt es noch eine Einstellung über die man den relayhost setzen muss?

Mir ist auch aufgefallen, dass Mails für die lokale Maildomain nicht angenommen werden. Wir haben diese in der Linuxmuster7-Webgui für Schüler und Lehrer gesetzt. Diese Empfangs-Domain taucht in der Postfix-Konfig nicht auf. Wird diese per ldap vom Linuxmuster-Server bezogen? Im mail.log bekomme ich Warnungen für „virtual_mailbox_domains lookup failure“. Allerdings scheint die Kommunikation des Mailservers zum AD generell zu funktionieren, da sich die Benutzer per IMAP/SMTP authetifizieren können.

Wir würden uns über einen Hinweis zur Behebung der beiden Probleme freuen.

Viele Grüße
Tom und Ingolf

Hallo.
Da seid ihr schon einen Schritt weiter … ich habe den docker Container auch am Start – aber es klappt noch nicht ganz so, wie es soll. Ich habe alles in diesem Thread aufgeschrieben:

Klappt das bei euch, dass emails auch rausgehen? Ich gehe mittlerweile davon aus, dass die Datei /etc/postfix/ldap-domains.cf fehlt bzw fehlerhaft ist.

Habt ihr schon „Gruppen-EMails“ getestet – also sowas wie „5a@meine-domain.de“? Kommt das bei allen an?

Und zuletzt noch eine Frage: Der mail-Server heißt ja mail.linuxmuster.meine-domain.de – wir haben meine-domain.de zusätzlich als vServer angemietet. Kann man den internen mail-Server dazu bringen, auch Kurznamen user@meine-domain.de anstatt der langen Form zu verwenden?
Und wie sieht’s mit dem Alias vorname.nachname@meine-domain.de aus? Im Moment kann ich mich „nur“ mit dem Login (6 Buchstaben anmelden).

Fragen über Fragen …
Schöne Grüße,
Michael

Nachtrag – nicht nur das. Zudem steht hier auch unter myhostname nichts:

# Basic configuration
# myhostname =

Hallo Michael,

momentan geht bei uns noch nichts raus und nichts rein. Es funktioniert aktuell nur der User-Login auf den IMAP-Server. Ich werde heute noch etwas herumsuchen ob ich der Konfig im docker-postfix meinen Willen aufzwingen kann (also die main.cf manuell konfigurieren), ansonsten muss ich auf Plan B umstellen und schnell einen normalen Mailserver aufsetzen und den LM-Server anbinden, da das System nach den Faschingsferien laufen muss.

Hat denn jemand den Docker-Mailserver aktiv in Nutzung?

Scheint ja ein tolles Konzept zu sein, aber anscheinend ist der genutzte Docker-Container von tvial auf einem aktuelleren Versionsstand (letzte Änderung am letzten Monat) als die Linuxmuster7-Anbindung von HappyBasher (letzte Anpassung vor einem Jahr)

Viele Grüße,
Tom

Hallo Tom.
Ok. Dann sind wir ja so ziemlich gleich weit. Ich bin so vorgegangen, dass ich unter Nextcloud das Rainloop-Plugin installiert habe. Damit können sich User untereinander eMails schicken. Das funktioniert auch. Aber mehr leider noch nicht. Auch Gruppen-EMails habe ich damit noch nicht getestet. Da aber so ziemlich „jedes Objekt“ im AD eine eMail-Adresse hat, denke ich, dass das klappen müsste…?

Ich wollte ursprünglich einfach nur mit der Seite mail-tester.com schauen, wie vertrauenswürdig der lmn-mail-Server eingestuft wird – als ich feststellte, dass die eMails GAR nicht rausgehen. Die Fehlermeldungen im anderen Thread geben zwar einen Anhaltspunkt aber ich stecke nicht tief genug in der Postfix-Konfig drin, um genaueres sagen zu können. Das Can't contact LDAP server verstehe ich zB gar nicht, da der Zugriff vom docker Container sowohl auf Port 636 als auch auf 389 funktioniert.
Auch die andere Meldung, die unter ldap-domains.cf: table lookup problem gibt Rätsel auf … man findet nichts brauchbares, wenn man danach sucht.

Der Befehl (im docker Container): doveadm log find zeigt, wo überall Log-Dateien geschrieben werden. Zudem gibt postconf -n eine ganz hilfreiche Übersicht … (da sehe ich übrigens auch, dass kein relayhost eingetragen ist). Irgendwo hatte ich noch gelesen, dass es auch an der master.cf unter /etc/postfix liegen könnte …?!

Vielleicht findest du ja den Fehler.
Schönen Gruß,
Michael

Hallo Michael,

habe gerade parallel einen „nicht lmn7“ mail-container zum Vergleich angelegt.
Beim docker-compose übernimmt er dabei die Einstellungen aus der Datei env-mailserver. Diese führen dann im Container auch zu einem m.E. korrekten relay-host-Eintrag in der Postfix main.cf

Diese env-mailserver-Datei finde ich allerdings in der lmn7-Installation nicht am docker-Server.

Ich habe gesehen, dass lmn7 die Version des Mailserver Containers auf 6.1.0 fixiert. Vermutlich stimmt daher die Doku des Mailservers von tvial nicht mehr mit dem verwendeten Container überein.

Ja, mit der postfix-ldap-Anbindung scheint etwas nicht zu stimmen. Habe die gleichen ldap-Fehler.

Mit Nextcloud habe ich mich nicht beschäftigt. Ich möchte nur Mails per Mailserver empfangen und versenden können.

Viele Grüße
Tom

kurzes Update:
ich habe in der docker-compose.yml des linuxmuster7-mail-containers für unsere Mail-Sub-Domain „schule.hauptdomain“ folgenden Eintrag gemacht
hostname: mail
domainname: hauptdomain (war vorher der AD-Domain-Name „wg.lan“)
container_name: mail

Nun gehen eMails plötzlich raus. Allerdings nicht über den relayhost, sonder direkt über MX-DNS-Abfragen. Kann also bei machen Empfangsserver zur Ablehnung führen, wenn wir da mit unserer Telekom-IP als Absender ankommen.

Die LDAP-Abfrage von Benutzern über die ldap-users.cf funktioniert eigentlich:
„postmap -vq ba ldap:/etc/postfix/ldap-users.cf“ gibt mir „Search returned ba ba“ zurück. Dabei wird der LM7-AD per Port 636 abgefragt:

/srv/docker/linuxmuster-mail/config/postfix/ldap-users.cf

bind = yes
bind_dn = CN=global-binduser,OU=Management,OU=GLOBAL,DC=wg,DC=lan
bind_pw = ****
query_filter = (samaccountname=%s)
result_attribute = samaccountname
search_base = OU=SCHOOLS,DC=wg,DC=lan
server_host = ldaps://lms.wg.lan:636
version = 3

Trotzdem schlägt ein Mailversand an einen lokalen User erstmal fehl:
mail postfix/smtpd[3143]: NOQUEUE: reject: RCPT from unknown[10.17.10.7]: 550 5.1.1 <ba@schule.hauptdomain>: Recipient address rejected: User unknown in virtual mailbox table; from=<de@schule.hauptdomain> to=<ba@schule.hauptdomain> proto=ESMTP helo=<[10.17.10.7]>

Die ldap-domains.cf funktioniert hingegen m.E. absolut nicht:
bind = yes
bind_dn = CN=global-binduser,OU=Management,OU=GLOBAL,DC=wg,DC=lan
bind_pw = ******
query_filter =
result_attribute = mail
search_base = OU=SCHOOLS,DC=wg,DC=lan
server_host = lms.wg.lan
start_tls = no
version = 3

Ich habe dort auch schon manuell versucht auf verschlüsselte Abfrage wie bei den user umzustellen. Allerdings weiß ich nicht was ich bei query_filter eintragen soll. Ich denke aber, dass die Domain-abfrage auch unwichtig ist, da unsere lokale Maildomain inzwischen fest unter /etc/postfix/vhost steht und die ldap-domain.cf nur zusätzlich zur vhost abgefragt wird (siehe /etc/postfix/main.cf in der Zeile virtual_mailbox_domains = /etc/postfix/vhost, ldap:/etc/postfix/ldap-domains.cf )

Damit die Zustellung und Versandt von lokalen Usern funktioniert, musste ich jetzt erstmal mit dem Holzhammer den Postfix anweisen, sich nicht darum zu kümmern ob ein lokaler user existiert oder nicht. Ich habe also (erstmal nur zum Testen manuell im Container) in der /etc/postfix/main.cf die virtual_mailbox_maps Definition herausgenommen und alle Verweise auf reject_unauth_destination entfernt. Das hat zur folge, dass der Mailserver nun auch Mails von Benutzern annimmt, die vielleicht nicht existieren. Dann müsste aber dovecot sich mit einem Fehler melden, was er auch tut.

Es gefällt mir zwar nicht, auf die reject_unauth_destination zu verzichten, aber immerhin funktioniert der mailserver damit schon mal.

Mal schauen ob ich den relay host noch zum laufen bekomme.

Viele Grüße,
Tom

Ich habe den Befehl ausprobiert – der liefert interessante Anhaltspunkte:

postmap: cfg_get_str: /etc/postfix/ldap-users.cf: server_host = ldaps://server.linuxmuster.meine-domain.de:636
postmap: cfg_get_int: /etc/postfix/ldap-users.cf: server_port = 389

Das passt ja was nicht zusammen! Evtl muss auch hier der Eintrag
server_port=636 getrennt aufgeführt werden.

Weiter unten dann

postmap: cfg_get_str: /etc/postfix/ldap-users.cf: domain =  <<< LEER!!

und noch weiter unten dann:
postmap: dict_ldap_lookup: No existing connection for LDAP source /etc/postfix/ldap-users.cf, reopening

Liest hier ein Entwickler mit?

Hallo Michael,

vergleiche doch mal bitte den Inhalt der Datei /srv/docker/linuxmuster-mail/config/postfix/ldap-users.cf auf dem Docker-Server bzw. /etc/postfix/ldap-users.cf auf dem mail-container (sollte die identische Datei sein, da sie „durchgereicht“ wird) mit dem Inhalt von meiner Datei:

bind = yes
bind_dn = CN=global-binduser,OU=Management,OU=GLOBAL,DC=wg,DC=lan
bind_pw = ****
query_filter = (samaccountname=%s)
result_attribute = samaccountname
search_base = OU=SCHOOLS,DC=wg,DC=lan
server_host = ldaps://lms.wg.lan:636
version = 3

Viele Grüße,
Tom

Ja, der Aufbau ist identisch. Port-Angaben stimmen ebenfalls überein. Ich meine aber irgendwo gelesen zu haben, dass die Angabe ldaps://...:636 für OpenLDAP ist – während man es bei AD mit einer Extra-Zeile server_port = 636 machen muss – aber alles ohne Gewähr.
Gefunden: Hier stand das: http://www.postfix.org/ldap_table.5.html

Hi Michael,

bei der Syntax geht es m.E. um die OpenLDAP-Client-Lib die Postfix nutzt. Diese versteht auch die host:port Syntax.
Wie gesagt funktioniert die obige User-Abfrage bei mir auch. Wenn ich den User „ba“ über obige Postfix-Config suche, kommt erfolgreich „ba“ zurück. Wenn ich einen nicht existierenden User suche, kommt ein Fehler zurück.
Postfix hat trotzdem ein Problem damit. Ich vermute dass er vielleicht nicht nur den Username prüft, sondern die ganze eMail-Adresse. Und die steht ja nicht im AD.

Viele Grüße
Tom

Hallo Tom.

Warum das nicht? Hast du intern keinen FQDN gewählt?

Ja, das ist hier auch so. Die Verbindung zum AD funktioniert – der Fehler steckt woanders.
Hast du schon versucht, das Debug-Level hoch zu drehen?
https://doc.dovecot.org/admin_manual/dovecot_logging/

Hallo Michael,

Ich hatte die Ausgangssituation nicht genau beschrieben, sorry. Der FQDN hat eine lokale Fantasie-Domain „wg.lan“, die kann für eMails natürlich nicht genutzt werden. Die eMail-Domain ist eine echte Internet-Domain inkl MX-Eintrag, genauer eine Sub-Domain unserer Internet-Hauptdomain (schule.hauptdomain).
Ich habe in der WebGUI diese eMail-Domain zwar für die Gruppen Lehrer, Schüler etc. eingetragen, habe aber Zweifel ob diese dann wirklich für jeden Benutzer im AD-Eintrag gespeichert ist.

Jedenfalls bringt ein

postmap -vq ba@wg.lan ldap:/etc/postfix/ldap-users.cf

die Bestätigung, dass der User ba existiert.
Ein Query nach ba@wg.lan antwortet mit „Search returned nothing“, ein Query nach ba@schule.hauptdomain bringt ebenfalls „nothing“. Macht auch Sinn, da ja nach „samaccountname“ im LDAP gesucht wird, und der ist wohl immer nur der Username, ohne Domain. Vielleicht ist das auch die Ursache des Postfix-Problems, dass in der ldap-users.cf nicht nach dem samaccountname gesucht werden dürfte?
Ich muss nochmal nachschauen, wie ich von einem AD-Benutzer den kompletten LDAP-Eintrag ausgeben lassen kann, um zu prüfen welche Felder existieren und ob irgendwo die eMail mit FQDN drin steht. Dann könnte ich dies in der ldap-users.cf abändern und testen ob Postfix dann die lokalen Mailboxen/Benutzer erlaubt.

das bekommst du doch mit ldapsearch?!?

ldapsearch  -b "ou=default-school,ou=SCHOOLS,dc=linuxmuster,dc=meine-schule,dc=de" -H ldaps://server.linuxmuster.meine-schule.de:636 -x -D global-binduser@linuxmuster.meine-schule.de -w geheimesPasswort givenName=Michael 

Danke Michael!
Hatte mir zwischenzeitlich mit dem samba-tool beholfen.

Die korrekte eMail-Adresse steht tatsächlich im Feld „mail“ im AD.
Wenn ich also nach samaccountname=ba suche und mir als return_attribute die Mail zurück geben lasse, bekomme ich vom postmap den richtigen Eintrag:

postmap: dict_ldap_connect: Successful bind to server ldaps://lms.wg.lan:636 with dn CN=global-binduser,OU=Management,OU=GLOBAL,DC=wg,DC=lan
postmap: dict_ldap_connect: Cached connection handle for LDAP source /etc/postfix/ldap-mail.cf
postmap: dict_ldap_lookup: /etc/postfix/ldap-mail.cf: Searching with filter (samaccountname=ba)
postmap: dict_ldap_get_values[1]: Search found 1 match(es)
postmap: dict_ldap_get_values[1]: search returned 1 value(s) for requested result attribute mail
postmap: dict_ldap_get_values[1]: Leaving dict_ldap_get_values
postmap: dict_ldap_lookup: Search returned ba@schule.hauptdomain

Ich habe in der ldap-users.cf nun den query_filter auf (mail=%s) und das return_attribut auf mail geändert und nun funktioniert die Abfrage mit kompletten Mailadressen. Ich habe keine Idee warum dort ursprünglich nach samaccountname statt mail abgefragt wurde.

@Michael, könntest Du mir bitte den Eintrag deiner ldap-user.cf zum Vergleichen schicken? Ich vermute ich sollte den query_filter in meiner Datei noch etwas stärker einschränken als nur „mail=%s“.

@Michael das Problem mit der ldap-domains.cf konnte ich inzwischen lösen. Dann geht auch der Versand nach extern:
in der docker-compose.yml folgende Einstellungen ändern:
- LDAP_SERVER_HOST=ldaps://lms.wg.lan:636
- LDAP_SEARCH_BASE=OU=SCHOOLS,DC=wg,DC=lan
- LDAP_BIND_DN=CN=global-binduser,OU=Management,OU=GLOBAL,DC=wg,DC=lan
- LDAP_BIND_PW=*****
- LDAP_QUERY_FILTER_USER=(mail=%s)
- LDAP_QUERY_FILTER_DOMAIN=(mail=*@%s)

Dann docker-compose down und docker-compose up -d mail
Anschließend sollten eine funktionierende ldap-domains.cf existieren und man kann die main.cf unangetastet lassen.

Hallo Tom.
Das klingt gut! Super!
Hast du die Datei ldap-domains.cf mit in die docker-compose.yml aufgenommen oder kommt die Datei direkt aus dem Container? Ich hatte mich gewundert, dass die anderen ldap-configs alle an den Container durchgereicht werden – aber die ldap-domains nicht!?

Hat sich deine Anfrage der ldap-users.cf damit erledigt oder willst du trotzdem noch einen Blick darauf werfen?
Die Einträge in der Datei lauten hier derzeit jedenfalls auch noch so:

query_filter = (samaccountname=%s)
result_attribute = samaccountname

Scheint falsch zu sein – wird nun durch den neuen QUERY_FILTER ersetzt…

Michael

Hi Michael,

ja, ist merkwürdig, dass nur die ldap-domains.cf nicht aus dem config-Ordner kommt. Ich habe dies so gelassen. Sie wird beim docker-compose aus der .yml-Datei neu erzeugt.
Deine ldap-users.cf schaut so aus, wie meine vor den Änderungen. Das samaccountname hatte für den postfix nicht funktioniert. Mit (mail=%s) ging es. Könnte man noch etwas verfeinern und deaktivierte Accounts oder Maschinen-Accouts oder Gruppen-Accounts irgendwie herausfiltern. Aber fürs erste lasse ich es so.
Den Relay-Host konnte ich nach wie vor nicht setzen. Die SASL-Passwort-Datei wird zwar erzeugt, aber in der main.cf bleibt der Eintrag leer. Da der Mailversand aktuell auch ohne relayhost funktioniert, lass ich den Versand erstmal direkt laufen.

    - DEFAULT_RELAY_HOST=[smtp.1und1.de]:25
    - RELAY_HOST=smtp.1und1.de
    - RELAY_PORT=25
    - RELAY_USER=mailversanduser@domain
    - RELAY_PASSWORD=****
    - AWS_SES_HOST=smtp.1und1.de

ich trage das auch so ein und melde mich dann, ob es funktioniert. Wäre super! Kannst du deine Beobachtungen evlt auch direkt als github-issue an die Entwickler melden?

Hallo Tom.
Auch hier konnte die ausgehende eMail jetzt versandt werden :slight_smile:

cd /var/log/mail/
cat mail.log 
....
Anonymous TLS connection established to mail-tester.com[...]:25: TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)

Ich bekomme lediglich eine Warnung bgzl doppelter Einträge:

Feb 28 12:01:36 mail postfix/smtp[1624]: error: /etc/postfix/sasl_passwd, line 2: duplicate entry: "[mail.meine-domaine.de]:25"

Hast du eine gute Erklärung, warum der Eintrag da nun doppelt auftaucht?
Hast du den Eintrag DEFAULT_RELAY_HOST nun aktiviert oder nicht — bzw ist die eckige Klammer, die du oben gesetzt hast, notwendig?

Nachtrag: Jetzt konnte ich auch das erschütternde Ergebnis vom mail-tester.com sehen: nur 2.1 von 10 Punkten :scream: Da wird natürlich nur sehr wenig überkommen und das meiste von den großen Anbietern gefiltert werden.

Dies wird alles bemängelt:

## Sie sind nicht vollständig berechtigt

Wir prüfen, ob der Server von dem Sie senden, authentifiziert ist

-1

### [SPF] linuxmuster.meine-domain.de gestattet Ihrem Server 9x.xxx.xxx.xxx nicht, <login>@linuxmuster.meine-domain.de zu nutzen

-1

### Ihre Nachricht ist nicht durch DKIM signiert

### Sie haben keinen DMARC-Datensatz

### Ihr Reverse-DNS-Eintrag stimmt nicht mit der Sendenden Domain überein

-3

### Wir haben nicht einen Mail-Server (MX Record) hinter Ihrem Domain-Namen **linuxmuster.meine-domain.de** gefunden.

### Ihr Hostname **mail.linuxmuster.meine-domain.de** ist einem Server zugewiesen. --> OK!

und auch noch was vom SpamAssassin:
-2.5		NO_FM_NAME_IP_HOSTN		NO_FM_NAME_IP_HOSTN

Schönen Gruß – wir kommen der Sache immerhin näher!
Michael