,

Mailserver Mailcow per Docker auf VPS installieren

Lesedauer 11 Minuten

Bei Mailcow handelt es sich um ein Open Source Projekt. Es verbindet verschiedene Dienste wie Dovecot, ClamAV, Postfix, SoGo und viele mehr unter einem Interface. Der Vorteil für dich ist, dass du innerhalb kurzer Zeit einen komplett eigenständigen E-Mail-Server mit vielen Extras hast. Du musst also nicht lange in Konfigurationsdateien herumsuchen, wie das früher noch der Fall war. Eine Funktionsübersicht findest du hier: https://mailcow.github.io/mailcow-dockerized-docs/

Falls du Support für den Server brauchst, so hilft dir der Entwickler gegen eine Gebühr weiter. Weitere Infos dazu findest du hier: https://www.servercow.de/mailcow#sal

Inhaltsverzeichnis

Hinweis
Einige Screenshots zeigen das Backend unseres Schwesterunternehmens dogado. Die gezeigten Schritte können jedoch auch im easyname-Backend durchgeführt werden.

1. Überblick

  • Verwendetes System: Debian 10 64 bit
  • Testserver: VPS General Purpose
  • Genutzter User: Ich nehme alles als „root“ vor
  • Zeitdauer: ca. 30 Minuten Arbeit + eventuell einige Stunden Wartezeit auf DNS Einträge
  • Schwierigkeit: Mittel
  • Besonderheiten:
    • Grundlage ist diese Anleitung: Traefik Reverse Proxy installieren
      Diese Anleitung muss zuerst ausgeführt werden.
    • Die Installation von Docker / Docker Compose wird hier vorausgesetzt.

2. Mailcow installieren

2.1 Vorab-Infos zu yml Dateien

Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Du kannst den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator

2.2 Vorbereitung

Diese Anleitung basiert auf dem aktuellen Debian 10 Betriebssystem. Mailcow werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates und eine schnelle Installation.

Um Mailcow neben anderen Diensten auf unserem Server betreiben zu können, nutzen wir hier den Reverse Proxy Traefik. Die Anleitung dazu findest du hier: Traefik Reverse Proxy installieren

2.2.1 Verzeichnis erstellen

Wir erstellen uns ein neues Verzeichnis, in welchem wir später alle Daten von Mailcow abspeichern. Dazu geben wir folgendes in der Konsole ein:

mkdir -p /opt/containers/mailcow

Du kannst hier auch ein anderes Verzeichnis verwenden. Musst dann aber die gesamte Anleitung entsprechend anpassen.

2.2.2 git installieren

Um uns die neueste Version von Mailcow zu installieren, müssen wir uns git installieren. Gib dazu folgendes in deine Konsole ein:

apt-get update
apt-get install git

2.2.3 mailcow von git klonen

Nun kopieren wir uns die neuste Version von Mailcow auf unseren Server. Gib dazu folgendes ein:

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

2.2.4 Konfigurationsdatei für Mailcow erstellen

Hier reicht es ein Skript auszuführen. Gib dazu folgenden Befehl ein:

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

Hier gibst du nun den FQDN (Fully Qualified Domain Name) deines Servers ein. In meinem Fall ist das mail.testbereich.net

Konfigurationsdatei für Mailcow erstellen

2.2.5 Docker Compose anpassen

Nun passen wir die Docker Compose Datei an, welche wir uns eben vom Server heruntergeladen haben. Gib dazu folgendes ein:

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

Nun scrollst du einige Zeit nach unten bis du den Abschnitt „nginx-mailcow“ (ca. Zeile 335) findest. Hier kommentierst du folgendes aus:

      #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}"
Docker Compose anpassen

Jetzt kannst du die Datei wieder verlassen.

2.2.6 docker-compose.override.yml erstellen

Nun erstellen wir uns eine neue Datei, welche alle unsere Änderungen beinhalten wird. Gib dazu folgendes in deine Konsole ein:

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

