Ich habe bereits schon hier eine Anleitung geschrieben, wie ihr einen E-Mail Server normal „von Hand“ installieren könnt. Nun zeige ich euch, wie ihr dies in wenigen Minuten mit Docker realisiert. Traefik dient uns hier als Reverse Proxy und stellt später den Dienst verschlüsselt per TLS bereit.

Update

30.04.2021 Anleitung funktioniert jetzt ohne Wildcard Zertifikate. Reihenfolge der Abschnitte wurde angepasst.
19.05.2020 Hinzugefügt: Kapitel DNS
15.04.2020 Hinzugefügt: Clam AV deaktivieren
31.03.2020 Hinzugefügt: docker-compose.override.yml, Test der Zertifikate
29.03.2020 Erste Version dieser Anleitung

Ich habe mailcow ausprobiert, da es eine moderne GUI besitzt und sich viel leichter updaten lässt als mein bisheriger E-Mail Server. Die verlinkte Anleitung erfordert viele Schritte und das komplette System lässt sich sehr schlecht warten. Diese Nachteile hat man bei mailcow nicht.

Ein paar Eindrücke

1. Vorbereitungen

1.1 Docker installieren

Falls ihr noch kein Docker installiert haben solltet, könnt ihr hier lesen, wie es funktioniert.

1.2 Docker Compose installieren

Zu Docker Compose habe ich bereits ebenfalls eine Anleitung geschrieben, welche ihr hier findet.

1.3 Traefik installieren

Traefik dient uns als Reverse Proxy und ermöglicht es uns damit, dass mehre Dienste beispielsweise über den Port 443 (HTTPS) kommunizieren können. Wer Traefik noch nicht installiert hat, kann es mit Hilfe dieser Anleitung schnell erledigen.

1.4 git installieren

Hier müsst ihr lediglich folgende Zeilen eingeben:

apt-get update
apt-get install git

1.5 Verzeichnis erstellen

Nun erstellen wir uns ein Verzeichnis für unseren späteren E-Mail Server

mkdir -p /opt/containers/mailcow

2. mailcow von git klonen

Nun klonen wir uns die neuste Version von mailcow.

git clone https://github.com/mailcow/mailcow-dockerized /opt/containers/mailcow

3. Konfigurationsdatei erstellen

Dazu müssen wir lediglich ein Skript starten.

cd /opt/containers/mailcow
./generate_config.sh

Hier gebt ihr den FQDN ein. Zum Beispiel: mail.euredomain.de

4. Anpassungen für Traefik vornehmen

4.1 Docker Compose anpassen

Nun passen wir noch die Docker Compose Datei an Traefik an. Dazu öffnet ihr folgende Datei:

nano /opt/containers/mailcow/docker-compose.yml

Ihr scrollt nun bis zum Abschnitt „nginx-mailcow“. Dort müsst ihr folgendes ändern:

Zeilen auskommentieren:
      #ports:
        #- "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
        #- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"

4.2 docker-compose.override.yml erstellen

Nun erstellen wir eine neue Datei, in der wir alle unsere Anpassungen tätigen. Grundlage für diese Anpassungen bildet die offizielle Mailcow Dokumentation.

nano /opt/containers/mailcow/docker-compose.override.yml
version: '2.1'

services:
    nginx-mailcow:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.nginx-mailcow.entrypoints=http"
        - "traefik.http.routers.nginx-mailcow.rule=HostRegexp(`{host:(autodiscover|autoconfig|webmail|mail|email).+}`)"
        - "traefik.http.middlewares.nginx-mailcow-https-redirect.redirectscheme.scheme=https"
        - "traefik.http.routers.nginx-mailcow.middlewares=nginx-mailcow-https-redirect"
        - "traefik.http.routers.nginx-mailcow-secure.entrypoints=https"
        - "traefik.http.routers.nginx-mailcow-secure.rule=Host(`mail.euredomain.de`)" ###### hier eure FQDN angeben #####
        - "traefik.http.routers.nginx-mailcow-secure.tls=true"
        - "traefik.http.routers.nginx-mailcow-secure.tls.domains[0].main=mail.euredomain.de" ###### anpassen zu euer FQDN von oben #####
        - "traefik.http.routers.nginx-mailcow-secure.tls.domains[0].sans=imap.euredomain.de, smtp.euredomain.de, pop3.euredomain.de" ## Domain anpassen ##
        - "traefik.http.routers.nginx-mailcow-secure.service=nginx-mailcow"
        - "traefik.http.services.nginx-mailcow.loadbalancer.server.port=80"
        - "traefik.docker.network=proxy"
        - "traefik.http.routers.nginx-mailcow-secure.tls.certresolver=http"


      networks:
        proxy:


    certdumper:
        image: humenius/traefik-certs-dumper
        container_name: traefik_certdumper
        restart: unless-stopped
        network_mode: none
        command: --restart-containers mailcowdockerized_postfix-mailcow_1,mailcowdockerized_dovecot-mailcow_1
        volumes:
          # mount the folder which contains Traefik's `acme.json' file
          #   in this case Traefik is started from its own docker-compose in ../traefik
          - /opt/containers/traefik/data:/traefik:ro
          # mount mailcow's SSL folder
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - ./data/assets/ssl:/output:rw
        environment:
          # only change this, if you're using another domain for mailcow's web frontend compared to the standard config
          - DOMAIN=${MAILCOW_HOSTNAME}

