Mailcow Installation

Im Zeitraum vom 09.04.2024 - 28.03.2025 ist der Support eingeschränkt. In dem genannten Zeitraum, befinde ich mich auf einer Weiterbildung.

Systemvoraussetzung

  • mind. 1 GHz CPU
  • mind. 6 GB Arbeitsspeicher (+1 GB Swap)
  • mind. 20 GB Festplattenspeicher (ohne E-Mails)
  • Systemtyp x86_64
  • CentOS 7, Debian 10/11, Ubuntu 18.04, 20.04, 22.04

Beispiele für die RAM Planung

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.

Hetzner Cloud Server

Ich beziehe mich bei dieser Anleitung auf einen Hetzner Cloud Server. Im genauen den CX31 dieser bietet:

Hetzner Cloud Server
vCPU2
RAM8 GB
Festplattenspeicher80 GB
Traffic20 TB
Preis (17.01.2023)11,54 €/Monat

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.

Docker

Damit keine Probleme beim Installieren entstehen, sollten Sie die unten aufgeführten Pakete installieren.

Bash
apt install curl wget git -y

Jetzt installieren Sie Docker und das dazugehörige Plug-in Compose über das offizielle Docker Script.

Code
curl -sSL https://get.docker.com/ | CHANNEL=stable sh

Hetzner Firewall

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.

Eingehende Firewall-Regeln

IP-AdresseProtokollPort
IPv4 & IPv6TCP25
IPv4 & IPv6TCP110
IPv4 & IPv6TCP993
IPv4 & IPv6TCP995
IPv4 & IPv6TCP465
IPv4 & IPv6TCP587
IPv4 & IPv6TCP80
IPv4 & IPv6TCP443
IPv4 & IPv6TCP143
IPv4 & IPv6TCPICMP (optional)
IPv4 & IPv6TCP22 SSH (optional)

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.

Hetzner DNS

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.

DNS-Einstellungen Mailcow

Ein Beispiel in der manuellen Bearbeitung der Zonefile bei Hetzner könnte also wie folgt aussehen:

Reverse DNS Ihrer IP-Adresse

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:

  • mail.example.com

Die hier ersichtliche IP-Adresse ist nicht mehr in Gebrauch!

Mailcow Installation

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.

Vorbereitung

Firewall & Ports

Bitte überprüfen Sie, ob alle Standard-Ports von mailcow offen sind und nicht von anderen Anwendungen genutzt werden:

Bash
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:

Code
apt install net-tools -y

Datum und Uhrzeit

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:

Bash
$ 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:

Bash
nano /etc/systemd/timesyncd.conf 

[Time] 
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
Bash
sudo timedatectl set-timezone Europe/Berlin

Hetzner Cloud static IP

Prüfen Sie /etc/network/interfaces.d/50-cloud-init.cfg und ändern Sie die IPv6-Schnittstelle von eth0:0 auf eth0:

Code
# 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.

Mailcow Installieren

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.

Bash
$ su
umask
-> 0022 # <- Überprüfen, dass es 0022 ist
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Mailcow initialisieren

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

Mailcow starten

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.

Über den Autor

Ich bin IT-Spezialist im Fachbereich der IT-Administratoren. Neben Beruf und Familie, erstelle ich als, Teil meines Hobbys, gerne Tutorials, sowie WoltLab Stile. Aktuell befinde ich mich auf meinem Informationstechnikermeister.

Foxly Team

Kommentare