In die Datei kopierst du nun folgenden Code:

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: 

    dockerapi-mailcow: 

      oom_kill_disable: false 

    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 Traefiks acme.json file 

          #   in this case Traefik is started from its own docker-compose in ../traefik 

          - /opt/containers/traefik/data:/traefik:ro 

          # mount mailcows 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 

Nun müssen wir noch einiges anpassen.

  1. „traefik.http.routers.nginx-mailcow-secure.rule=Host(mail.euredomain.de)“ –> gib hier deinen FQDN wie in Schritt 1.3.4 ein. Bei mir ist die „mail.testbereich.net“
  2. „traefik.http.routers.nginx-mailcow-secure.tls.domains[0].main=mail.euredomain.de“ –> gib hier deinen FQDN wie in Schritt 1.3.4 ein. Bei mir ist die „mail.testbereich.net“
  3. „traefik.http.routers.nginx-mailcow-secure.tls.domains[0].sans=imap.euredomain.de, smtp.euredomain.de, pop3.euredomain.de“ –> ändere hier nur das „euredomain.de“ ab. Bei mir also in „testbereich.net“

2.2.7 Eigene Zertifikate deaktivieren

Nun deaktivieren wir, dass mailcow selbst Zertifikate generiert. Diese Aufgabe soll Traefik für uns übernehmen. Dazu gibst du folgendes in deine Konsole ein:

nano /opt/containers/mailcow/mailcow.conf

Ändere hier nun folgendes ab:

bisher

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

änderst du zu

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

2.2.8 Virenscanner deaktivieren (optional)

Wenn du nicht willst, dass deine E-Mails auf Viren gescannt werden bzw. wenn du nur wenig RAM in deinem Server hast, dann kannst du einfach den Clam AV Virenscanner deaktivieren.

Gib dazu folgendes ein:

nano /opt/containers/mailcow/mailcow.conf

Hier änderst du folgendes ab:

bisher

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

neu

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

3. Mailcow starten

Nach diesen ganzen Einstellungen können wir nun endlich mailcow starten. Gib dazu folgendes in die Konsole ein:

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

4. DNS-Einstellungen anpassen

Hinweis
Die DNS-Einstellungen bei easyname findest du, wenn du dich im Kunden-Login eingeloggt hast unter „Domains„, dann auf das Stift-Symbol neben der Domain. Danach auf „DNS“ und dann „DNS-Eintrag hinzufügen

Nun musst du noch die DNS-Einstellungen anpassen, damit deine E-Mails auch zugestellt werden können. Wichtig zu wissen ist, dass es mehrere Stunden dauern kann, bis alle Einstellungen im „Internet“ übernommen werden. Also warte dann gegebenenfalls einige Stunden, bevor du die Einstellungen testet.

4.1 Reverse DNS anpassen

Dazu gehst du im Easyname Login unter „Server“ und klickst auf „Login“, um zum easyname-Cloudpit zu gelangen.


Anschließend gehst du auf „Cloud Server“ und wählst dann „Übersicht“ aus.

Cloud Server im Cloupit

Nun siehst du all deine Server. Wähle hier deinen Server aus, auf dem du Mailcow installieren willst.

Übersicht aller Server

Klicke nun auf „Netzwerk“.

Cloud Server - Netzwerk im Cloudpit

Jetzt siehst du folgendes:

Netzwerkeinstellungen für vServer

Dies ändere ich jetzt zu „mail.testbereich.net“ ab.

Netzwerkeinstellungen Hostname ändern

Nun speicherst du und nach einigen Sekunden solltest du die Bestätigung sehen.

Achte nur bitte darauf, dass der rDNS Eintrag identisch mit dem „MAILCOW_HOSTNAME“ ist, welchen du in Schritt 1.3.4 vergeben hast.

4.2 DNS-Einträge setzen

Nun müssen wir noch einige DNS-Einträge für deine Domain hinzufügen. Dazu klickst du in CloudPit auf „Webhosting“.

Webhosting im Cloudpit von dogado