networks:
  proxy:
    external: true

noch anzupassen:

  • „traefik.http.routers.nginx-mailcow-secure.rule=Host(mail.euredomain.de)“ –> hier das selbe eingeben wie in Schritt 3
  • „traefik.http.routers.nginx-mailcow-secure.tls.domains[0].main=mail.euredomain.de“ –> hier das von oben drüber eingeben
  • „traefik.http.routers.nginx-mailcow-secure.tls.domains[0].sans=imap.euredomain.de, smtp.euredomain.de, pop3.euredomain.de“ –> hier nur den Domainnamen anpassen.

4.3 mailcow.conf anpassen

Hier müssen wir noch eine Änderung vornehmen, damit Mailcow keinen eigenen Zertifikate versucht zu erstellen.

nano /opt/containers/mailcow/mailcow.conf
bisher:
# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
SKIP_LETS_ENCRYPT=n

ändert ihr zu:
# Skip running ACME (acme-mailcow, Let's Encrypt certs) - y/n
SKIP_LETS_ENCRYPT=y

4.4 Clam AV Virenscanner deaktivieren

Wenn ihr den integrierten Clam AV Virenscanner deaktivieren wollt, so müsst ihr folgendes tun:

nano /opt/containers/mailcow/mailcow.conf
bisher
# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
SKIP_CLAMD=n

ändert ihr zu
# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n
SKIP_CLAMD=y

5. Mailcow starten

Nun können wir mailcow zum ersten mal starten. Gebt dazu folgendes ein:

docker-compose up

Wenn ihr keine Fehlermeldung bekommt, kann direkt bei Abschnitt 6 weitermachen.

5.1 Möglicher Fehler: Pool overlaps with other one on this address space

Ich habe bei mir obigen Fehler bekommen.

Wie ihr in der Docker Compose Datei gesehen habt, werden hier feste IP Bereiche (172.22.0/24) verwendet. Es kann jedoch sein, dass dieser Bereich derzeit schon von einem anderen Container verwendet wird.

Jetzt habt ihr zwei Möglichkeiten

  1. Alle IP Adressen in der Docker Compose anpassen
  2. Den Container neu starten, welcher den Bereich (172.22.0/24) blockiert.

Ich habe mich für die zweite Möglichkeit entschieden, da es sich schneller realisieren lässt. Um den „blockenden“ Container zu finden, verwende ich das Tool Portainer (Installations-Anleitung dazu findet ihr hier).

Hier kann ich mir jetzt anzeigen lassen, welcher Container bereits diesen IP Bereich belegt.

Diesen Container beende ich nun und starte ihn neu, NACHDEM ich mailcow gestartet habe.

Nun starte ich zuerst mailcow und danach dann die eben beendeten Service.

docker-compose -f /opt/containers/mailcow/docker-compose.yml up

6. DNS Einstellungen

Alle DNS Einstellungen übernehme ich aus dem Empfehlungen von Mailcow. Diese könnt ihr hier nachlesen.

Bis diese Einstellungen wirken, kann es mehrere Stunden dauern !!!

6.1 Reverse DNS anpassen

Bei netcup könnt ihr den Reverse DNS Eintrag eures Servers sehr einfach anpassen. Dazu geht ihr Server Control Panel (SCP) und wählt dort euren Server aus. Unter dem Reiter „Netzwerk“ könnt ihr nun den rDNS Eintrag anlegen.

Der rDNS Eintrag sollte identisch mit dem „MAILCOW_HOSTNAME“ (Schritt 3) sein.

