Wähle einen Artikel
Mailserver Mailcow per Docker auf vServer / VPS installieren
Mailserver Mailcow per Docker auf vServer / VPS installieren

VPS von dogado - gehostet in Deutschland

Behalte die Kontrolle über deinen vServer/VPS und steuere deine Online-Präsenz souverän. Profitiere von Hochgeschwindigkeits-NVME-SSDs, die bis zu 6-mal schneller sind als herkömmliche.

Server-Racks mit blauer Beleuchtung, Frontpaneele mit Laufwerkschächten, Lüftungsgitter und Netzwerkausrüstung.

Überblick

  • Stand der Anleitung: 09/2026
  • Verwendetes System: Debian 13 64 bit
  • Genutzter User: Ich nehme alles als „root“ vor
  • Zeitdauer: ca. 30 Minuten Arbeit + eventuell einige Stunden Wartezeit auf DNS-Einträge
  • Schwierigkeit: Mittel

Besonderheiten:

Minimale Systemanforderungen

Der Entwickler gibt auf seiner Homepage Mindestanforderungen an:

RessourceAnforderungen
CPU1 GHz
RAMmindestens 6GB
Festplatte20 GB + Platz für E-Mails

Weitere Infos findet ihr hier: https://docs.mailcow.email/getstarted/prerequisite-system/

Mailcow installieren

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 euch ist, dass ihr innerhalb kurzer Zeit einen komplett eigenständigen E-Mail-Server mit vielen Extras habt. Ihr müsst also nicht lange in Konfigurationsdateien herumsuchen, wie das früher noch der Fall war. Eine Funktionsübersicht findet ihr hier: https://docs.mailcow.email/

Falls ihr Support für den Server braucht, so hilft euch der Entwickler gegen eine Gebühr weiter. Weitere Infos dazu findet ihr hier: https://servercow.de/mailcow/#help

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. Ihr könnt 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

Vorbereitung

Diese Anleitung basiert auf dem Debian 13 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. 

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

Ihr könnt hier auch ein anderes Verzeichnis verwenden. Ihr müsst dann aber die gesamte Anleitung entsprechend anpassen.

Benötigte Pakete installieren

Um uns die neueste Version von Mailcow zu installieren, müssen wir noch einige Programme installieren. Gebt dazu Folgendes in eure Konsole ein:

apt update
apt install -y git openssl curl gawk coreutils grep jq dnsutils

Ports überprüfen

Mailcow braucht für den korrekten Mailempfang und -versand verschiedene Ports. Diese wollen wir nun überprüfen:

ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

Bei mir wird Folgendes angezeigt:

root@testbereich:~# ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
LISTEN 0      4096         0.0.0.0:443       0.0.0.0:*    users:(("docker-proxy",pid=7733,fd=8))
LISTEN 0      4096         0.0.0.0:80        0.0.0.0:*    users:(("docker-proxy",pid=7711,fd=8))
LISTEN 0      4096            [::]:443          [::]:*    users:(("docker-proxy",pid=7739,fd=8))
LISTEN 0      4096            [::]:80           [::]:*    users:(("docker-proxy",pid=7718,fd=8))

Hier seht ihr, dass aktuell Port 80 und 443 durch Traefik belegt sind. Dies ist korrekt so. Sollten bei euch noch Ports belegt sein, welche ihr für Mailcow benötigt, so müsst ihr die dazugehörigen Anwendungen / Dienste deinstallieren bzw. deaktivieren.

Eine kurze Erklärung der benötigten Ports:

PortDienstBenötigt
25SMTP – Empfang von anderen Mailservernja
465SMTP mit SSL/TLS – Versand aus Mailprogrammenja
587SMTP mit STARTTLS – Versand aus Mailprogrammenja
993IMAP mit SSL/TLSja
80, 443Weboberfläche und Webmail über Traefikja
110, 143POP3 und IMAP ohne Verschlüsselungnur bei Bedarf
995POP3 mit SSL/TLSnur bei Bedarf
4190ManageSieve – Filterregeln aus Mailprogrammennur bei Bedarf

mailcow von git klonen

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

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

Konfigurationsdatei für Mailcow erstellen

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

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

