Print
Category: Netzwerke
Hits: 9860

Die Email ist eine der ältesten Kommunikationsformen im Internet. Im Laufe der Zeit haben sich unterschiedliche Technologien entwickelt, welche die Kommunikation per email sicherer und einfacher gestalten lassen. So entstanden Verschlüsselungstechniken und Methoden zur besseren Authentifizierung, welche dazu dienen, den Versand kompromittierter und betrügerischer Emails zu unterbinden. Trotzdem verläuft nach wie vor  ein Großteil der Kommunikation zwischen Mailservern über unverschlüsselte Protokolle.
Will man ein eigenen Mailserver betreiben, so ist zumindest eine Komponente im Emailverkehr im eigenen Verantwortungsbereich. Das bedeutet aber auch, dass die Sicherheit des Mailservers maßgeblich von einer ordnungsgemäßen Konfiguration abhängig ist. Werden alle empfohlenen Einstellungen, die einem zur Verfügung stehen, genutzt, lässt sich ein Mailserver relativ sicher betrieben.
Besonders wichtig beim Betrieb eines Mailservers sind die Einträge im DNS System. Neben den Standardeinträgen sind dort auch Einträge vorzunehmen, welche die Sicherheit beim Betrieb eines Mailservers garantieren. Dazu gehören DNS-Einträge wie SPF, DKIM und DMARC. Sind alle Records gesetzt, dauert es meist 24 Stunden bis alle Einträge bei den DNS Servern hinterlegt sind. Nach erfolgreicher Eingabe der Daten kann die Installation unseres Mailserver, in unserem Fall Mailcow, begonnen werden.

Dieses Tutorial gliedert sich wie folgt:

  1. Vorbereitungen
  2. Vorbereitungen zur Installation von Mailcow
  3. Installation von Docker
  4. Installation von Mailcow
  5. Konfiguration von Mailcow

Um nach diesem Tutorial einen Mailserver zu konfigurieren, braucht man eine eigene Domain. Des weiteren ist für die Installation von mailcow auch ein root Zugriff nötig. In unserem Fall verwenden wir einen Vserver von Hetzner, der uns beides zu recht günstigen Konditionen anbietet. Voraussetzung für die Inanspruchnahme der Server von Hetzner ist eine Anmeldung bei der Hetzner Cloud sowie auch bei der Hetzner KonsoleH, welche uns die Verwaltung der DNS Records erlaubt. Ist die Anmeldung getätigt, könne wir als ersten Schritt mit den Vorbereitungen beginnen.

1. Vorbereitungen

1.1 Firewall erstellen

Um eine Firewall später für unseren Server verwenden zu können, klicken wir auf "Firewall erstellen" und öffnen die entsprechenden Ports. Für die Ports 22, 25, 465, 587, 143, 993, 110, 995, 4190, 80, 443 gilt die Verwendung des TCP Protokolls, zudem benutzen wir IPv4 und IPv6. Die Voreinstellungen bezüglich ICMP übernehmen wir.

1.2 Server bestellen

Zur Orientierung welche Leistungen unser Server erbringen sollte, verwenden wir die Angaben auf der mailcow github Webpage. Erfahrungsgemäß reicht ein System mit 4GB RAM und einer Hardiskgröße von 20 GiB aus. Sollten die Anforderungen größer ausfallen und Mailcow viele Postfächer verwalten, muss entsprechend ein leistungsfähiger Server bereitgestellt werden. In unserem Fall reicht ein Debian 11 System (CX21), welcher mit 4GB RAM und 40GB Harddisk ausgestattet ist.
Ist die Auswahl getätigt, fügen wir die soeben erstellte Firewall zu unserem Server hinzu. Nachdem der Servername gesetzt wurde, können wir den Server kostenpflichtig erstellen. Für den Zugriff per SSH erhalten wir das Passwort zeitnah per Email. Die Administrationsoberfläche von Hetzner erlaubt es uns an diese Stelle bereits die Einstellung des PTR (Reverse DNS) Records, welche wir unter Server -> Networking erreichen. Diesen setzen wir auf mail.meinedomain.de.

1.3 DNS-Verwaltung aufrufen und einrichten

Um mit der Konfiguration der DNS-Records zu beginnen, rufen wir die KonsoleH von Hetzner auf. Dort angekommen klicken wir auf die Domain und rufen die Einstellungen unter Einstellungen -> DNS-Verwaltung auf. Alle Angaben wie "IP-Adresse" oder "meinedomain.de" müssen im Folgenden mit den eigenen Daten ersetzt werden. Ebenso wie der eben erstellte PTR Record.

A-records:

Hostname: TTL: Typ: Ziel:
mail.meinedomain.de. 60 A IP-Adresse
@ 60 A IP-Adresse
www 60 A IP-Adresse

MX-records:

Hostname: TTL: Typ: Ziel:
@ 60 MX mail.meinedomain.de.

CNAME-records:

Hostname: TTL: Typ: Ziel:
autodiscover 60 CNAME mail.meinedomain.de.
autoconfig 60 CNAME mail.meinedomain.de.

TXT-records:

Hostname: TTL: Typ: Ziel:
_dmarc.alphawebservices.de. 60 TXT "v=DMARC1; p=reject; rua=mailto:This email address is being protected from spambots. You need JavaScript enabled to view it."
@ 60 TXT "v=spf1 +a +mx -all"
dkim._domainkey.meinedomain.de. "v=…"

SRV-records:

Hostname: TTL: Typ: Port: Ziel:
_autodiscover._tcp SRV 443 mail.meinedomain.de.
_imap._tcp SRV 993 mail.meinedomain.de.
_pop3._tcp SRV 995 mail.meinedomain.de.
_Submission._tcp SRV 587 mail.meinedomain.de.

Erläuterungen zu den Sicherheitsfeatures wie SPF, DKIM, DMARC:

SPF (Sender Policy Frameworks):
Der Empfängerserver prüft eine Liste der erlaubten IP Adressen unter denen der Email Sender Emails verschicken darf. Wird diese Liste nicht zur Verfügung gestellt oder befindet sich die  IP nicht in der Listeder zuzulassenden verweigert der Empfängerserver die Annahme der Email. Befindet sich hingegen die IP Adresse auf der Liste, darf die Email empfangen werden.

DKIM (Domain Key Identified Mail):
Das DKIM Verfahren verwendet ein Public/Private Key Schlüsselpaar zur Sicherstellung der Identität der zu versendenden Email. Dazu wird der publickey auf dem Server hinterlegt und ist damit öffentlich zugänglich. Der Privatekey ist nur dem Versender (Server) der Email bekannt und dient zur Signierung der Email. Die Signierung ist ein zweistufiges Verfahren, welches zunächst einen Hashwert generiert, der sich aus dem Inhalt der Email ergibt. Anschließend wird der Hashwert mit dem privaten Schlüssel verschlüsselt. Eine Entschlüsselung geschieht mit Hilfe des publickeys auf Seiten des Empfängerservers. Der publickey ist dabei im DNS Record als ein TXT-Eintrag hinterlegt und kann so bei Bedarf abgefragt werden.

Ein DKIM Eintrag besitzt mehrere Bestandteile, die sich wie folgt zusammensetzen. Als erstes ist die DKIM Version enthalten, welche als v=DKIM1 festgeschrieben wird. Mit dem Wert k=rsa wird der Verschlüsselungsalgorithmus angegeben. Der öffentliche Schlüssel wird als Ziffernfolge mit der Bezeichnung (p=) angegeben. Als letztes findet sich ein providerabhängiger Selektor im Eintrag.

Damit ist jede empfangene Stelle befähigt, ankommende Emails mit Hilfe der Signatur auf ihre Herkunft zu überprüfen. Passt der hinterlegte öffentliche Schlüssel nicht zur Signatur wurde die email nicht von dem Server versendet, welcher im Mail Header deklariert ist. In einem solchen Fall dient ein betrügerischer Server als Versender oder die Email wurde abgefangen und verändert. DKIM ist ein rein serverseitiger Kommunikationsprozess, von dem der Endnutzer, an welchen die Emails übermittelt werden, nichts mitbekommt. Dieser Eintrag kann erst im Laufe der Mailcow Installation eingerichtet werden.

DMARC (Domain based Message Authentication Reporting and Conformance):
DMARC beschreibt eine Sicherheitsrichtline, welche auf den beiden Spezifikationen SFP und DKIM aufbaut. Im wesentlichen gibt diese Richtlinie an, auf welche Art und Weise der Empfänger mit Emails verfahren soll, welche von SFP und/oder DKIM als nicht vertrauenswürdig eingestuft werden.

2. Vorbereitungen zur Installation von Mailcow:

Bevor wir mit der Installation von Mailcow beginnen, bietet es sich an, einen snapshot unseres Servers zu erstellen. Dazu wählen wir in der Cloud Console unseren Mailserver aus und klicken auf "Snapshots" und dann auf "Snapshot erstellen"

2.1 Anschließend loggen wir uns mit Putty per SSH auf unseren Server ein und ändern unser root Passwort. Dann bringen wir den Server auf den neusten Stand.

apt update
apt upgrade

2.1 Falls curl noch nicht installiert ist, holen wir dieses nach:

apt install curl

2.2. Wir installieren danach netstat welches wir später brauchen werden, um uns einen Überblick über die verwendeten Ports zu verschaffen.

apt install netstat

2.3. Im nächsten Schritt installieren wir git, welches wir später für das Herunterladen von Mailcow brauchen.

apt install git-all

2.4. Im folgenden können wir unseren Server auf offene/belegte Ports überprüfen. In unserem Fall brauchen wir nicht tätig zu werden, da alle angegebenen Ports nicht in Gebrauch sind.
 
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

2.5. Sollten dennoch Ports angezeigt werden, können wir uns die Prozess ID anzeigen lassen und den Prozess mit kill beenden.