Nun siehst du alle Domains, welche du besitzt.

Übersicht aller Domains

Klicke nun auf „Mehr –> DNS-Verwaltung“ bei der Domain, welche du auch im Schritt 1.3.4 angegeben hast.

DNS-Verwaltung einer Domain

Da du bereits die Anleitung zu Traefik (Traefik Reverse Proxy installieren) gemacht haben solltest, sollte es so bei dir aussehen.

DNS-Verwaltungsübersicht

Nun fügst du folgendes hinzu:

NameTypWertPriorität
mailAeure IP
autodiscoverCNAMEmail
autoconfigCNAMEmail
MX 10mail10
# SPF Konfiguration
TXTv=spf1 mx a -all
# DMARC Konfiguration
dmarcTXTv=DMARC1; p=reject; rua=mailto:eureE-Mail@domain.de

Klicke dazu immer auf „Eintrag hinzufügen“.

DNS-Einträge ergänzen

Wähle nun den entsprechenden Typ sowie Wert aus obiger Tabelle aus.

DNS-Eintrag hinzufügen, Typ und Wert eintragen

So sieht es dann bei mir aus, nachdem ich alle Werte hinzugefügt habe:

Fertige DNS-Einträge

Wichtig zu wissen ist, dass hier unter Wert nur „mail“ angezeigt wird. Wenn du auf Speichern klickst, dann wird daraus „mail.euredomain.de“.

Klicke nun unten rechts auf „Speichern“, um die Änderungen zu übernehmen.

DNS-Änderungen speichern

Wenn alles korrekt war, dann sollte folgende Meldung erscheinen.

Ihre DNS Einstellungen wurden übernommen

Bis die Änderungen umgesetzt werden, kann jedoch einige Zeit (Stunden) dauern.

5. Mailcow konfigurieren

Nun beginnen wir mit der Einrichtung unseres E-Mail Servers. Dazu gehst du auf die Domain, welche du bei Schritt 1.3.4 hinterlegt hast. Bei mir ist dies „mail.testbereich.net“. Hier solltest du nun folgendes sehen.

Mailcow konfigurieren Login

Die Benutzerdaten für den ersten Login lauten:

Benutzername: admin
Passwort: moohoo

5.1 Administrator Kennwort / Name ändern

Da das Administrator-Kennwort / Name immer identisch ist, ändern wir dies nun direkt ab. Dazu klickst du auf „Bearbeiten“.

Mailcow Administrator Kennwort / Name ändern

Jetzt erscheint folgender Dialog. Hier kannst du auch den Benutzernamen ändern. Dies kann auch sinnvoll sein, da der Name „admin“ immer von Angreifern als erstes ausprobiert wird.

Mailcow Standard Benutzername ändern

Daher ändere ich diesen auch.

Mailcow Benutzername geändert

Nach dem Speichern siehst du nun, dass der Nutzer umbenannt wurde und das Kennwort nun sicherer ist.

Nutzer in Malcow umbennant

5.2 E-Mail Domain hinzufügen

Nun fügen wir unsere Domain noch in Mailcow hinzu. Dazu klickst du auf „Konfiguration –> E-Mail Setup“.

E-Mail-Setup für Mailcow

Hier sehen wir, dass wir bisher noch keine Domain hinzugefügt haben.

Keine Domain in Mailcow hinzugefügt

Klicke daher nun auf „Domain hinzufügen“.

Domain in Mailcow hinzufügen

Nun gibst du bei „Domain“ deine

Domain ein. In meinem Fall ist dies „testbereich.net“.

Gib hier NICHT mail.euredomain.de ein.

Die restlichen Werte kannst du so lassen. Anschließend klickst du auf „Domain hinzufügen und SOGO neustarten“.

Domain hinzufügen und SOGO neustarten

Nun sollte deine Domain angezeigt werden.

Domain wird angezeigt in Mailcow

5.3 DKIM Schlüssel erzeugen

