Hinweise zum neuen linuxmuster-Mailserver (mailcow-dockerized)

Hallo.
Endlich läuft der linuxmuster-Mailserver hier … und es hat mich viel Zeit und Nerven gekostet bis ich das Problem, das es hier gab, überhaupt benennen konnte. Damit andere nicht in die gleiche „Falle“ (?) stolpern, schreibe ich ein paar Infos hier auf …

Eigentlich hatte ich den Thread rund um den mailcow-Container schon hier begonnen, doch mittlerweile hat sich am Setup so viel geändert, dass ich lieber nochmal neu beginne.

Ich habe mich für den tabula-rasa-Schritt entschieden und habe sowohl den Mailcow-Container als auch die linuxmuster-Erweiterung nochmal komplett von vorne installiert. Beides lief glatt durch. Auch das automatische Einbinden der Mailkonten lief sofort erstaunlich gut. Es wurden sämtliche Postfächer synchronisiert – und zwar genau so, wie es im Feld „mail“ des v7-Servers steht. Erst danach gingen die Probleme los.

Da wir zu den wenigen (??) Schulen gehören, die

  • eine DMZ auf der OPNSense eingerichtet haben und
  • intern wie extern den gleichen FQDN verwenden ergeben sich vermutlich gerade dadurch gewisse Schwierigkeiten

Damit besser verständlich wird, wie das Setup bei uns aussieht, kommt hier zunächst ein Bild:

Eine Anfrage vom mailcow-Container soll so ablaufen: Aus der DMZ gelangt die LDAP-Anfrage zur Firewall, die dank eines Unbound-Eintrages und der zugehörigen Portweiterleitung den v7-Server direkt im LAN auf Port 636 erreichen kann. Da der mailcow-Container ja bereits alle Postfächer synchronisiert hat, funktionierte diese Verbindung offenbar korrekt.

Das Problem ergab sich, wenn ich mich mit meinem Login an SOGo anmelden wollte: Das dauerte dann immer ziemlich lange und ein Blick auf die OPNSense-Firewall-Logs zeigte mir dann, dass der mailcow-Server jedes Mal zum Hostnamen im Internet auflöst, anstatt direkt die ldap(s)://-Verbindung zum v7-Server aufzubauen. Er klopfte also immer beim falschen Host an.

Und genau hier lag das Problem, denn bisher war ich immer davon ausgegangen, dass alle docker-Container die DNS-Settings des Hosts (hier die VM in der DMZ) erben und somit die gleichen Einstellungen verwenden.

Auf dem Host in der DMZ kann ich problemlos per ldapsearch den linuxmuster-Server im LAN sowohl auf Port 636 als auch auf 389 erreichen. Aber der docker-Container konnte das offenbar nicht: Dort liefen die Anfragen jedes Mal über die WAN-Schnittstelle raus anstatt über die LAN-Schnittstelle zum linuxmuster-Server zu gelangen. Sehr lange hatte ich daher die OPNSense-Firewall auf der „Liste der Verdächtigen“, da es zunächst so nahe lag…

Aber auf der OPNSense waren bereits alle Regeln und alle Unbound-Einstellungen angelegt, so dass interne Anfragen auf Port 636 direkt zum linuxmuster-Server gelangen.

Da sie das nicht vom mailcow-Container aus taten, bin ich schlussendlich tiefer in das DNS-Setup des mailcow-Containers eingestiegen. Zunächst habe ich mir die „üblichen Verdächtigen“ vorgenommen und /etc/docker/daemon.json editiert. Das hat aber nicht geholfen. Neue Erkenntnisse gab es erst, als ich mit einer Bash im mailcow-dovecot-Container mit dig eine DNS-Anfrage auf die unterschiedlichen Server gemacht habe: Da wurde klar, dass der docker-Container offenbar auch weiterhin einen externen DNS-Server verwendet (vgl. auch die offizielle Doku!) – warum das so ist, ist mir zwar nicht klar, doch das docker-DNS-Problem wird auch im offiziellen Forum lang und breit diskutiert.

Die Lösung, wie man das schließlich umgehen kann, steht hier:

https://mailcow.github.io/mailcow-dockerized-docs/de/manual-guides/Unbound/u_e-unbound-fwd/

Es ist so, dass der mailcow-Container nochmal einen eigenen Unbound-Dienst mitbringt. Erst mit diesen Einstellungen wurde zuverlässig zum v7-Server aufgelöst und die Anmeldung an SOGo läuft endlich flott.