netstat -pulten
kill 1234

3. Installation von Docker

3.1. Docker installieren:

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

3.2. Um Docker automatisch mit dem Systemstart zusammen starten zu lassen, brauchen wir folgenden Befehl:

systemctl enable --now docker

3.3. Im Anschluss starten wir nun Docker:

systemctl start docker.service

3.4 Um zu überprüfen, ob Docker ordnungsgemäß läuft, laden wir uns den hello-world Container herunter:

docker run hello-world

3.5. Neben docker installieren wiernoch docker compose. Dies geschieht mit folgenden Befehl:

curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose

3.6. Um docker compose ausführbar machen, geben wir folgendes ein:

chmod +x /usr/local/bin/docker-compose

4. Installation von Mailcow:

4.1. Vor Beginn der eigentlichen Installation von Mailcow überprüfen wir mit umask die Benutzermaske, welche 0022 lauteten muss.

umask

4.2 Um Mailcow installieren zu können, wechseln wir in das Verzeichnis /opt und clonen uns den Inhalt der github Repository von Mailcow. Mit cd wechseln wir in das neue Verzeichnis

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

4.3. Im nächsten Schritt generieren wir uns die Konfigurationsdatei von Mailcow, indem wir folgenden Befehl verwenden. Es werden zudem noch der Hostname und die Timezone abgefragt, welche wir eingeben.

./generate_config.sh
hostname eingeben:mail.meinedomain.de
timezone eingeben:Europe/Berlin

4.4. Wer weitergehende Änderungen an der Mailcow Konfigurationsdatei vornehmen will, kann die mail.conf aufrufen. Der Standard ist, dass wir keine Änderungen vornehmen müssen.

nano mailcow.conf

4.5. Um Docker zu veranlassen die entsprechenden Images zu konstruieren, brauchen wir den Befehl:

docker-compose pull

4.6. Zum Starten der einzelnen Dienste rufen wir den folgenden Befehl auf:

docker-compose up -d

4.7. Zum Abschluss der Installation können wir im Browser unseren Mailcow Mailserver aufrufen. Die Standardzugang lautet "admin" als Benutzername und "moohoo" als Passwort

https://mail.meinedomain.de

5. Konfiguration von Mailcow:

5.1. Auf der Konfigurationsseite angekommen, muss als Erstens das Admin Zugangspasswort verändert werden. Dazu Klicken wir auf Administrator -> Bearbeiten

5.2. Nun müssen wir die Konfiguration der DKIM Keys vornehmen, welche wir beim Hinzufügen der DNS Records weiter oben noch außen vorgelassen haben. Mit Konfiguration -> ARC/DKIM-Keys gelangen wir auf die entsprechende Seite. Wir nehmen dort folgende Einstellungen durch:

Domain: mail.meinedomain.de
Selector: dkim
DKIM-Schlüssellänge: 1024 bit

Falls eine Fehlermeldung (unvollständig/ungültig) erscheint und der DKIM Schlüssel nicht erstellt werden kann, bitte den RSA Key wie folgt über die CLI mit folgenden Befehl erstellen:

openssl genrsa -out rsa.private 1024

Dann den ganzen Key kopieren und ins Feld eintragen, Domain angeben und anschließend auf importieren klicken.

5.3. Nun müssen wir den angezeigten öffentlichen Schlüssel kopieren und einen neuen TXT Records bei den Domaineinstellungen erstellen. Vollständig erstellt, sieht der Eintrag etwa wie folgt aus:

Hostname: Typ: Ziel:
dkim._domainkey.alphawebservices.de TXT  v=DKIM1;... TXT v=DKIM1;...

5.4. Zum erstellen eines neuen Postfach gehen wir wie folgt vor:

Konfiguration -> email-Setup -> Domain hinzufügen

Dort Angekommen fügen wir die Domain hinzu, etwa meinedomain.de und klicken unten auf "Domain hinzufügen und SOGo neustarten"

5.5. Nun sind wir bereit, das Postfach einzurichten, also die email Adresse unter der wir erreichbar sein wollen. Dazu klicken wie auf Mailboxen und anschließend auf "Mailboxen hinzufügen". Dort geben wir den Benutzernamen ein, etwa "postmaster" und generieren ein neues Passwort. Abschließend klicken wir auf "hinzufügen".

5.6. Sobald das Postfach eingerichtet ist, sind wir in der Lage Emails zu senden und zu empfangen. Dazu können wir die Webmail Alternative mit SOgo wählen oder unser gewohntes Emailprogramm wie Outlook oder Thunderbird.

Einzelnachweise:

https://community.hetzner.com/tutorials/setup-mailserver-with-mailcow
https://mailcow.github.io/mailcow-dockerized-docs/
https://www.youtube.com/watch?v=ACTC7N38kYo
https://www.youtube.com/watch?v=uY7VBjxQn80
https://gnulinux.ch/mailserver-mit-mailcow-betreiben