Um unseren E-Mail-Server sicherer zu machen, fügen wir nun noch einen DKIM Schlüssel hinzu. DKIM dient dazu, die Authentizität der E-Mail-Versender zu überprüfen.

Klicke nun auf „Konfiguration –> Server-Konfiguration“.

Server-Konfiguration in Mailcow

Wähle nun „Konfiguration –> ARC/DKIM-Keys“ aus.

ARC/DKIM-Keys in Mailcow

Hier sehen wir nun, dass bisher noch kein Schlüssel hinterlegt wurde.

Kein hinterlegter Schlüssel in Mailcow

Dies wollen wir nun ändern. Gib dazu bei „Domains“ deine Domain an und wähle 2048 Bit als Schlüssellänge.

Domain angeben und Schlüssellänge wählen in Mailcow

Klicke anschließend auf „Hinzufügen“.

Schlüssel hinzufügen in Mailcow

Nun bekommst du deinen Key angezeigt.

Anzeige des Schlüssels in Mailcow

Diesen Key kopierst du nun und öffnest wieder das easyname cloudpit.io. Dort fügst du nun noch einen weiteren DNS-Eintrag hinzu.

NameTypWert
dkim._domainkeyTXTv=DKIM1;k=rsa;t=s;s=email;p=MIIBIj…

Bei mir sieht dies so aus.

DKIM Domainkey als DNS.Eintrag hinzufügen

Der fertige Eintrag:

Fertiger DNS-Eintrag mit DKIM

Anschließend speichern wir diese Änderung wieder.

DNS Eintrag speichern

5.4 E-Mail-Benutzer anlegen

Nun legen wir unseren ersten E-Mail-Benutzer an. Klicke dazu auf „Konfiguration –> E-Mail-Setup“.

E-Mail-Setup in Mailcow

Dann klickst du auf „Mailboxen“.

Mailboxen in Mailcow

Nun siehst du alle E-Mail Accounts. Bei uns existiert noch keiner.

E-Mail Accounts in Mailcow

Um dies zu ändern, klickst du auf „Mailbox hinzufügen“.

Mailbox hinzufügen in Mailcow

Nun siehst du folgenden Dialog.

Dateneingabe, Mailbox hinzufügen in Mailcow

Mein neuer Benutzer soll max@testbereich.net heißen. Dazu gebe ich bei Benutzername nur „max“ ein. 3GB Speicherplatz sollten zu Beginn reichen. Diesen kannst du später nach Belieben erhöhen.

Einstellungen für Mailbox in Mailcow anpassen

Nachdem du den Benutzer angelegt hast, wird dieser auch direkt angezeigt.

Benutzer in Mailcow anzeigen

6. Web-Mail starten

Nun wollen wir uns mit unserem neuen E-Mail-Benutzer anmelden. Dies kannst du mittels Programms (Outlook, Thunderbird, …) oder mittels Mail Frontend direkt auf dem Server machen. Klicke dazu einfach oben rechts auf: „Apps –> Webmail“.

Webmail in Mailcow

Nun wirst du auf diese Webseite weitergeleitet.

SOGo Login

Gib hier nun die komplette E-Mail-Adresse sowie das Kennwort ein.

SOGo Login Dateneingabe

Nun bist du im Web Mail Programm und kannst hier nun E-Mails lesen und schreiben.

SOGo E-Mails lesen und schreiben

7. DNS-Einstellungen testen

Nun wollen wir alle unsere DNS-Einstellungen testen. Bitte bedenkt, dass es mehrere Stunden (1-2 Tage!) dauern kann, bis die Werte übernommen wurden.

7.1 Überprüfen mittels Mailcow

Nun können wir hier noch überprüfen, ob die DNS Einträge, welche wir in Schritt 3.2 gesetzt haben, bereits gültig sind. Klicke dazu in Mailcow auf „Konfiguration –> E-Mail-Setup“.

E-Mail-Setup für Mailcow

Klicke nun hinter deiner Domain auf DNS.

DNS in Mailcow