Sowohl das Senden als auch das Empfangen von eMail läuft jetzt – und als wäre das noch nicht genug, habe ich auch gleich noch ein Proxmox-Mail-Gateway spendiert (das hier sowieso schon als LXC-Container mit lief). Nun läuft der gesamte eMail-Traffic so wie man das hier in der zweiten Abbildung sieht.

Das ganze sieht jetzt hier so easy aus … war es aber definitiv nicht. Zwischendurch wollte ich den ganzen Kram schon in die Ecke werfen. Dank gilt an dieser Stelle übrigens auch noch Klaus (@garblixa ), den ich schon per PM diesbzgl angefunkt hatte. Am Ende sieht das dann immer so aus wie „Ja, hättest Du mal gleich die Doku gelesen, wäre das doch klar gewesen!“ … aber ganz so einfach war es dann leider doch nicht … aber wie auch immer: Vielleicht kann jemand mit einem ähnlichen Setup etwas mit diesen Tipps anfangen :thinking: :interrobang:

Natürlich gibt es aber noch ein neues Problem: da ich für die eMail-Adressen der Schüler eine Form @kurzer-name.de gewählt habe, werden Mailinglisten für Projekte im Moment noch nicht korrekt erzeugt. Die erhalten alle noch die Domain @langer-domain-name.de … das ist aber ein bekannter Bug, der schon hier im Forum diskutiert wurde.

Alle anderen Tests waren bisher aber erfolgreich – eMails kommen in beide Richtungen an.

Viele Grüße,
Michael

4 „Gefällt mir“

Hallo Michael,
auch wenn ich nur die Hälfte verstanden habe - RESPEKT! - und Danke für deine ausführliche Dokumentation.
VG Andreas

Hi Michael,

Danke fürs Teilen der Lösung :slight_smile:

VG, Dorian

Lieber Michael,

nachdem du jetzt eine Weile den Mailserver nutzt: Kannst du was zur Ressourcenhungrigkeit sagen?
Auf der Doku-Seite von Mailcow steht ja nicht so viel, nur dass man für 15 EAS-User und 50 Imap-Verbindungen ca 15GB RAM benötigt.

Wie skaliert denn das, wenn sich ein 60-Personen-Kollegium mit EAS verbindet?

LG Jesko

Hallo Jesko.
Der Server hat kaum nennenswerte Ressourcen. Er läuft auch halbwegs stabil — außer der Tatsache, dass sich der Abgleich mit dem v7-Server manchmal aufhängt. Wenn sich dann ein neuer User anmelden will, klappt das natürlich nicht. Aber ein Neustart des Mail Servers löst das Problem. Aber ansonsten stabil und jeder Schüler / Lehrer hat seine eigene eMail-Adresse.

Viele Grüße
Michael

Hallo Michael,

lief denn bei Dir von Anfang an auch die Anmeldung der Nutzer bei SOGo?

Ich versuche schon seit einiger Zeit (leider nur „immer mal nebenbei“) eine mallcow-Installation mit linuxmuster-mailcow zum Laufen zu bringen. Die Synchronisation der User über das LDAP vom LMN7.1 läuft problemlos und stabil. Nur SOGo meint, es wäre keine Authentifizierungsmethode eingerichtet.

Ich hab noch keine Zeit gehabt, mir das genauer anzuschauen, aber was komisch ist: im data-Verzeichnis ist die ldap.conf von SOGo keine Datei mehr, sondern ein Verzeichnis. Seltsam.

Danke,
Jens

Ja, das läuft. Wir haben es im Moment so eingerichtet, dass man nur über das Webinterface an seine Emails kommt. Die ganzen Email Ports sind von außen also im Moment nicht erreichbar, da ich nicht weiß, ob man damit Lücken aufmacht, die man nicht haben will oder ob man dadurch ständig Anfragen von außen hat, die man auch nicht haben will :man_shrugging:t2::thinking::interrobang:

@Jesko — kann natürlich auch sein, dass man den Mailserver dann anders/fetter dimensionieren muss, wenn man imaps usw freigibt und ständig sehr viele offene Verbindung zum Mail Server hat :man_shrugging:t2::interrobang:

Hmmm…
ich würde schon gerne allen Lehrern das Postfach auf de(n/m) Leihgerät(en) einrichten (lassen)…

Jetzt hab ich das mal ausprobiert. Der Sync klappt schonmal :slight_smile:
Aber ich kann mich leider nicht am SOGo anmelden… mal schauen, was da schief läuft…

LG Jesko

Ah :slight_smile: Das kommt mir jetzt bekannt vor, nachdem ich die Synchronisation hinbekommen hab :slight_smile:

Bist du da schon weiter?
LG Jesko