Diesen Eintrag könnt ihr euch hier anschauen:

nano /opt/containers/mailcow/.env

6.2 DNS Einstellungen

Diese Einstellungen hole ich auch aus der offiziellen Mailcow Anleitung.

Dazu geht ihr bei netcup ins CCP und wählt dort den Reiter „Domains“ aus.

Nun wählt ihre eure Domain aus und klickt auf DNS.

Hier habe ich jetzt folgende Einträge hinzugefügt. Wahrscheinlich stehen schon einige Einträge wie „www“ drin.

# Name              Typ       Wert
mail                 A      eure IP
autodiscover       CNAME    mail.euredomain.de
autoconfig         CNAME    mail.euredomain.de
@                  MX 10    mail.euredomain.de

# SPF Konfiguration
@                  TXT      v=spf1 mx a -all

# DMARC Konfiguration
_dmarc              TXT     v=DMARC1; p=reject; rua=mailto:eureE-Mail@domain.de

Später in der Anleitung (Schritt 11) werden wir hier noch einen Wert hinzufügen. Daher könnt ihr dieses Browserfenster offen lassen.

7. Zertifikate überprüfen

Nun könnt ihr per Konsole überprüfen, ob die Zertifikate richtig geladen wurden. Dies ist wichtig, da ihr euch sonst später nicht mit Clients zu Mailcow verbinden könnt. Gebt dazu folgende Befehle ein:

# Connect via SMTP (587)
echo "Q" | openssl s_client -starttls smtp -crlf -connect mx.euredomain.de:587

# Connect via IMAP (143)
echo "Q" | openssl s_client -starttls imap -showcerts -connect mx.euredomain.de:143

Ausgabe verkürzt:
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = euredomain.de
verify return:1
---
Certificate chain
 0 s:CN = euredomain.de
   i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
 1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
   i:O = Digital Signature Trust Co., CN = DST Root CA X3

Bei den obigen Befehlen muss immer bei Domain das „mx“ stehen bleiben!

Wichtig ist bei den Ausgaben, dass hier eure Domain steht und nicht „example….“ oder sonstiges.

8. Mailcow konfigurieren

Nach dem Start solltet ihr auf folgende Webseite gehen: mail.euredomain.de

Nun solltet ihr folgendes sehen:

Die Benutzerdaten sind:

  • Benutzername: admin
  • Passwort: moohoo

9. Administratorkennwort ändern

Hier zeige ich euch, wie ihr das Kennwort ändern könnt. Dazu klickt ihr auf „bearbeiten“.

Hier gebt ihr dann euer neues Kennwort ein.

10. Eure Domain hinzufügen

Dazu klickt ihr auf „Konfiguration“ -> „E-Mail-Setup“.

Hier klickt ihr auf „Domain hinzufügen“.

Hier gebt ihr nun eure Domain ein. Beispielsweise: euredomain.de

Gebt dort aber NICHT „mail.euredomain.de“ ein!

Anschließend bestätigt ihr mit „Domain hinzufügen und SoGo neustarten“.

Nun sollte eure Domain angezeigt werden.

11. DKIM Schlüssel erzeugen

Uns fehlt nun noch der DKIM Eintrag auf unserem DNS Server. Dazu loggen wir uns mit unserem Administrator Account bei mailcow ein.

Nun klickt ihr auf „Konfiguration“ -> „Server-Konfiguration“.

Hier klickt ihr „Konfiguration“ -> „ARC/DKIM-Keys“.

Nun klickt ihr auf „Domains mit fehlenden Keys auswählen“ und eure Domain sollte in das Feld eingetragen werden. Anschließend wählt ihr einen Selektor aus (bei mir „mail“) und legt die Schlüssellänge (bei mir 2048bit) fest.

Mit einem Klick auf „Hinzufügen“ wird euch der Schlüssel generiert.

Diesen gebt ihr nun in eurem DNS Server ein.

#Name                  Typ    Wert
selector._domainkey    TXT   v=DKIM1;k=rsa;t.....

selector ersetzt ihr mit eurem vorherigen Selektor. Bei mir "mail".

12. DNS Einstellungen testen

Bitte bedenkt, dass eure obigen Einstellungen einige Stunden (bis zu 48 Stunden!) dauern können, bis diese übernommen worden sind.

12.1 DNS Einstellungen testen mit mailcow

Mailcow bietet nun auch die Möglichkeit eure DNS Einstellungen zu testen. Dazu loggt ihr euch mit eurem Admin Account ein.