Folgendes gebt ihr nun ein:

  • Hier gebt ihr nun den FQDN (Fully Qualified Domain Name) eures Servers ein. In meinem Fall ist das mail.testbereich.net
  • Als Zeitzone gebt ihr Folgendes ein: Europe/Berlin
  • Damit euer Server später möglichst stabil läuft, wählt ihr jetzt die „1“
  • Bei IPv6 MÜSST ihr „y“ drücken, da sonst der Installer abbricht. Docker wird nun neu gestartet.

Hier der komplette Dialog:

Terminalfenster mit Bash-Prompt, Befehlsausgaben und Statusmeldungen; ASCII-Art und Generating snake oil certificate.

IPv6 werden wir gleich wieder deaktivieren, da der Hersteller selbst davor warnt, da eine falsche IPv6 Konfiguration eine große Sicherheitslücke sein kann. Mehr Infos dazu findet ihr hier: https://docs.mailcow.email/de/post_installation/firststeps-disable_ipv6/

Mailcow hat nun einige Konfigurationsdateien erstellt. Diese müsst ihr nun leicht anpassen, damit Mailcow korrekt mit Traefik funktioniert. Gebt dazu Folgendes ein:

cd /opt/containers/mailcow
sed -i 's/^HTTP_PORT=.*/HTTP_PORT=8080/' mailcow.conf
sed -i 's/^HTTP_BIND=.*/HTTP_BIND=127.0.0.1/' mailcow.conf
sed -i 's/^HTTPS_PORT=.*/HTTPS_PORT=8443/' mailcow.conf
sed -i 's/^HTTPS_BIND=.*/HTTPS_BIND=127.0.0.1/' mailcow.conf
sed -i 's/^SKIP_LETS_ENCRYPT=.*/SKIP_LETS_ENCRYPT=y/' mailcow.conf
sed -i 's/^AUTODISCOVER_SAN=.*/AUTODISCOVER_SAN=n/' mailcow.conf
sed -i 's/^HTTP_REDIRECT=.*/HTTP_REDIRECT=n/' mailcow.conf
sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=false/' mailcow.conf

Jetzt überprüft ihr, ob die Änderungen erfolgreich waren. Dazu gebt ihr Folgendes ein:

grep -E '^(HTTP_PORT|HTTP_BIND|HTTPS_PORT|HTTPS_BIND|HTTP_REDIRECT|SKIP_LETS_ENCRYPT|AUTODISCOVER_SAN|ENABLE_IPV6)=' mailcow.conf 

Die Ausgabe sollte Folgendes zeigen:

HTTP_PORT=8080
HTTP_BIND=127.0.0.1
HTTPS_PORT=8443
HTTPS_BIND=127.0.0.1
HTTP_REDIRECT=n
AUTODISCOVER_SAN=n
SKIP_LETS_ENCRYPT=y
ENABLE_IPV6=false

Hier sollten alle Werte bei euch genau so sein, da sonst später Mailcow nicht korrekt funktionieren wird. Sollte ein Wert anders sein, so ändert ihn bitte selbst ab:

nano mailcow.conf

docker-compose.override.yml erstellen

Nun erstellen wir uns eine neue Datei, welche alle unsere Änderungen beinhalten wird. Hier ist es wichtig, eine neue Datei zu erstellen ,da die Docker Compose bei jedem Update ersetzt wird. Gebt dazu Folgendes in eure Konsole ein:

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

In die Datei kopiert ihr nun folgenden Code:

services:
  nginx-mailcow:
    networks:
      proxy:
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.mailcow.rule=Host(`mail.euredomain.de`)"
      - "traefik.http.routers.mailcow.entrypoints=websecure"
      - "traefik.http.routers.mailcow.service=mailcow"
      - "traefik.http.routers.mailcow-autoconfig.rule=Host(`autodiscover.euredomain.de`) || Host(`autoconfig.euredomain.de`)"
      - "traefik.http.routers.mailcow-autoconfig.entrypoints=websecure"
      - "traefik.http.routers.mailcow-autoconfig.service=mailcow"
      - "traefik.http.services.mailcow.loadbalancer.server.port=8080"

  certdumper:
    image: ghcr.io/kereis/traefik-certs-dumper:latest
    container_name: mailcow-certdumper
    restart: unless-stopped
    network_mode: none
    command: --restart-containers mailcowdockerized-postfix-mailcow-1,mailcowdockerized-dovecot-mailcow-1
    volumes:
      - /opt/containers/traefik/acme:/traefik:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/assets/ssl:/output:rw
    environment:
      - DOMAIN=${MAILCOW_HOSTNAME}