Hallo Jesko, redest Du hier von Tablets oder von Notebooks? Ich weiß, dass man die eMail Konfiguration zB unter Relution fix und fertig vorbereiten und dann per Richtlinie auf die Endgeräte schieben kann. Dann muss man nur noch einmalig sein Passwort eintippen und fertig. Meinst Du das? Das funktioniert schon — aber wir haben aus den o.g. Gründen trotzdem darauf verzichtet….

Viele Grüße
Michael

Ich habe bisher die Postfächer bei Belwü per mobileconfig auf den iPads installiert.
Das würde ich gerne so beibehalten (also halt nicht bei Belwü… -leider-)
Aber ich scheue mich etwas davor, weil ich nicht weiß, wie viele Ressourcen ich da bereitstellen muss.
Viele Grüße
Jesko

Hallo Jesko,

leider nein. Ich habe jetzt nochmal meine komplette mailcow-Installation geputzt (alle Container, Images, Networks, Volumen gelöscht) und nochmal von vorne angefangen, um auszuschließen, dass ich in der Anleitung von mailcow oder linuxmuster-mailcow was übersehen habe. Dabei habe ich mir von jedem Schritt eine Kopie des mailcow-Verzeichnisses erstellt.

Der danach erreichte Zustand ist jedoch leider wieder derselbe:

  • Die Synchronisation des LMN-ldap mit der mailcow incl. aller User und Domains funktioniert. Wunderbar.
  • Versuche ich mich am SOGO Webinterface mit „meinuser@meineschuldomain.de“ (unter dem es ein User in der Sogo-Oberfläche gibt), kommt „Falscher Benutzername oder falsches Passwort“.
  • Schaue ich mit docker compose logs -f sogo-mailcow in das Mailcow log sehe ich da u.a. [ERROR] <0x0x562facda7070[SOGoUserManager]> No authentication sources defined - nobody will be able to login.
  • Was mir auffällt: unter ./data/conf/sogo ist ldap.conf keine Datei, sondern ein (leeres) Verzeichnis:
root@tgsdocker:/opt/mailcow-dockerized/data/conf/sogo# ls -al
insgesamt 44
drwxr-xr-x  3 root root 4096  2. Apr 07:18 .
drwxr-xr-x 11 root root 4096  2. Apr 06:54 ..
-rw-r--r--  1 root root 4887  2. Apr 06:54 custom-favicon.ico
-rw-r--r--  1 root root  251  2. Apr 06:54 custom-sogo.js
-rw-r--r--  1 root root 1029  2. Apr 06:54 custom-theme.js
drwxr-xr-x  2 root root 4096  2. Apr 07:18 ldap.conf
-rw-r--r--  1 root root 1248  2. Apr 07:18 plist_ldap
-rw-r--r--  1 root root 1167  2. Apr 06:54 plist_ldap.linuxmuster_mailcow_bak
-rw-r--r--  1 root root   56  2. Apr 07:22 sieve.creds
-rw-r--r--  1 root root 2448  2. Apr 06:54 sogo.conf

Dieses wird dann ja über das dockercompose.override.yml von linuxmuster-mailcow u.a. in den sogo-mailcow-Container unter /etc/sogo eingehängt, wo es natürlich auch ein Verzeichnis ist:

root@tgsdocker:/opt/mailcow-dockerized# docker exec -it 2951a463e915 /bin/bash
root@2951a463e915:/# ls -al /etc/sogo/
total 44
drwxr-xr-x 3 root root 4096 Apr  2 07:18 .
drwxr-xr-x 1 root root 4096 Apr  2 07:22 ..
-rw-r--r-- 1 root root 4887 Apr  2 06:54 custom-favicon.ico
-rw-r--r-- 1 root root  251 Apr  2 06:54 custom-sogo.js
-rw-r--r-- 1 root root 1029 Apr  2 06:54 custom-theme.js
drwxr-xr-x 2 root root 4096 Apr  2 07:18 ldap.conf
-rw-r--r-- 1 root root 1248 Apr  2 07:18 plist_ldap
-rw-r--r-- 1 root root 1167 Apr  2 06:54 plist_ldap.linuxmuster_mailcow_bak
-rw-r--r-- 1 root root   56 Apr  2 07:22 sieve.creds
-rw-r--r-- 1 root root 2448 Apr  2 06:54 sogo.conf
root@2951a463e915:/# ls -al /etc/sogo/ldap.conf/
total 8
drwxr-xr-x 2 root root 4096 Apr  2 07:18 .
drwxr-xr-x 3 root root 4096 Apr  2 07:18 ..