Nun erscheint ein kurzer Hinweis, dass es bis zu 24 Stunden dauern kann, bis die Einträge übernommen werden.

Hinweis von Mailcow

Nach ca. 30 Sekunden erschien bei mir dann diese Übersicht.

DNS Übersicht in Mailcow

Hier kann man sehen, dass die Einträge bereits gültig sind.

7.2 Überprüfen mittels mail-tester.com

Die Webseite mail-tester.com ermöglicht es dir deine E-Mail-Adresse zu testen.

mail-tester.com

Öffne nun dein E-Mail-Programm bzw. Webmail, um eine E-Mail an die angezeigte Adresse zu schicken. In der E-Mail muss etwas Text stehen, da sonst der Score schlechter ausfällt. Bei mir sieht es beispielsweise so aus:

mail-tester.com testen

Nachdem du die E-Mail verschickt hast, kannst du wieder zu mail-tester.com zurückkehren und dir das Ergebnis anschauen.

mail-tester.com Ergebnis übeprüfen

Dies ist mein Ergebnis:

Ergebnis von mail-tester.com

8. Backups erstellen & wiederherstellen

Nun wollen wir uns noch anschauen, wie du Backups deiner E-Mails erstellen kannst. Dies ist mittels Mailcow sehr einfach möglich. Dazu erstellen wir uns ein neues Verzeichnis, in welchem das Backup später liegen soll.

mkdir -p /opt/containers/mailcow/backup

8.1 Backup erstellen

Nun starten wir das Backup Skript. Gib dazu folgendes in deiner Konsole ein.

BACKUP_LOCATION=/opt/containers/mailcow/backup /opt/containers/mailcow/helper-scripts/backup_and_restore.sh backup all

Wenn du den Pfad von Mailcow oder dem Backup Ordner geändert hast, so musst du diesen Befehl entsprechend anpassen.

Direkt nach der Eingabe des Befehls startet das Backup des E-Mail Servers mit allen Einstellungen, E-Mails und sonstigem.

Wenn du das Backup beispielsweise per Cron automatisch täglich ausführen willst, so kann es sinnvoll sein den Parameter „–delete-days x“ zu nutzen. Dieser bewirkt, dass die Backups, die älter als x Tage sind, gelöscht werden und so nicht der gesamte Server vollgesichert wird.

Der Befehl lautet dann:

BACKUP_LOCATION=/opt/containers/mailcow/backup /opt/containers/mailcow/helper-scripts/backup_and_restore.sh backup all --delete-days 3

8.2 Backup wiederherstellen

Das Wiederherstellen von Backups ist sehr einfach möglich.

Gib dazu einfach folgenden Befehl ein:

MAILCOW_BACKUP_LOCATION=/opt/containers/mailcow/backup ./helper-scripts/backup_and_restore.sh restore

Auch hier musst du den Pfad des Backups anpassen, wenn du diesen verändert hast.

Nachdem du den Befehl ausgeführt hast, bekommst du diesen Dialog angezeigt. Hier kannst du nun wählen, was wiederhergestellt werden soll und von welchem Datum. Ich habe nur ein Backup erstellt, daher wird mir nur dieses angezeigt.

Backup wiederherstellen Mailcow

easyname ist ein erfolgreicher und bekannter österreichischer Anbieter von Cloud-Services, Domains sowie Webhosting bis hin zur Server-Infrastruktur und gehört seit 2020 zur dogado group.
Das Unternehmen ist seit 2006 in Österreich erfolgreich am Markt und inzwischen auch in vielen anderen Ländern weltweit tätig. Sowohl das Team als auch die gehosteten Daten befinden sich in Österreich.

easyname liegt die Datensicherheit besonders am Herzen und stellt daher zu jedem Hosting-Paket auch kostenlose SSL-Zertifikate zur Verfügung. Mit intuitiven Tools zur Erstellung von Websites und Webshops und mit Easy Install Apps wie WordPress, Joomla oder PrestaShop können alle easyname-Kunden schnell in die Online-Welt einsteigen.