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.
Datum | Änderungen |
---|---|
29.03.2020 | Erste Version dieser Anleitung |
31.03.2020 | Hinzugefügt: docker-compose.override.yml, Test der Zertifikate |
15.04.2020 | Hinzugefügt: Clam AV deaktivieren |
19.05.2020 | Hinzugefügt: Kapitel DNS |
30.04.2021 | Anleitung funktioniert jetzt ohne Wildcard Zertifikate. Reihenfolge der Abschnitte wurde angepasst. |
09.08.2022 | Anleitung auf Docker Compose v2 angepasst. Zusätzlich wurde noch MTA-STS in die Anleitung integriert. |
11.08.2022 | Verweis auf CrowdSec integriert, Traefik Anleitung Verweis angepasst, Docker Compose angepasst |
11.08.2022 | Fehler bei Certbot behoben. Hilfen von Jonathan eingefügt. |
30.10.2022 | Kapitel 1 angepasst. Hinweise zu Docker Compose v2 entfernt. Git Installation entfernt. |
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
Inhaltsverzeichnis
0. Grundvoraussetzungen
- Docker & Docker Compose v2 (Debian / Ubuntu)
- Traefik v2 – Reverse-Proxy mit CrowdSec einrichten
1. 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 ein:
- Mail server hostname (FQDN): mail.euredomain.de
- Timezone [Europe/Berlin]: mit Enter bestätigen oder anpassen und dann bestätigen
- Available Branches: mit “1” bestätigen
Bei mir sieht dies so aus:
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”. Dies befindet sich ca. in Zeile 380. Dort müsst ihr folgendes ändern:
Zeilen unter "nginx-mailcow" 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: '3.9' services: nginx-mailcow: labels: - "traefik.enable=true" - "traefik.http.routers.nginx-mailcow.entrypoints=http" - "traefik.http.routers.nginx-mailcow.rule=HostRegexp(`{host:(autodiscover|autoconfig|mail|mta-sts|imap|pop3|smtp).+}`)" - "traefik.http.routers.nginx-mailcow-secure.entrypoints=https" - "traefik.http.routers.nginx-mailcow-secure.rule=Host(`mail.euredomain.de`)" - "traefik.http.routers.nginx-mailcow-secure.rule=HostRegexp(`{host:(autodiscover|autoconfig|mail|mta-sts|imap|pop3|smtp).+}`)" - "traefik.http.routers.nginx-mailcow-secure.rule=Host(`mail.euredomain.de`, `autodiscover.euredomain.de`, `autoconfig.euredomain.de`, `mta-sts.euredomain.de`)" - "traefik.http.routers.nginx-mailcow-secure.middlewares=default@file" - "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=80" - "traefik.docker.network=proxy" networks: - proxy certdumper: image: humenius/traefik-certs-dumper:latest restart: unless-stopped network_mode: none command: --restart-containers mailcowdockerized-postfix-mailcow-1,mailcowdockerized-dovecot-mailcow-1 volumes: - /opt/containers/traefik/data:/traefik:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/assets/ssl:/output:rw environment: DOMAIN: ${MAILCOW_HOSTNAME} ACME_FILE_PATH: "/traefik/acme_letsencrypt.json" 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.rule=Host(
mail.euredomain.de
,autodiscover.euredomain.de
,autoconfig.euredomain.de
,mta-sts.euredomain.de
)”–> hier nur die Domain 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 MTA-STS aktivieren
Nun müssen wir noch eine Datei erzeugen, damit später MTA-STS (Mail Transfer Agent Strict Transport Security) genutzt werden kann. Bei dem Feature geht es darum, dass euer E-Mail Server dem Sender mitteilt, dass dieser bitte eine gesicherte TLS Verbindung zu eurem Server aufbauen soll.
Gebt nun folgendes auf eurer Konsole ein:
mkdir -p /opt/containers/mailcow/data/web/.well-known/ nano /opt/containers/mailcow/data/web/.well-known/mta-sts.txt
Inhalt:
version: STSv1 mode: enforce max_age: 15552000 mx: mail.euredomain.de mx: *.euredomain.de
folgendes müsst ihr anpassen:
- mail.euredomain.de –> eure Domain wie im Schritt 3
- *.euredomain.de –> dies auch entsprechend eurer Domain anpassen
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
- Alle IP Adressen in der Docker Compose anpassen
- 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 #MTA-STS mta-sts CNAME mail.euredomain.de _mta-sts TXT v=STSv1; id=20220231031800Z _smtp._tls TXT v=TLSRPTv1; 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.
Wenn dies nicht klappen sollte, dann könnt ihr hier nachschauen. @psycho0verload hat eine Anleitung geschrieben, wie ihr die Zertifikate löschen und neu einbinden könnt.
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 solltet ihr direkt euren DKIM Key sehen:
Diesen gebt ihr nun in eurem DNS Server ein.
#Name Typ Wert dkim._domainkey TXT v=DKIM1;k=rsa;t.....
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.
12.4 MTA-STS testen
Dazu gehst du auf folgende Webseite: https://www.checktls.com/TestReceiver
Hier gebt ihr nun eure Domain an und wählt dann noch den MTA-STS Test aus. Wichtig ist, dass es einige STUNDEN dauern kann, bis die DNS Einstellungen übernommen wurden von allen Servern.
Wenn alles geklappt hat, dann solltet ihr folgendes sehen:
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. Mailcow zusätzlich mittels CrowdSec absichern
Bei CrowdSec handelt es sich um eine open source Software, welche euch zusätzlichen Schutz bringt. Wie ihr CrowdSec zusammen mit Mailcow einrichten könnt, erfahrt ihr hier.
16. Quellen
https://github.com/mailcow/mailcow-dockerized
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
War es nicht so, dass man bei der traefik-Installation von Psycho0verload in den traefik-labels Zeile 2 und 3 auskommentiert, da der redirect von http auf https bereits in der traefik.yml erfolgt (vgl. https://goneuland.de/traefik-v2-reverse-proxy-mit-crowdsec-einrichten/#8_Aeltere_Anleitungen_anpassen)?
Oder müssen die beim Aufsetzen von Mailcow doch genauso stehen bleiben?
Hallo,
ich versuche mich mal wieder an einem der tollen Tutorials. Nach einigem Hin und Her konnte ich mich nun zum ersten Mal bei Mailcow anmelden. Leider lande ich nur auf einer weißen Seite unter der URL meine.domain.de/debug. Was habe ich falsch gemacht?
Viele Grüße
Frank
hat sich erledigt.. funktioniert erstmal
Hallo Zusammen,
Ich habe das Problem, das Crowdsec mich kurz nach erfolgreicher Anmeldung an SoGo sperrt. Begründung LePresidente/http-generic-403-bf, Kennt jemand eine Lösung zu dem Problem?
Hey zusammen,
google konnte mir irgendwie nicht helfen.
Ich habe das Problem, dass Outlook 2019 über activesync nach kurzer Zeit die Verbindung zu Mailcow verliert.
Nach Neustart von Oulook oder drücken auf Senden/Empfangen ist die Verbindung für eine kurze Zeit wieder aktiv bis die Anzeige wieder anzeigt dass es keine Verbindung gibt.
Ich habe alles wie hier in der tollen Anleitung gemacht ich kann leider auch nicht sagen ob das Problem neu ist oder schon länger besteht.
Es ist mir nur in letzer Zeit sehr aufgefallen.
Vielleicht hat jemand einen Tipp an welcher stelle ich schauen muss.
Gruß Dirk
Hallo Christian,
wie ich sehe, nutzt du auch Portainer. Jetzt mal eine Frage an dich, wenn du die Container außerhalb von Portainer startest, kannst du sie innerhalb von Portainer gar nicht weiter “bearbeiten”. Die Stacks sind doch alle immer mit “Limited” blockiert. Wie arbeitest du dann mit Portainer?
LG Frank
Auch hier wieder danke, echt toll was du machst! Leider funktionierts bei mir leider nie auf Anhieb, was vermutlich an mir liegt und mich etwas verwirrt 😉
Also bei starten mit “docker compose -f /opt/containers/mailcow/docker-compose.yml up”
bekomme ich diese Meldung:
mit vorangestellten sudo :
auch klar 🤔😶
Gruß dstar
Hi. Super Anleitung. Funktioniert wirklich sehr gut auch für einen Neuling auf dem Gebiet Docker/Mailcow/Traefik. Aktuell bin ich dabei eine weitere Domain in Mailcow zu erfassen. Dies geht auch ziemlich gut. Das eintzige was ich nicht schaffe ist Zertifikate für SMTP für die hinzugefügte Domain zu bekommen. Ich habe die neue Domain auch in die overide.yml aufgenommen und Mailcow Docker neu gestartet. Jedoch muss ich beim SMTP-Server (Thunderbird) immer die “Stammdomain” der ersten Mailcow-Installation angeben. Für die zweite Domain gibt es kein Zertifikat (gem. Thunderbird). Auch mail-tester-com (10/10) gibt an, dass die Stammdomain verwendet wird (Hostname). Ist es möglich, dass auch die zweite Domain voll unterstützt wird oder habe ich einfach etwas nicht verstanden….. Hängt dies allenfalls von der rDNS ab (die ist natürlich auf die Stammdomain). LG Donric
Hey bin neu hier und erstmal ein großen Dank. Ich habe alles soweit auch hinbekommen.
Leider scheitere ich daran, dass ich die Verbindung mit Imap über Nextcloud nicht hin bekomme und ich weiß nicht woran es liegen kann.
Thunderbird und Handy funktioniert soweit eigentlich.
Nur bei Nextcloud egal welche Einstellungen ich mache scheitere ich.
Auch wenn ich z.B. über die Telekom die Emails abrufen möchte wird es nichts mit einer Verbindung.
Auch Outlook habe ich Probleme hier habe ich auch was im Netz gefunden “alter Weg der Einrichtung”
Das ganze läuft auf einem VPS 500 G10s von NetCup mit Debian 11 Image. Die Domain ist über United Domains gehostet und DNS einträge sind gemacht.
Ich weiß es könnte mehr RAM sein aber das dürfe doch nicht das Problem sein soweit läuft alles stabil…
Vielleicht kann mit hier jemand weiterhelfen und wenn noch mehr Infos benötigt werden (was ich vermute) bitte einfach melden.
Danke schon mal im Voraus.
LG Dirk
Nachdem gestern ja 22.04.1 von Ubuntu rauskam die Frage: Hat schon jemand das Update von 20.04 gemacht und wie macht ihr das, damit alles geschmeidig läuft? Alle Container erst runter fahren, dann updaten oder on the fly?
WOW, wie “geil” ist das denn. Da geht man zur Arbeit und trifft sich dann noch mit Freunden im Biergarten und eine Lösung des Problems ist da. Funktioniert bei mir einwandfrei. Ach ja, falls es nicht klappt den Server rebooten hat bei mir geholfen. Vielen Dank für die Arbeit….!
Leider kein erfolgt. Alte Zertifikate gelöscht, ./upgrade gemacht und immer noch Warnung thunderbird….
Hi, ich hatte das so stehen: ACME_FILE_PATH: “/traefik/acme_letsencrypt.json” nun zu ACME_FILE_PATH: /traefik/acme_letsencrypt.json geändert. Im Firefox steht sichere Verbindung mit letscrypt. Thunderbird will immer das Zertifikat von willich mailcow laden. Gibt eine Zertifkatswarung. Gleiche Problem bei meinem neuen gekauften Server. Gleiche Fehlermeldung.
Sorry, meine den mx Eintrag.
depth=0 C = DE, ST = NRW, L = Willich, O = mailcow, OU = mailcow, CN = mail.xxx.de
verify error:num=18:self signed certificate
verify return:1
Wollte nun den Mailserver wegen clowdsec neu aussetzen. Hier nach dieser Anleitung. Ich habe nun aber ein Problem mit den Zertifikaten. Ich habe SKIP_LETS_ENCRYPT=y gesetzt und bekomme aber immer wieder die Zertifikate von NRW Willich, mailcow für mein mail.sss.de. und nicht die von letcrypt.
Könnt ihr das bitte mal prüfen?
Wie macht ihr es eigentlich in der Docker-Compose-Datei mit den mehreren Hosts? Ich habe es jetzt aktuell so gelöst:
“traefik.http.routers.nginx-mailcow.rule=Host(`domain.de`)||Host(`mail.domain.de`)||Host(`autoconfig.domain.de`)||Host(`autodiscover.domain.de`)||Host(`mta-sts.domain.de`)”
Bin damit aber nicht ganz glücklich, da das in der Traefik-Dashboard-Darstellung das Layout zerreißt. Geht das auch besser und schöner? Bin über Ideen dankbar. 🙂
Hey Christian,
mit dem aktuellen Update von Mailcow solltest du deine Anleitung an docker compose v2 anpassen 🙂
Ich finde es am einfachsten mit https://docs.docker.com/compose/install/compose-plugin/
Grüße
Ich mal wieder…
Weiß jemand wie man mit traefik in Verbindung mit mailcow das Thema : MTA-STS angeht?
Traefik muss wohl ein Zertifikat dafür erstellen.
Würde mich über eine kleine Anleitung sehr freuen.
Hallo
Ich habe die Anleitung auf meinem Server umgesetzt und es hat auch super funktioniert. Leider bekomme ich nun die Meldung das meine Zertifikate in 7 Tagen ablaufen. Es scheint so das die Zertifikate nicht automatisch erneut wird. Kann mit jemand ein Tipp geben was ich machen kann um das Problem zu lösen?
Danke schonmal
Hallo Christian,
ich habe es noch nicht ausprobiert, aber ist es Notwendig in UFW die Ports zu öffnen. Ich vermute schon. Das wäre noch ein gute ergänzung zu deinem Tutorial.
Anonsten vielen Dank für deine Mühe!
Grüße
Hi,
ich bin deiner Anleitung gefolgt, leider wird aber für Mailcow kein Zertifikat in der acme.json erstellt, deshalb kann ich die Website auch nicht aufrufen und erhalte einen ERR_SSL_PROTOCOL_ERROR im Browser.
Online habe ich leider keine Lösung zu dem Problem gefunden.
MfG
Stefan
Danke für die Anleitung soweit sieht alles ganz gut aus in einem Traefik werden aber die Domains aus dem SAN: imap, smtp, pop3 nicht angezeigt?! 🙂 jemand eine Idee?
Hallo,
ich habe alles gemacht wie im Tutorial erklärt.
Die ganzen Docker Images laufen auch laut “docker ps -a” und sind auch im traefik network.
Jedoch löst sich “mail.meineDomain.dev” einfach nicht auf (traefik.meineDomain.dev funktioniert).
Und in Traefik ist die Anwendung auch sichtbar.
Weiss einer woran das liegen könnte ?
Vielen Dank.
Hallo Christian, vielen Dank für dein Tutorial.
Mailcow läuft bei mir, dank deiner Anweisungen, einwandfrei. Allerdings habe ich noch kleine Probleme mit deiner Config:
1. die Domains “autodiscover.domain.tld” und “autoconfig.domain.tld” bekommen offenbar kein SSL Zertifikat, somit funktioniert das Autodiscover für Activesync leider nicht
2. Wie bekommen andere Domains, die ich bei Mailcow hinzufüge auch ein SSL Zertifikat?
3. Wie kann ich SOGo unter einer anderen Subdomain (z.B. webmail.domain.tld) erreichbar machen
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? 🙂
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!
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.
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
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
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
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
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
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
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
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.
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.
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?
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.
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
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,
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
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?
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
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
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
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?
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.
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
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.