Anschließend klickt ihr auf „Konfiguration“ -> „E-Mail-Setup“.

Hier seht ihr dann eure Domains. Nun klickt ihr auf DNS und solltet dann alle DNS Einstellungen sehen.

12.2 Testen mit mail-tester.com

Auf dieser Homepage bekommt ihr eine E-Mail Adresse angezeigt. Hier schickt ihr eine E-Mail hin und müsst einen Betreff / paar Zeilen Inhalt hinzufügen. Dies könnt ihr aber erst tun, wenn ihr weiter mit dieser Anleitung seid und schon Nutzer angelegt habt.

Mein Score

12.3 Testen mit mxtoolbox.com

Die Webseite https://mxtoolbox.com liefert sehr viele Tests für euren Mail-Server. Diese könnt ihr einfach mal ausprobieren.

13. E-Mail Benutzer anlegen

Nun legen wir einen ersten E-Mail Benutzer an. Dazu klickt ihr auf „Mailboxen“ und dann „Mailbox hinzufügen“.

Nun könnt ihr einen Benutzer anlegen. Hier zum Beispiel „test“.

In der Übersicht sollten nun alle eure Benutzer zu sehen sein.

14. Webmail starten

Unter „Apps“ -> „Webmail“ könnt ihr euch nun euer Postfach anschauen.

Ihr solltet nun auf die Webseite “ https://mail.euredomain.de/SOGo“ weitergeleitet werden. Hier meldet ihr euch nun an.

Danach könnt ihr direkt E-Mails schreiben, Kontakte pflegen sowie Kalender anlegen.

15. Quellen

https://github.com/mailcow/mailcow-dockerized

https://mailcow.email/

https://mailcow.github.io/mailcow-dockerized-docs/firststeps-ssl/

https://mailcow.github.io/mailcow-dockerized-docs/firststeps-rp/

https://mailcow.github.io/mailcow-dockerized-docs/firststeps-ssl/#how-to-use-your-own-certificate

https://hub.docker.com/r/jovobe/mailcow-traefik-acme-adapter

Teile diesen Beitrag
Christian

