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
Nach erfolgreicher Installation wird Mailcow per Subdomain aufgerufen. In diesem Beispiel zeigt unser MX-Eintrag auf mail.example.com
Ändere unbedingt das Standard-Login vom User: admin und Passwort: moohoo ab. Zudem ist nach erfolgreicher Installation ein ARC/DKIM-Key zu setzen und zu importieren. Den soeben generierten Key fügen wir schlussendlich noch als TXT in die DNS-Einträge ein.
# cd /opt/mailcow-dockerized/ # openssl genrsa -out private.key 2048
Den Schlüssel findest du unter: /opt/mailcow-dockerized/private.key
Erstelle den DNS-Eintrag nach dem Muster:
dkim._domainkey.example.com TXT v=DKIM1 (...)
ab jetzt ist der Mailserver via https://mail.example.com
erreichbar.
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
#