networks:
  proxy:
    external: true

Damit ihr eure Domain nicht überall von Hand ändern müsst, könnt ihr folgenden Code verwenden. Schreibt hier KEIN „mail“ oder etwas davor. Hier gebt ihr nur eure „Hauptdomain“ an.

read -rp "Eure Domain (z. B. meinedomain.de): " DOMAIN
sed -i "s/euredomain\.de/${DOMAIN}/g" /opt/containers/mailcow/docker-compose.override.yml

Lasst euch nun das Ergebnis anzeigen:

grep Host /opt/containers/mailcow/docker-compose.override.yml

Dies sollte dann bei euch auch so aussehen:

root@testbereich:/opt/containers/mailcow# grep Host /opt/containers/mailcow/docker-compose.override.yml
      - "traefik.http.routers.mailcow.rule=Host(`mail.testbereich.net`)"
      - "traefik.http.routers.mailcow-autoconfig.rule=Host(`autodiscover.testbereich.net`) || Host(`autoconfig.testbereich.net`)"

Virenscanner deaktivieren (optional)

Wenn ihr nicht wollt, dass eure E-Mails auf Viren gescannt werden bzw. wenn ihr nur wenig RAM in eurem Server habt, dann könnt ihr einfach den ClamAV Virenscanner deaktivieren.

Gebt dazu Folgendes ein:

nano /opt/containers/mailcow/mailcow.conf

Hier ändert ihr 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

DNS-Einstellungen anpassen

Nun müsst ihr noch die DNS-Einstellungen anpassen, damit eure 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 wartet dann gegebenenfalls einige Stunden, bevor ihr die Einstellungen testet.

Reverse DNS anpassen