55 Kommentare

  1. Hi Christian,

    Great post. I was looking for this tutorial. I followed you steps first to set up traefik which is working fine and then mailcow.
    But when I do docker-compose up for mailcow. It first of does not add a certificate in traefik/data/acme.json and hence I can not reach the service. When I check the logs of traefik container this is what I get:

    time=“2020-04-18T03:09:50+02:00″ level=error msg=“service \“nginx-mailcow\“ error: unable to find the IP address for the container \“/mailcowdockerized_nginx-mailcow_1\“: the server is ignored“ container=nginx-mailcow-mailcowdockerized-dd47441f698b9238afad41df1362253b6392fd5da10ba38d7134e3d221bc3b74 providerName=docker

    Do you know what could be the issue?

    Thanks.

  2. Hallo,

    Du erzählst leider nichts zu deiner DNS-Config? Wie sind die Erfahrungen mit Updates der Container, funktioniert das über traefik auch einwandfrei?
    Sind bei dir Mails schon mal im SPAM auf externer Seite angekommen? Habe gehört das es hierbei immer wieder Probleme gibt

  3. Hallo und Danke für das HowTo wirklich sehr hilfreich und toll dokumentiert.
    Ich habe bereits eine MailCow Instanz auf einem anderen Server laufen. Soweit kein Problem. Nun habe ich einen neuen Server aufgesetzt und da ist mir folgendes Aufgefallen.

    Du setzt hier Traefik> V2 ein. Aktuell bei mir ist dies 2.2.1.
    Damit die Certificates von LE in den MailCow container gelangen, werden die mit humenius/traefik-certs-dumper aus dem acme.json Store extrahiert und nach
    Mailcow /opt/containers/mailcow/data/assets/ kopiert. Wobei hier nur das Cert kopiert wird mit dem Namen myserver.de.

    Aber das passiert gar nicht.

    danielhuisman/traefik-certificate-extractor unterstützt hier gar kein V2 das jedoch Traefik nutzt.
    Manuell habe ich hier den Container aufgerufen:

    docker run -d –rm -v /opt/containers/traefik/data:/app/data -v /opt/containers/mailcow/data/assets/ssl:/app/certs danielhuisman/traefik-certificate-extractor

    Die Ausgabe hier ist nur :
    Certificate storage found (acme.json)
    ‚Account‘

    So fand ich auch den Hinweis von Daniel hier:

    https://github.com/DanielHuisman/traefik-certificate-extractor/issues/23

    das Version 2 nicht unterstützt ist und auch nicht in zukunft unterstützt wird. Er hat auch recht, dass Traefik hier nicht von Haus aus den Export unterstützt.

    Daniel hat auch noch einen Hinweis auf: ldez/traefik-certs-dumper hinterlassen.
    Damit gelingt der Extract aber im PEM Format:

    docker run -v /home/micsen/certs/:/data/certs -v /opt/containers/traefik/data/acme.json:/acme.json ldez/traefik-certs-dumper:latest file –version v2 –dest /data/certs/ –domain-subdir

    Das geht soweit, aber die Certs werden hier im PEM Format ausgegeben.

  4. Hallo,

    super Seite und Anleitungen. Ich studiere und installiere schon seit Tagen. In dieser Anleitung steht in der Überschrift „…mit Antivirus, Spam Filer,“. Aber zu zeigst nur wie der Clam AV deaktiviert werden kann. Kannst du hier noch nachlegen?

  5. Hallo,

    Ist es denn möglich, dass man neben Mailcow auch weitere Container zum laufen bringen kann? z.B. WordPress / Nextcloud usw

    Bisher war es meines Wissens immer so, entweder Mailcow oder WordPress usw.

    Hat sich daran etwas geändert?

    VG Hardy

  6. Leider bekommt mailcow bei mir keine Zertifikate – also Warnmeldungen vom Browser.

    Habe alles nach Anl. gemacht.

    Hat jemand ne Idee für mich?

    VG Hardy

  7. Mein Mailserver läuft nun. Kann z.B. mit Outlook senden/empfangen, aber von einer WordPressinstallation kann ich keine Mails versenden.

    Habe mehrere Plugins probiert – nix.

    Gibt es da evtl. eine besondere Konfig? Rootserver – Mailcow – WordPress – Email???

    vlt bekomme ich ja diesmal einen Tipp… 🙂

    VG Hardy

  8. Hallo

    Vielen Dank dass du dir die Arbeit machst und diese tollen Anleitungen bereit stellst.

    Bei 6. Zertifikate überprüfen benutzt du auf einmal mx.eurodomain.de un verweist daruf das mx stehen bleiben muss. Zuvor wurde immer mit mail.eurodomain.de gearbeitet.
    Wenn ich mx benutze bekomme ich
    „139935361738048:error:2008F002:BIO routines:BIO_lookup_ex:system lib:../crypto/bio/b_addr.c:726:No address associated with hostname
    connect:errno=22“

    Wenn ich mail benutze kommt ein Zertifikat mit „mail.example.org“, was ja laut Anleitung nicht kommen darf.

    Was läuft hier falsch?

  9. Hallo,

    wenn in der docker-compose.override.yaml die Zeile:
    – „traefik.http.routers.nginx-mailcow-secure.tls.certresolver=http“
    fehlt, dann erzeugt doch traefik keine Zertifikate.
    Erst nachdem ich die Zeile eingefüght habe, wurde Zertifikate und traefik_certdumper extrahiert.
    Den Zertifikatstest. mx.xxxxxx.de verstehe ich nicht. Wird den mx irgendwie umgeleitet?
    Bei mir geht der Test nur mit mail.xxxxxx.de

  10. Wenn man keine wildcard cert generierung von traefik einsetzt bräuchte man nicht auch noch diese Zeile?

    – „traefik.http.routers.nginx-mailcow.tls.certresolver=netcup“

    sonst scheint traefik ja keine Zertifikate für diese Subdomains zu generieren: autodiscover|autoconfig|webmail|mail|email

    oder lese ich die config falsch?

    • Hallo,
      ja genau, wenn man keine Wildcard Zertifikate einsetzt, dann benötigt man diese Zeile um ein Zertifikat für die Domain „mail.euredomain.de“ zu beziehen.

      – „traefik.http.routers.nginx-mailcow.tls.certresolver=netcup“

      Ansonsten empfehle ich Wildcards.

      LG
      Christian

  11. Mir fällt gerade was auf. Wenn wir mehrere Domains auf dieser Mailcow Instanz hosten, fehlen den zusätzlichen Domains die Zertifikate weil traefik ja davon ncihts weiß.

    Hier gitb ein Beispiel wie man das lösen könnte, indem traefik nur die Zertifikate für die Hauptdomain erstellt aber Mailcow weiterhin für alle hinzugefügten Domains, wäre super wenn du das Thema aufgreifen würdest, ich schaff das nicht ganz alleine 😉

    https://github.com/mailcow/mailcow-dockerized/issues/3569

  12. Moin,
    so nun habe ich das ein Problem gelöst und jetzt ein neues bekommen.
    Die Mailcow lief bis ich für den Traefik die SSL Einstellung verändert habe.

    Rufe ich mail.meinedomain.de auf bekommen ich vom Browser folgende Fehlermeldung:

    Fehlercode: SSL_ERROR_INTERNAL_ERROR_ALERT

    Ich verzweifel mal wieder.

    • Sieht mir danach aus, als hätte der Traefik noch kein let’s encrypt Zertifikat via ACME geholt. Schau doch mal in die Logs vom traefik (`docker-compose logs` im Verzeichnis, wo die docker-compose.yml des traefiks liegt ausführen) und sag dann bescheid, ob da was steht. Alternativ auch mal die acme.json im /opt/containers/traefik/data Verzeichnis anschauen. Wenn deine Domain da nicht drinnen ist, also kein TLS Zertifikat geholt wurde, dann kann es natürlich nicht funktionieren.

      LG Felix

      • Moin Felix,

        das ist genau das Problem. Erholt einafch für meine Domain „mail.domain.de“ kein Zertifikat.
        Auch wenn ich die Datei acme.json lösche. Für den Traefik.domain.de und Portainer.domain.de holt er das Zerifikat.
        Ich verzeifel langsam

        Gruß

  13. Bei mir wollen scheinbar die Dienste nicht ganz hoch kommen.

    die traefik docker-compose.yml gibt ja 2 acme SANS an:
    – „traefik.http.routers.traefik-secure.tls.domains[0].main=domain.tld“
    – „traefik.http.routers.traefik-secure.tls.domains[0].sans=*.domain.tld“

    Mailcow möchte ich allerdings auf einer anderen Domain betreiben (domain2.tld). Wenn ich der Traefik Doku hier richtig entnehme, sollten eigentlich einfach weitere SANS hinzugefügt werden können:
    https://doc.traefik.io/traefik/v1.4/configuration/acme/

    Aber ist dies möglich in dem ich weitere hinzufüge wie z.B. siehe unten ?
    – „traefik.http.routers.traefik-secure.tls.domains[1].main=domain2.tld“
    – „traefik.http.routers.traefik-secure.tls.domains[1].sans=*.domain2.tld“

    Ich komme auch soweit auf mail.domain2.tld, allerdings ist dort die Meldung während Mailcow initialisiert.

    Den logs konnte ich folgendes entnehmen:
    rspamd-mailcow_1 | Waiting for PHP on port 9001…
    php-fpm-mailcow_1 | Waiting for SQL…
    dovecot-mailcow_1 | Waiting for database to come up…
    sogo-mailcow_1 | Waiting for database to come up…
    postfix-mailcow_1 | Waiting for database to come up…
    watchdog-mailcow_1 | Waiting for SQL..

    Scheint so als würden die Dienste nicht hoch kommen…Traefik sagt:
    Host(`mail.domain2.tld`)
    HostRegexp(`{host:(autodiscover|autoconfig|webmail|mail|email).+}`)

    Die zweite hat auch mein Provider als resolver, allerdings ohne Domains aufgelistet. Der traefik.domain2.tld wiederum zeigt mit beim resolver (hetzner in meinem Fall) alle 3 Domains wie ich Sie in Traffic ans SANS konfiguriert habe.

    Ich hatte bei der override für mailcow noch folgendes eingefügt:
    – „traefik.http.routers.nginx-mailcow.tls.certresolver=hetzner“

    Jemand hier ein idee?

  14. Hallo, vielen Dank für die Anleitung. Leider erhalte ich nach Schritt 5.) folgende Fehlermeldung:
    ERROR: The Compose file ‚/opt/containers/mailcow/docker-compose.yml‘ is invalid because:
    services.nginx-mailcow.ports contains an invalid type, it should be an array

    Was muss ich ändern? Für einen Tipp wäre ich sehr dankbar.

    • Könntest du mal die docker-compose.yml auf nen Paste service (hastebin.com, pastebin.com o.Ä.) packen. Natürlich mit abgeänderten Domains & Passwörtern (falls Vorhanden). Dann kann man dir evtl weiterhelfen 🙂

  15. Hallo Christian, vielen Dank für deine Anleitung!
    Ich wollte fragen, wie man es möglich macht, dass das webmail oder webinterface unter einer anderen subdomain als dem hostname nach außen offen macht. Statt server01-mail.euermailserver.de würde ich gerne webmail.euermailserver.de verwenden.

    Wäre wunderbar, wenn du dazu eine Idee hättest.

  16. Hallo

    leider bekomme ich jedes mal ein fehler das der dienst dovecot-mailcow_1 nicht startet mit dieser fehlermeldung

    ERROR: for dovecot-mailcow Cannot start service dovecot-mailcow: OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.go:459: container init caused: process_linux.go:382: setting rlimits for ready process caused: error setting rlimit type 6: operation not permitted: unknown
    ERROR: Encountered errors while bringing up the project.

    weiß einer was ich machen kann

    vielen dank

  17. Hallo Mike,
    probier mal den Host zu aktualisieren und das Mailsystem mit der update.sh. Hast du evtl etwas mehr vom Log für uns? Dann kann man sich ein besseres Bild davon machen. Bist du sonst nach der Anleitung vorgegangen?

    LG Felix

  18. Ich habe den Mailcow-Server nicht zum Laufen bekommen, weil Let’s Encrypt fehlschlug:
    […] level=error msg=“service \“nginx-mailcow\“ error: unable to find the IP address for the container \“/mailcowdockerized_nginx-mailcow_1\“: the server is ignored“ providerName=docker container=nginx-mailcow-mailcowdockerized […]

    Weiter geholfen hat mir das hier: https://www.reddit.com/r/mailcow/comments/g8ydn0/mailcow_setup_behind_traefik_proxy_causes_https/g0pt29n/

    Was ist zu tun?

    In „docker-compose.override.yml“ ist eine Zeile hinzuzufügen und eine Zeile zu ändern:

    Hinzufügen: – „traefik.http.routers.nginx-mailcow-secure.tls.certresolver=http“

    Ändern: – „traefik.http.services.nginx-mailcow.loadbalancer.server.port=80“
    -> – „traefik.http.services.nginx-mailcow.loadbalancer.server.port=8080“

    Die fertige docker-compose.override.yml sieht dann so aus:

    […]
    nginx-mailcow:
    labels:
    – „traefik.enable=true“
    – „traefik.http.routers.nginx-mailcow.entrypoints=http“
    – „traefik.http.routers.nginx-mailcow.rule=HostRegexp(`{host: (autodiscover|autoconfig|webmail|mail|email).+}`)“
    – „traefik.http.middlewares.nginx-mailcow-https-redirect.redirectscheme.scheme=https“
    – „traefik.http.routers.nginx-mailcow.middlewares=nginx-mailcow-https-redirect“
    – „traefik.http.routers.nginx-mailcow-secure.entrypoints=https“
    – „traefik.http.routers.nginx-mailcow-secure.rule=Host(`mail.euredomain.de`)“ ###### hier eure FQDN angeben #####
    – „traefik.http.routers.nginx-mailcow-secure.tls=true“
    – „traefik.http.routers.nginx-mailcow-secure.tls.certresolver=http“
    – „traefik.http.routers.nginx-mailcow-secure.service=nginx-mailcow“
    – „traefik.http.services.nginx-mailcow.loadbalancer.server.port=8080“
    – „traefik.docker.network=proxy“

    networks:
    […]

    Viele Grüße
    Hein

  19. Hallo Christian,

    vielen Danke für deine Anleitung, Sie hat bei mir super funktioniert. Und der Mail Server läuft soweit.
    Nun habe ich aber noch Probleme mit derm LE Certifkate. Ich bekomme keine gültigen LE Certifikate. Soweit ich das in erfahrung bringen konnte liegt es an STRATO, das die wohl LE nicht wirklich gut unterstützen. Es gibt workarounds, aber die verstehe ich leider nicht. Hast du da mehr erfahrungen ? Ich könnte da echt ein wenig unterstützung gebrauchen. Natürlich sind auch alle anderen Profis und Mitleser gefragt. Es wäre echt super nett von euch

    Gruß
    Marhal

    • Hallo Marhal,
      was bekommst du denn für einen Output in den Logs vom traefik? Welche Fehler werden gemeldet. Wie sieht dein DNS aus?

      LG Felix

  20. Hallo,

    dank der super Anleitungen konnte ich auch meinen Server hochziehen 😀
    Nur die Zertifikate sind noch ein Knackpunkt.

    Den Anleitungen nach habe ich verstanden, dass die Zeile
    – „traefik.http.routers.nginx-mailcow.tls.certresolver=netcup“
    für die wildcard Variante mit einem DNS bei netcup (api) verwendet wird und die Zeile
    – „traefik.http.routers.nginx-mailcow-secure.tls.certresolver=http“
    wenn der mailcow container selbst die Let’s Encrypt Zertifikate erzeugen soll.
    Ich habe die zweite Variante gewählt und traefik ohne wildcard im Einsatz. Für das Webinterface unter mail.xxxyyyzzz.de (port 443) funktioniert es (Test im Browser), allerdings bekomme ich für imap (TLS, port 143) und smtp (TLS, port 587) ein self-signed Zertifikat von mailcow (OU) im Test unter Anleitungspunkt 6.

    Wie kann ich für imap und smtp auch ein Let’s Encrypt Zertifikat bekommen? Benötige ich einen eigenen certresolver für imap/smtp?

    bg,
    Tobias

  21. Hallo,
    vielen Dank für die Anleitung. Hätte noch eine Frage an der ich schon etwas rumgesucht , aber noch keine Lösung gefunden habe. Wie müsste die Konfig für traefik aussehen, wenn man bestimmte Ports (z.B. die mailcow Admin UI) nur über ein spezielles Interface (z.b. wg0 für einen Wireguard Tunnel) verfügbar machen will?
    Vielen Dank und Grüße
    bBernhard

  22. Hallo,
    danke für deine tollen Anleitungen. Ich habe dein Setup bei mir noch um einiges erweitert:
    Zertifikate werden jetzt für die Domains generiert die in Mailcow als EMail Domains eingerichtet sind. Kein manuelles Anpassen von labels mehr, erledigt ein zusätzlicher Container der über http eine Traefik Konfiguration generiert
    Ausserdem läuft das komplette Setup (mailcow, traefik, portainer) mit docker und user namespace remapping.
    Die Anpassungen sind aber ein bisschen viel für einen Kommentar. Ich kann das ja mal zusammenschreiben, falls Interesse besteht.

    Danke und viele Grüsse
    Alex

  23. Hallo zusammen,

    zunächst möchte ich mich recht herzlich für die super Anleitungen bedanken, Chapeau!

    Eine kurze Frage habe ich dennoch:

    Ich hatte zuvor nur Mailcow auf dem Server, d.h. ohne Reserve-Proxy. Ferner hatte ich Nextcloud über das Helper-Script installiert und auch gerne genutzt.

    Jetzt jedoch scheint das Routing zu der Mailcow-Nextcloud-Instanz nicht mehr zu funktionieren.

    Hat jemand eine Idee? Muss ich ggf. noch Routing-Optionen anpassen?

    Besten Dank im Voraus.

  24. Dear fellows,

    I have been experimenting with these three guides.

    a) https://goneuland.de/traefik-v2-reverse-proxy-fuer-docker-unter-debian-10-einrichten/
    b) https://goneuland.de/traefik-v2-https-verschluesselung-sicherheit-verbessern/
    c) https://goneuland.de/mailcow-e-mail-komplettsytem-mit-antivirus-spam-filer-webmail-webfrontend-installieren-mittels-docker-und-traefik/

    RESULT:

    a -> b -> c => fails (Did anyone get this to work?)
    a -> c => succeeds

    I am confused about two things.

    1. In which file do I have to insert this line in my Mailcow configuration, as described in part 6 in guide b?

    labels:
    – „traefik.http.routers.-secure.middlewares=secHeaders@file“

    2. If I succeeded with a -> c, how do I retrospectively apply the steps in guide b? Do I have to do something so that the certificates will be regenerated, delete some generated files somewhere or restart the containers using a specific command?

    Any assistance will be greatly appreciated!

  25. Moin,

    erst einmal möchte ich dir für eine Arbeit danken! 🙂
    Ich schaue regelmäßig auf deinem Blog vorbei und bin seither ein echter traefik Freund geworden.

    Für mailcow bin ich letztens auf folgenden Eintrag im github gestoßen.
    https://github.com/mailcow/mailcow-dockerized/issues/3569

    Wäre echt schick, wenn der dort gezeigte Lösungsansatz funktionieren würde! So könnte man auf den ‚humenius/traefik-certs-dumper‘ verzichten und hätte auch noch weniger Arbeit bei der Konfiguration des ganzen.

    Kannst du dir das mal anschauen und was meinst du dazu? 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.