Das kann nicht wirklich funktionieren. Wie sieht denn die ldap.conf bei denen, die eine funktionierende mailcow-Installation mit lmn-Anbindung haben, aus? Arbeitet ihr auch mit linuxmuster-mailcow (GitHub - netzint/linuxmuster-mailcow)?

Ich werde später mal versuchen herauszufinden, wo und warum die Datei als Verzeichnis angelegt wird.

Schönen Sonntag!
Jens

Hallo Jesko,

zwei Stunden debugging weiter denke ich die Lösung gefunden zu haben: das Passwort meines bind-users für die mailcow enthielt ein „!“ und ein „&“. Mit einem neuen Passwort ohne diese Sonderzeichen funktioniert jetzt das SOGo-Login.

Löst das auch Dein Problem?

Schönen Sonntag!
Jens

Leider nein. Mein Passwort besteht schon jetzt nur aus a-z A-z 0-9

Naja… ich lass es jetzt mal liegen und probiere es in ein paar Wochen nochmal.

Danke trotzdem und schöne Ferien!
Jesko

Hallo, Jesko -

vielleicht ist das eine gewisse Ermutigung für Deine Pläne ?

L.G.
Christoph

Hi. Ok – heute kurz Zeit gehabt und ein paar Dinge nachgesehen:

Ist hier auch so – verstehe ich aber auch nicht.
Kann es sein, dass der Rest über das Sogo-WebUI (als Admin) eingerichtet werden muss?

Viele Grüße,
Michael

Hallo und frohe Ostern!

Mir ist noch eingefallen, was ich vor meinem Post von vor einer Woche noch geändert hatte (und möglicherweise die Lösung für das SOGo-Login war): ich habe in der docker-compose.override.yml noch die folgenden Zeilen (die dazu geführt haben, dass die ldap.conf als Verzeichnis eingebunden wurde) auskommentiert:

    # sogo-mailcow:
    #     volumes:
    #         - ./data/conf/sogo/ldap.conf:/etc/ldap/ldap.conf:rw

Löst das das Problem mit dem nicht funktionierenden SOGo-Login bei Euch?

Dann habe ich noch einmal eine grundsätzliche Fragen zum Setup mit dem LMN7.1-Server sowie mailcow-Erweiterung mit linuxmuster-mailcow: auf dem LMN6.2-Server hatten wir seinerzeit über /etc/aliases ein paar Aliasnamen (z.B. „schulleitung“) und weitere Verteilerlisten realisiert. Gibt es eine andere Möglichkeit, dass mit LMN7.1 und mailcow und linuxmuster-mailcow zu realisieren, als über Gruppen (also Projekte) zu gehen, die immer das „p_“ im Namen tragen? Und kann ich für Projekte irgendwo noch einen etwas freundlicheren Alias als das „p_projektname“ erzeugen?

Im mailcow Webfrontend kann ich zwar Aliase definieren, die werden aber durch linuxmuster-mailcow beim nächsten Sync gelöscht. Übersehe ich da vielleicht einen Mechanismus von LMN7.1?

Beste Grüße,
Jens

Ja, du musst in der Projektverwaltung beim Projekt den Haken bei „Verteiler“ setzen. Dann wird der Alias angelegt.

VG,
Dorian

Hallo Dorian.
Ich habe das mit dem Haken „Verteiler“ gerade auch mal ausprobiert (unter v7.0 ist der Button offenbar noch nicht vorhanden aber unter v7.2 war er da :+1: )

Bei uns sind für alle Fachschaften der einzelnen Fächer Projekte angelegt und da wäre es natürlich hilfreich, wenn man direkt einen eMail-Verteiler pro Fachschaft nutzen könnte. Daher habe ich jetzt den Haken „Verteiler“ nachträglich überall gesetzt aber ich sehe von einem Alias nirgendwo etwas :thinking:

Wenn ich den Befehl sophomorix-project -i -p p_Fachschaft_XY verwende, sehe ich dort zwar die „normale“ eMail-Adresse der Form p_Fachschaft_XY@meine-schule.de aber kein Alias. Die Frage ist daher, wo ich genaueres darüber herausfinden kann?

Übrigens @Arnaud : Im WebUI steht hinter [x] Verteiler nichts weiter – wäre es nicht eine sinnvolle Ergänzung für kommende Versionen, wenn dort die richtige eMail-Adresse des Projektes direkt aufgeführt wird?

Danke nochmal und viele Grüße,
Michael

Hallo Michael,

es wird kein Alias angelegt, sondern eine Mailbox mit filtern, die die Mails weiterleiten. Ich weiß nichmehr genau, warum ich das so gemacht hab, aber ich glaube, es lag daran, dass Aliasse nur eine Zustelleradresse haben können.

VG,
Dorian