Dazu loggt ihr euch in dem dogado Webinterface (https://onehome.dogado.de) ein:

Login mit Felder Kundennummer und Passwort, Checkbox Eingeloggt bleiben, gelber Einloggen-Button und weißer Anmeldelink anfordern.

Geht nun auf „Meine Produkte“ und wählt dort euren Server aus:

Dashboard Meine Produkte mit Websites und Cloud-Servern; hervorgehobene Kachel testbereich.net Debian.

Geht nun auf der Reiter „Netzwerk“:

Dogado Cloud-Server-Oberfläche; linke Seitenleiste mit Übersicht, Add-ons, Firewall, Netzwerk und Einstellungen; Logo oben.

Hier seht ihr nun den Hostnamen eures Servers. Damit es später bei der E-Mail-Zustellung weniger Probleme gibt, muss der Name „mail.testbereich.net“ lauten. Bei euch entsprechend angepasst.

Screenshot eines Server-Interfaces: Hostname-Feld mit dogado-cloud.de; IP-Übersicht (IPv6/IPv4); Domain mit dogado-cloud.de

Klickt also bei IPv4 auf „Reverse DNS“. Jetzt seht ihr folgende Maske. Ändert dies entsprechend ab:

Screenshot einer Web-Oberfläche zur Änderung des Reverse-DNS: IPv4 81.88.19.13, Hostname mail.testbereich.net; Abbrechen, Speichern.

Anschließend sollte es so bei euch aussehen:

IP-Übersicht: IPv6 2001:880:0:6f81:3eff:fedc:9e45 – dogado-cloud.de; IPv4 81.88.19.13 – mail.testbe...net; Reverse DNS

Den IPv6 Eintrag können wir ignorieren, da wir für Mailcow nur IPv4 benötigen. Achtet nur bitte darauf, dass der rDNS Eintrag identisch mit eurer Eingabe von Schritt 1.3.5 ist.

DNS-Einträge setzen

Nun müssen wir noch einige DNS-Einträge für eure Domain hinzufügen. Dazu geht ihr auf https://onehome.dogado.de/ und klickt auf „Meine Produkte“

Webseite mit dogado-Logo, Menüleiste; hervorgehobenes Menüelement Meine Produkte in Orange.

Im unteren Bereich seht ihr nun alle Domains, welche ihr bei dogado besitzt.

Screenshot einer Weboberfläche mit dem Abschnitt Domains; zwei Domain-Einträge, erster lautet windows-wps.net; gelbe Buttons.

Klickt hinter der gewünschten Domain auf die „3 Punkte“ und wählt „Produkt öffnen“ aus:

UI-Screenshot einer UI: Rechts ein Dreipunkt-Menü; Dropdown mit 'Produkt öffnen' und 'Zu den Abonnements gehen'.

Wechselt nun in den Bereich „DNS“:

Screenshot einer Seitenleiste mit dogado-Logo, Navigation: Startseite; Domains: Übersicht; DNS (orange markiert); Dynamic DNS.

Da ihr bereits die Anleitung zu Traefik durchgearbeitet haben solltet, sollte es so bei euch aussehen.

DNS-Verwaltung: A-Einträge für @, *, www; TTL 600; Wert 178.250.170.125; gelber Button 'Record hinzufügen'.

Nun fügt ihr Folgendes hinzu:

NameTypWertPriorität
mailAeure IPv4-Adresse 
autodiscoverCNAMEmail 
autoconfigCNAMEmail 
 MXmail10
 TXTv=spf1 mx a -all 
_dmarcTXTv=DMARC1; p=reject; rua=mailto:eureE-Mail@domain.de 

Klickt dazu immer auf „Record hinzufügen“.

DNS-Verwaltung Überschrift, Bereich Einstellungen, gelber abgerundeter Button mit '+ Record hinzufügen'.

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

DNS-Record hinzufügen: Typ A, Name mail.testbereich.net, TTL 600, Ziel-IP 178.250.170.125.

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

DNS-Einträge: A (., mail, www); CNAME autoconfig, autodiscover; MX mail.testbereich.net; TXT SPF; _dmarc TXT.

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

Überprüfen mittels Linux Konsole

Unter Linux könnt ihr sehr einfach ermitteln, ob die DNS-Einträge bereits übernommen wurden. Dazu gebt ihr Folgendes ein:

nano /opt/containers/mailcow/dns-check.sh

Inhalt:

#!/bin/bash

read -rp "Eure Domain (z. B. meinedomain.de): " DOMAIN
MAILHOST="mail.${DOMAIN}"

echo
echo "Prüfe DNS-Einträge für ${DOMAIN}"
echo "================================================"

# A-Eintrag
IPV4="$(dig +short A "$MAILHOST" | tail -1)"
if [ -n "$IPV4" ]; then
  echo "[ OK ]   A        ${MAILHOST} -> ${IPV4}"
else
  echo "[FEHLT]  A        ${MAILHOST} liefert keine IPv4-Adresse"
fi

# MX-Eintrag
MX="$(dig +short MX "$DOMAIN" | tail -1)"
if [ "$MX" = "10 ${MAILHOST}." ]; then
  echo "[ OK ]   MX       ${DOMAIN} -> ${MX}"
elif [ -n "$MX" ]; then
  echo "[PRÜFEN] MX       ${DOMAIN} -> ${MX}   (erwartet: 10 ${MAILHOST}.)"
else
  echo "[FEHLT]  MX       ${DOMAIN} hat keinen MX-Eintrag"
fi

# autodiscover und autoconfig
for NAME in autodiscover autoconfig; do
  VALUE="$(dig +short "${NAME}.${DOMAIN}" | head -1)"
  if [ "$VALUE" = "${MAILHOST}." ]; then
    echo "[ OK ]   CNAME    ${NAME}.${DOMAIN} -> ${VALUE}"
  elif [ -n "$VALUE" ]; then
    echo "[PRÜFEN] CNAME    ${NAME}.${DOMAIN} -> ${VALUE}   (erwartet: ${MAILHOST}.)"
  else
    echo "[FEHLT]  CNAME    ${NAME}.${DOMAIN} fehlt"
  fi
done

# SPF
SPF="$(dig +short TXT "$DOMAIN" | grep 'v=spf1' | head -1)"
if [ -n "$SPF" ]; then
  echo "[ OK ]   SPF      ${DOMAIN} -> ${SPF}"
else
  echo "[FEHLT]  SPF      ${DOMAIN} hat keinen SPF-Eintrag"
fi

# DMARC
DMARC="$(dig +short TXT "_dmarc.${DOMAIN}" | grep 'v=DMARC1' | head -1)"
if [ -n "$DMARC" ]; then
  echo "[ OK ]   DMARC    _dmarc.${DOMAIN} -> ${DMARC}"
else
  echo "[FEHLT]  DMARC    _dmarc.${DOMAIN} hat keinen DMARC-Eintrag"
fi

# DKIM
DKIM="$(dig +short TXT "dkim._domainkey.${DOMAIN}" | grep 'v=DKIM1' | head -1)"
if [ -n "$DKIM" ]; then
  echo "[ OK ]   DKIM     dkim._domainkey.${DOMAIN} ist gesetzt"
else
  echo "[OFFEN]  DKIM     dkim._domainkey.${DOMAIN} fehlt noch (folgt in Kapitel 4.3)"
fi

# Reverse DNS für IPv4
if [ -n "$IPV4" ]; then
  PTR4="$(dig +short -x "$IPV4" | tail -1)"
  if [ "$PTR4" = "${MAILHOST}." ]; then
    echo "[ OK ]   rDNS v4  ${IPV4} -> ${PTR4}"
  elif [ -n "$PTR4" ]; then
    echo "[PRÜFEN] rDNS v4  ${IPV4} -> ${PTR4}   (erwartet: ${MAILHOST}.)"
  else
    echo "[FEHLT]  rDNS v4  ${IPV4} hat keinen Reverse-DNS-Eintrag"
  fi
fi
echo "================================================"
echo "Euer Mailserver-Name (FQDN): ${MAILHOST}"
echo

Ihr müsst die Datei jetzt nur noch ausführbar machen:

cd /opt/containers/mailcow/
chmod +x dns-check.sh
./dns-check.sh

Nun gebt ihr eure Domain ein ohne mail davor. Bei mir also testbereich.net

Terminalfenster zeigt DNS-Prüfung für testbereich.net; grüne [OK]-Zeilen, CNAME/MX-Einträge, FQDN mail.testbereich.net.

Bitte wartet an diese Stelle, bis alles bis auf DKIM grün bzw. „OK“ ist.

Mailcow starten

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

cd /opt/containers/mailcow
docker compose pull
docker compose up -d

Der Download sowie der erste Start können einige Zeit dauern. Wartet hier also einige Minuten und prüft anschließend mit nachfolgendem Befehl, dass alle Container korrekt laufen:

docker compose ps

So sollte es aussehen, wenn alle Container korrekt gestartet sind. Dies kann mehrere Minuten dauern. Wartet bitte darauf, bevor ihr mit der Anleitung weitermacht.

Schwarzes Terminalfenster mit Tabellenkopf NAME, COMMAND, SERVICE, CREATED, STATUS und vielen Zeilen.

Mailcow konfigurieren

Nun beginnen wir mit der Ersteinrichtung. Dazu geht ihr auf eure Webseite:

mail.euredomain.de/admin

Ganz wichtig ist, dass ihr „/admin“ dahinter setzt. Das Fenster sollte auch „Anmeldung als Administrator“ zeigen:

Login-Fenster mit Benutzername- und Passwortfeldern, grünem Anmelden-Button; Cartoon-Pferd in gelbem Umschlag oben.

Die Benutzerdaten für den ersten Login lauten:

  • Benutzername: admin
  • Passwort: moohoo

Nun seht ihr Folgendes:

Cartoon-Kuhkopf ragt aus gelbem Briefumschlag; Hintergrund ein graues UI-Fenster.

Administrator Kennwort / Name ändern

Da das Administrator-Kennwort / Name immer identisch ist, ändern wir dies nun direkt ab. Dazu klickt ihr auf „System“ → „Konfiguration“:

Benutzeroberfläche mit geöffnetem System-Menü: Information und blau markierte Konfiguration; links Mond-Symbol, Toggle, Flagge.

Hier wählt ihr nun „Zugang → Administratoren“ aus:

Benutzeroberfläche mit Dropdown: Button 'Zugang', daneben 'Einstellungen'; blau markierter Menüeintrag 'Administratoren'.

Klickt beim Benutzer „admin“ auf „Bearbeiten“ um den Nutzernamen sowie das Kennwort anzupassen. Hier könnt ihr alles ändern:

Screenshot eines Admin-Benutzerverwaltungsfensters mit einer Zeile 'admin' und orangefarbenem Bearbeiten-Button.

Jetzt erscheint folgender Dialog. Hier könnt ihr auch den Benutzernamen ändern. Dies kann auch sinnvoll sein, da der Name „admin“ immer von Angreifern als Erstes ausprobiert wird.

Admin-Benutzer bearbeiten: Felder Benutzername, Passwort (generieren) und Wiederholen; Aktiv-Optionen; 'Änderungen speichern'.

Daher ändere ich diesen auch. Nach dem Speichern seht ihr nun, dass der Nutzer umbenannt wurde und das Kennwort nun sicherer ist.

Admin-Bereich: roter Titel 'Administrator bearbeiten', Suchfeld, Tabelle mit Benutzernamen 'dogado' und Checkbox.

E-Mail Domain hinzufügen

Nun fügen wir unsere Domain noch in Mailcow hinzu. Dazu klickt ihr auf „E-Mail → Konfiguration“

Vertikales Dropdown-Menü mit blau markiertem Eintrag Konfiguration und weiteren Einträgen Quarantäne und Queue Manager.

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

Screenshot einer Domain-Verwaltungsoberfläche: Domains, grüner Button 'Domain hinzufügen', Suchfeld, leere Tabelle.

Klickt daher nun auf „Domain hinzufügen“.

Screenshot eines UI-Bereichs mit Domains, grünem Button Domain hinzufügen und den Buttons Alle und Aktionen.

Nun gebt ihr bei „Domain“ eure Domain ein. In meinem Fall ist dies „testbereich.net“.

Gebt hier NICHT mail.euredomain.de ein.

Die restlichen Werte könnt ihr so lassen. Anschließend klickt ihr auf „Domain hinzufügen und SOGO neustarten“.

Screenshot eines Domain-Hinzufügen-Formulars: Domain 'testbereich.net', Checkboxen, Dropdowns, Aktiv-Schalter, Buttons.

Nun sollte eure Domain angezeigt werden.

Screenshot einer Domain-Verwaltung: Tabelle mit Domain, Aliase, Mailboxen, Speicher, Statistik, Aktionen (Bearbeiten, DNS).

DKIM Schlüssel hinterlegen

DKIM dient dazu, eure verschickten E-Mails zu signieren. Anhand der Signatur kann der Empfänger überprüfen, ob die E-Mails von eurem Server stammen und ob sie unterwegs verändert wurden. Dieser Parameter ist sehr wichtig, damit ihr bei anderen E-Mail-Diensten wie Gmail oder Outlook nach Möglichkeit nicht im Spam landet. Der DKIM-Schlüssel wurde bereits bei Mailcow erzeugt. Ihr müsst ihn euch nur noch anzeigen lassen und per DNS bereitstellen.

Klickt auf „DNS“ hinter eurer Domain:

Screenshot einer Domain-Verwaltungsoberfläche mit der Domain testbereich.net, DNS-Schaltfläche und Bearbeiten/Entfernen.

Nach kurzer Zeit seht ihr folgende Übersicht:

DNS-Eintragsliste in einem Fenster: Namen, Typen (A, PTR, TLSA, MX, SRV, CNAME, TXT) und grüne Status-Häkchen.

Als letzter Parameter wird der DKIM Key angezeigt. Geht also nun wieder auf euren dogado DNS-Server und tragt diesen Parameter nach:

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

Bei mir sieht dies so aus:

Fenster DNS-Record hinzufügen: Typ TXT, Name dkim._domainkey, TTL 600, Text mit DKIM-Wert; Schließen/Hinzufügen-Buttons.

Der fertige Eintrag:

Zwei Zeilen einer Tabelle: _dmarc TXT und dkim._domainkey TXT, jeweils 600.

Damit seid ihr mit den DNS-Einträgen fertig. Auch dieser Eintrag braucht etwas Zeit, bis er im Internet verfügbar ist. Wie ihr das prüft, zeigen wir euch im Kapitel DNS Einstellungen testen.

E-Mail-Benutzer anlegen

Nun legen wir unseren ersten E-Mail-Benutzer an. Klickt dazu auf „E-Mail → Konfiguration“:

Vertikales Dropdown-Menü mit blau markiertem Eintrag Konfiguration und weiteren Einträgen Quarantäne und Queue Manager.

Dann klickt ihr auf „Mailboxen“ → „Mailboxen“.

UI: Oberes Menü zeigt Domains; geöffnetes Mailboxen-Menü mit 'Mailboxen' (ausgewählt) und 'Vorlagen'.

Nun seht ihr alle E-Mail Accounts. Bei uns existiert noch keiner.

Screenshot einer Web-App zur Postfach-Verwaltung: Tabelle mit Benutzername, Speicher, Login, Nachrichten; keine Einträge.

Um dies zu ändern, klickt ihr auf „Mailbox hinzufügen“.

Grüner Button mit weißem Text '+ Mailbox hinzufügen'.

Nun seht ihr folgenden Dialog.

Screenshot eines Formulars zum Hinzufügen einer Mailbox mit Feldern für Benutzername, Name Domain, Passwort und Speicherplatz.

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

Formular Mailbox hinzufügen mit Feldern: Benutzername, E‑Mail-Teil, Domain, Vorlage, Passwort, Wiederholung, Tags, Speicher.

Nachdem ihr den Benutzer angelegt habt, wird dieser auch direkt angezeigt.

Verwaltungsoberfläche: Eintrag max@testbereich.net Speicher 0 B/3.0 GiB IMAP/POP3/SMTP Bearbeiten/Entfernen/Login.

Web-Mail starten

Nun wollen wir uns mit unserem neuen E-Mail-Benutzer anmelden. Dies könnt ihr mittels eines Mailprogramms (Outlook, Thunderbird, …) oder mittels Mail Frontend direkt auf dem Server machen. Öffnet dazu einen neuen Webbrowser oder einen Inkognito Tab, da ihr sonst automatisch direkt wieder als Administrator angemeldet werdet und geht auf mail.euredomain.de

Login-Oberfläche mit gelbem Umschlag und Kuhkopf oben; Felder E-Mail, Passwort, grüner Anmelden-Button.

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

Cartoon-Pferd schaut aus einem gelben Briefumschlag; Login-Schnittstelle mit Feldern für Benutzername und Passwort.

Nun seid ihr im Web-Mail Programm und könnt hier nun E-Mails lesen und schreiben.

Screenshot eines E-Mail-Programms: linke Ordnerliste (Posteingang, Entwürfe, Gesendet, Papierkorb) und leerer Bereich.

DNS-Einstellungen testen

Überprüfen mittels Mailcow

Nun können wir überprüfen, ob unsere DNS-Einträge bereits korrekt sind. Dies könnt ihr wie im Schritt 4.3 mittels Mailcow überprüfen. Klickt nun auf „E-Mail → Konfiguration“:

Vertikales Dropdown-Menü mit blau markiertem Eintrag Konfiguration und weiteren Einträgen Quarantäne und Queue Manager.

Klickt hier auf „DNS“ hinter eurer Domain:

Screenshot einer Domain-Verwaltungsoberfläche mit der Domain testbereich.net, DNS-Schaltfläche und Bearbeiten/Entfernen.

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

Dialogfenster mit der Überschrift DNS-Einträge; mehrzeiliger deutscher Text und ein blauer Link.

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

DNS-Eintragsliste als Tabelle: Name, Typ, Korrekte Daten, Status; Typen A, PTR, TLSA, MX, CNAME, SRV, TXT.

Bei DKIM sollte nun ein „grüner Haken“ sein.

Überprüfen mittels Linux Konsole

Ihr könnt dazu euer zu Beginn erstelltes Skript erneut starten.

cd /opt/containers/mailcow/
./dns-check.sh

Nun sollte auch der DKIM-Eintrag korrekt angezeigt werden:

Terminal-Ausgabe: dns-check.sh prüft testbereich.net; [OK] A mail.testbereich.net → 178.250.170.125, MX, CNAME, DKIM, DMARC.

Überprüfen mittels mail-tester.com

Die Webseite mail-tester.com (https://mail-tester.com/) ermöglicht es euch eure E-Mail-Adresse zu testen.

Blauer Himmel mit Wolken; Überschrift 'Prüfen Sie Ihre E-Mail auf Spam-Verdacht'; Eingabefeld, dunkler Button

Öffnet nun euer 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:

Screenshot eines E-Mail-Clients mit Verfassen-Fenster; Empfänger max@testbereich.net, Betreff und Beispieltext.

Nachdem ihr die E-Mail verschickt habt, könnt ihr wieder zu mail-tester.com zurückkehren und euch das Ergebnis anschauen. Dies ist mein Ergebnis:

Heller blauer Himmel mit Sonne links, drei weiße Vögel in der Mitte, Palme rechts.

Backups erstellen & wiederherstellen

Nun wollen wir uns noch anschauen, wie ihr Backups eurer E-Mails erstellen könnt. 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

Backup manuell erstellen

Nun starten wir das Backup Skript. Gebt dazu Folgendes in eurer Konsole ein.

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

Wenn ihr den Pfad von Mailcow oder dem Backup-Ordner geändert habt, so müsst ihr diesen Befehl entsprechend anpassen. Direkt nach der Eingabe des Befehls startet das Backup des E-Mail Servers mit allen Einstellungen, E-Mails und sonstigem.

Backup automatisiert erstellen

Wenn ihr das Backup beispielsweise per Cron automatisch täglich ausführen wollt, 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. Dazu installiert ihr zuerst cron:

apt install -y --no-install-recommends cron

Der Zusatz „--no-install-recommends“ ist hier wichtig, da sonst ein exim4 Mailserver mitinstalliert wird und Mailcow dadurch nicht mehr startet, da der Port 25 von exim4 belegt wird.

Um Cronjobs zu öffnen, gebt ihr Folgendes ein:

crontab -e

Wählt hier nun „1“ für nano aus:

Root-Terminal; crontab -e; kein Crontab; Editor-Auswahl: 1 /bin/nano, 2 /usr/bin/vim.basic, 3 /usr/bin/vim.vi; Wahl [1]

Schreibt hier nachfolgenden Befehl ans Ende der Datei:

0 3 * * * cd /opt/containers/mailcow && MAILCOW_BACKUP_LOCATION=/opt/containers/mailcow-backup /opt/containers/mailcow/helper-scripts/backup_and_restore.sh backup all --delete-days 7 >> /var/log/mailcow-backup.log 2>&1

Der Befehl sorgt dafür, dass jede Nacht um 3 Uhr ein Backup erstellt wird und Backups nach 7 Tagen gelöscht werden. Das Log wird dabei in folgende Datei geschrieben: /var/log/mailcow-backup.log

7.3 Backup wiederherstellen

Das Wiederherstellen von Backups ist sehr einfach möglich. Gebt dazu einfach folgenden Befehl ein:

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

Auch hier müsst ihr den Pfad des Backups anpassen, wenn ihr diesen verändert habt. Nachdem ihr den Befehl ausgeführt habt, bekommt ihr diesen Dialog angezeigt. Hier könnt ihr nun wählen, was wiederhergestellt werden soll und von welchem Datum.

Terminalausgabe: Pfad /opt/containers/mailcow-backup; Docker-Image ghcr.io/mailcow/backup:latest wird gezogen.

Mailcow aktualisieren

Mailcow lässt sich dank Docker sehr schnell aktualisieren. Ihr solltet vorher aber in die Changelogs schauen, was sich geändert hat: https://github.com/mailcow/mailcow-dockerized/releases

Dies ist wichtig, falls sich Grundlegendes geändert hat und eure Konfiguration angepasst werden muss. Nachdem ihr die Changelogs geprüft habt, könnt ihr mailcow so updaten:

cd /opt/containers/mailcow
./update.sh

Anschließend wird alles aktualisiert und ihr müsst das Update Skript ein zweites Mal starten:

./update.sh

Das Update aktiviert automatisch IPv6 im Hintergrund. Dies deaktiviert ihr nach jedem Update erneut. Prüft zuerst den aktuellen Wert:

cd /opt/containers/mailcow
grep ^ENABLE_IPV6= mailcow.conf

Sollte der Wert „true“ sein, so führt bitte nachfolgenden Befehl aus:

sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=false/' mailcow.conf
grep ^ENABLE_IPV6= mailcow.conf
docker compose down
docker compose up -d
Nächster Artikel
Maria DB Server installieren auf VPS / vServer
Weitere passende Themen
Finde den passenden vServer zu deinem Projekt