Mailcow DMARC,DKIM,SPF und MTA-STS

Ein Unternehmen mit 15 Smartphones (EAS aktiviert) und etwa 50 gleichzeitigen IMAP-Verbindungen sollte 16 GiB RAM einplanen. 6 GiB RAM + 1 GiB Swap sind für die meisten privaten Installationen ausreichend, während 8 GiB RAM für ~5 bis 10 Benutzer empfohlen werden.
Ich beziehe mich bei dieser Anleitung auf einen Hetzner Cloud Server. Im genauen den CX31 dieser bietet:
Für die private Verwendung von Mailcow reicht dieser also anstandslos aus. Sollten Sie noch kein Konto bei Hetzner haben, müssen Sie vorher eines erstellen.
Über unseren Hetzner Link erhalten Sie als Neukunde 20 € Startguthaben und können uns, sollten Sie bei Hetzner bleiben, zusätzlich unterstützen.
Als Standort wähle ich Nürnberg und Debian 11 als Linux Derivat aus. Als Typ entscheide ich mich wie oben erwähnt für den CX31. Im Netzwerkbereich wähle ich eine IPv4 & IPv6 aus.
Da ich bereits einen SSH-Key hinterlegt habe, wähle ich diesen natürlich auch aus. Sie können auch ohne SSH-Key den Server erstellen, dennoch empfehle ich hier, dass es einen Signifikaten Sicherheit Aspekt bietet und sich die Zeit lohnt einen SSH-Key zu erstellen.
Der SSH-Key kann natürlich im Nachhinein auf dem Server angelegt werden!
Es wird kein extra Volume benötigt, somit kann dieser Teil übersprungen werden. Die Firewall-Regeln erstellen wir im Anschluss, somit können wir erst einmal diesen Abschnitt ignorieren.
Kommen wir zum Thema Sicherungen: Ich empfehle ausdrücklich die 2,31 € für die Sicherungen zu bezahlen. Sie haben hier die Möglichkeit, den Server komplett wiederherzustellen, ohne dass Sie viele Kenntnisse darüber verfügen müssen, da es absolut simpel über das Webinterface von Hetzner auswählbar ist.
Platzierungsgruppen und Labels benötigen Sie i. d. R. nicht und Sie können direkt zum Punkt »Servername« springen. Hier können Sie einen Namen für Ihren Server eingeben, z. B. Mailserver oder Mailcow.
Damit keine Probleme beim Installieren entstehen, sollten Sie die unten aufgeführten Pakete installieren.
apt install curl wget git -y
Jetzt installieren Sie Docker und das dazugehörige Plug-in Compose über das offizielle Docker Script.
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
Wir erstellen die Firewall-Regeln direkt in den Hetzner Firewall Einstellungen, da diese vor dem Cloud-Server noch behandelt wird. Dies bietet nicht nur einen Vorteil im Sinne der Sicherheit, sondern geht auch nicht zulasten, der Server Ressourcen.
Der Port 22 (SSH) sollte durch die Firewall in der Zukunft blockiert werden. Es bietet sich an, über ein Privates Netzwerk zum Heimnetzwerk via VPN zu Routen. Somit bleibt der Port 22 im privaten Netz offen, ist aber im öffentlichen Bereich geschlossen. Dies sorgt schon einmal dafür, dass evtl. Angreifer nicht Port 22 attackieren können. Weisen Sie die Firewall Ihrem Server zu.
Damit Mailcow zu 100 % funktioniert, müssen Sie einige DNS-Einträge im Vorfeld erstellen (Stellenweise dauert dies bis zu 48 Stunden, dass alle DNS-Server Ihre IP + FQDN kennen). Hierfür gehen Sie bei Hetzner (oder Ihrem Provider) in die DNS-Einstellungen, der Ihre Zone verwaltet. In der Mailcow Dokumentation, finden Sie alle benötigten Einträge. Ich erspare mir hier eine Dopplung, da es wirklich verständlich erklärt wird, welche Einträge benötigt werden.
Ein Beispiel in der manuellen Bearbeitung der Zonefile bei Hetzner könnte also wie folgt aussehen:
$ORIGIN example.com.
$TTL 60
; SOA Records
@ IN SOA hydrogen.ns.hetzner.com. dns.hetzner.com. 2022061700 86400 10800 3600000 3600
; NS Records
@ IN NS ns1.first-ns.de.
@ IN NS robotns2.second-ns.de.
@ IN NS robotns3.second-ns.com.
; MX Records
@ IN MX 10 mail
; A Records
@ IN A Ihre IPv4 Adresse
mail IN A Ihre IPv4 Adresse
www IN A Ihre IPv4 Adresse
; AAAA Records
@ IN AAAA Ihre IPv6 Adresse
mail IN AAAA Ihre IPv6 Adresse
www IN AAAA Ihre IPv6 Adresse
; CNAME Records
autoconfig IN CNAME mail
autodiscover IN CNAME mail
; TXT Records
@ IN TXT "v=spf1 mx a -all"
_caldavs._tcp IN TXT "path=/SOGo/dav/"
_carddavs._tcp IN TXT "path=/SOGo/dav/"
_dmarc IN TXT "v=DMARC1;p=reject;pct=100;rua=mailto:mail@example.com"
dkim._domainkey IN TXT "v=DKIM1;k=rsa;t=s;s=email;p=DKIM-KEY aus Mailcow"
; Others
_autodiscover._tcp IN SRV 0 1 443 mail
_caldavs._tcp IN SRV 0 1 443 mail
_carddavs._tcp IN SRV 0 1 443 mail
_imap._tcp IN SRV 0 1 143 mail
_imaps._tcp IN SRV 0 1 993 mail
_pop3._tcp IN SRV 0 1 110 mail
_pop3s._tcp IN SRV 0 1 995 mail
_sieve._tcp IN SRV 0 1 4190 mail
_smtps._tcp IN SRV 0 1 465 mail.example.com
Alles anzeigen
Wichtig für den Mailserver ist, dass Sie bei allen IP-Adresse, IPv4 sowie IPv6, den PTR eintragen. Dies kann ganz einfach in der Hetzner Cloud unter Netzwerk eingetragen werden.
Beispiel:
Die hier ersichtliche IP-Adresse ist nicht mehr in Gebrauch!
Hier bediene ich mich auch an der Mailcow Dokumentation, denn hier wird die Installation bis ins Detail erklärt, jedoch kürze ich diese ein, da nicht alles für eine Installation bei einem Hetzner Cloud Server vonnöten ist.
Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:
ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
# oder:
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
Sollte netstat nicht verfügbar sein, kann dieses wie folgt nachinstalliert werden:
apt install net-tools -y
Um sicherzustellen, dass Sie das richtige Datum und die richtige Zeit auf Ihrem System eingestellt haben, überprüfen Sie bitte die Ausgabe von timedatectl status:
$ timedatectl status
Lokale Zeit: Mon 2023-01-17 02:12:33 CEST
Weltzeit: Mo 2023-01-17 00:12:33 UTC
RTC-Zeit: Mo 2023-01-17 00:12:32
Zeitzone: Europa/Berlin (MESZ, +0200)
NTP aktiviert: ja
NTP synchronisiert: ja
RTC in lokaler TZ: nein
Sommerzeit aktiv: ja
...
Die Zeilen NTP aktiviert: ja und NTP synchronisiert: ja zeigen an, ob Sie NTP aktiviert haben und ob es synchronisiert ist.
Um NTP zu aktivieren, müssen Sie den Befehl timedatectl set-ntp true ausführen. Sie müssen auch Ihre /etc/systemd/timesyncd.conf bearbeiten:
nano /etc/systemd/timesyncd.conf
[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
sudo timedatectl set-timezone Europe/Berlin
Prüfen Sie /etc/network/interfaces.d/50-cloud-init.cfg und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:
# Falsch: auto eth0:0 iface eth0:0 inet6 static
# Richtig: auto eth0 iface eth0 inet6 static
Starten Sie die Schnittstelle neu, um die Einstellungen zu übernehmen. Sie können außerdem die cloud-init Netzwerkänderungen deaktivieren.
Wie Sie Ihre IPv4 sowie IPv6 statisch eintragen, können Sie hier entnehmen: Hetzner static IP.
Klonen Sie den Master-Zweig des Repositorys und stellen Sie sicher, dass Ihre umask gleich, 0022 ist. Bitte klonen Sie das Repository als root-Benutzer und führen Sie auch den Docker-Stack als root aus.
$ su
umask
-> 0022 # <- Überprüfen, dass es 0022 ist
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
Erzeugen Sie eine Konfigurationsdatei. Verwenden Sie einen FQDN (z. B. mail.example.com) als Hostname, wenn Sie gefragt werden.
./generate_config.sh
Ändern Sie die Konfiguration, wenn Sie wollen oder müssen. Dennoch lohnt sich, die Datei, einmal anzusehen, welche weiteren Optionalen Einstellungen getätigt werden können.
nano mailcow.conf
Laden Sie die Images herunter und führen Sie die Compose-Datei aus. Der Parameter -d(Detached Mode) wird ihre mailcow dann im Hintergrund starten:
docker compose pull docker compose up -d
Geschafft!
Sie können nun auf https://mail.example.com mit den Standard-Zugangsdaten admin + Passwort moohoo zugreifen.
Bitte ändert so schnell wie möglich, das Passwort des admin und erstellt am besten im Anschluss einen 2FA.
Ich bin IT-Spezialist im Fachbereich der IT-Administratoren. Neben Beruf und Familie, erstelle ich als,
Teil meines Hobbys, gerne Tutorials.
Hier können Sie uns unterstützen.
Antworten 2
Foxly
Das weiterführende Thema Updates sowie Backups etc. folgt noch.
Martin
Moin manchmal bekommt man eine Fehler
Ich hatte das Problem in eine LXC Container von Proxmox.
die Lösung
lieber Gruß
Martin