Mit Docker und Mailcow lässt sich ein eigener E-Mail-Server einrichten. Wichtig dabei sind die korrekten DNS-Einträge, bevor überhaupt mit dem Aufsetzen vom E-Mail-Server begonnen wird. Im folgenden Beispiel installieren wir Mailcow mittels GitHub.
Server-IP: 123.45.678.900
FQDN: mail.example.com
Prüfe vorab ebenfalls, ob locale (locale) und Zeitzone (tzdata) deines Servers korrekt sind. Für meinen Server gilt:
# timedatectl Local time: Mo 2023-07-24 11:42:37 CEST Universal time: Mo 2023-07-24 09:42:37 UTC RTC time: Mo 2023-07-24 09:42:37 Time zone: Europe/Zurich (CEST, +0200) System clock synchronized: yes NTP service: active RTC in local TZ: no
DNS (Standard-Einträge)
Folgende Einträge sind für die Domain example.com für einen funktionierenden Mailcow-Server IP: 123.45.678.900 notwendig. Mit Mailcow können durchaus mehrere Domains als E-Mail verwaltet werden.
mail.example.com A 123.45.678.900
autoconfig.example.com CNAME mail.example.com
autodiscover.example.com CNAME mail.example.com
example.com MX mail.example.com
_dmarc.example.com TXT v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.com
example.com TXT v=spf1 mx -all
I. Docker installieren
Docker lässt sich in wenigen Schritten in Debian installieren.
II. Mailcow installieren (git)
Füge den Kanal «stabil» hinzu und weise Debian zu, Docker zu starten:
# curl -sSL https://get.docker.com/ | CHANNEL=stable sh # systemctl enable --now docker # apt update
Wechsle nun nach /opt
# cd /opt/
und lade das Docker-Image herunter:
# git clone https://github.com/mailcow/mailcow-dockerized
Wechsle in das Verzeichnis /mailcow-dockerized und generiere die generate_config.sh
Hier muss die FQDN angegeben werden. Dies wird mit
$ hostname --fqdn
angezeigt.
# cd mailcow-dockerized/ # ./generate_config.sh
Baue schlussendliche das Docker-Image:
# docker compose pull # docker compose up -d
Mailcow starten und https aktivieren
Mailcow ist via
http://mail.example.com/admin
erreichbar.
Um https zu aktivieren, trage die Domain unter E-Mail > Konfiguration > Domain hinzufügen ein. Danach auf DNS klicken und den angezeigten Schlüssel in die DNS Zonen eintragen. Bis Mailcow den Schlüssel erkennt, kann es durchaus ein wenig dauern. Danach sollte Mailcow via https aufrufbar sein.

Standard-Ports
läuft auf dem Server eine Firewall wie ufw sind die folgenden Ports mittels ufw allow PORT zu öffnen:
ufw allow PORTNUMMER
Prüfe, ob folgende Ports geöffnet sind:
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 25 ALLOW IN Anywhere [ 2] 80 ALLOW IN Anywhere [ 3] 110 ALLOW IN Anywhere [ 4] 143 ALLOW IN Anywhere [ 5] 443 ALLOW IN Anywhere [ 6] 465 ALLOW IN Anywhere [ 7] 587 ALLOW IN Anywhere [ 8] 993 ALLOW IN Anywhere [ 9] 995 ALLOW IN Anywhere [10] 4190 ALLOW IN Anywhere [11] 25 (v6) ALLOW IN Anywhere (v6) [12] 80 (v6) ALLOW IN Anywhere (v6) [13] 110 (v6) ALLOW IN Anywhere (v6) [14] 143 (v6) ALLOW IN Anywhere (v6) [15] 443 (v6) ALLOW IN Anywhere (v6) [16] 465 (v6) ALLOW IN Anywhere (v6) [17] 587 (v6) ALLOW IN Anywhere (v6) [18] 993 (v6) ALLOW IN Anywhere (v6) [19] 995 (v6) ALLOW IN Anywhere (v6) [20] 4190 (v6) ALLOW IN Anywhere (v6)
Mailcow Backup erstellen (manuell)
Mailcow lässt sich mit dem eigenen Backup-Script sichern. Gib unter BACKUP_LOCATION einen gültigen Pfad an:
# cd /opt/mailcow-dockerized/ # BACKUP_LOCATION=/var/mc_backup/ ./helper-scripts/backup_and_restore.sh backup all
Bei Bedarf werden die Daten dann mittels restore zurück gespielt:
# cd /opt/mailcow-dockerized/ # ./helper-scripts/backup_and_restore.sh restore
Das Script fragt nach dem Backup-Pfad. Hier somit /var/mc_backup/
Mailcow legt den Backupordner mittels Zeitstempel an:
root@mail:/var/mc_backup# ls -la insgesamt 12 drwxr-xr-x 3 root root 4096 24. Jul 11:28 . drwxr-xr-x 12 root root 4096 24. Jul 10:11 .. drwxr-xr-x 2 root root 4096 24. Jul 11:20 mailcow-2023-07-24-11-20-24
Backup mittels crontab
# crontab -e
füge nun den Befehl ein, welcher Mailcow z.B. alle Tage um 01:00 Uhr sichert und die drei neusten Backups behält:
# Backup alle Tage um 01:00 Uhr nach /backup_mc, älter als 3 Tage löschen
0 1 * * * cd /opt/mailcow-dockerized/; MAILCOW_BACKUP_LOCATION=/backup_mc /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 3
#