2022-01-28 21:40:39 +01:00
<!DOCTYPE html>
< html lang = "de" >
< head >
< meta charset = "UTF-8" >
< meta content = "width=device-width, initial-scale=1.0" name = "viewport" >
< title > < / title >
< link href = "/css/style.css" rel = "stylesheet" >
< / head >
< body >
< jl-header data-title = "Mailcow auf Debian installieren" > < / jl-header >
< div id = "content" >
< p > In der folgenden Anleitung werde ich darauf eingehen wie man eine VM mit Debian installiert und darauf
Mailcow.< / p >
< p >
Für die Debian Installation wird zuerst ein aktuelles ISO Image benötigt. Dieses kann < a
href="https://www.debian.org/download">hier< / a > heruntergeladen werden. Hierfür wird ein System mit
mindestens 2GB RAM, 2 Kernen und 10GB Storage empfohlen. Wenn die VM con der CD gebootet wird kommt als
erstes ein Auswahlmenü, in diesem die Option Install wählen und danach enter drücken.< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/debian_grub.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p > Im nächsten Schritt wird die Sprache, die Region und das Tastaturlayout fetgelegt. Im nächsten Schritt
konfiguriert Debian einige Einstellungen wie die Netzwerkkonfiguration. Wenn die automatische Konfiguration
abgeschlossen ist, frag der Installer nach dem Hostname, dieser kann frei gewählt werden. Ich verwende
hierbei gerne Namen, die zu dem System passen, wie zum Beispiel mailcow. Der Domain Name im darauffolgenden
Schritt kann leer gelassen werden. Wenn dieser festgelegt wurde sollte das Passwort für den root Benutzer
2022-01-28 23:10:23 +01:00
festgelegt werden. Hierbei sollte auf einen < a href = "/passwordgen.html/" > Passwortgenerator< / a >
2022-01-28 21:40:39 +01:00
gesetzt werden. Nachdem das Passwort für den root Benutzer festgelegt wurde fragt Debian noch nach
benötigten Daten für einen nicht root Nutzer. Hierbei muss ein Anzeigenahme, ein Nutzername und ein < a
2022-01-28 23:10:23 +01:00
href="/passwordgen.html/">generiertes Passwort< / a > festgelegt werden. Die Partitionierung
2022-01-28 22:26:59 +01:00
wird mit < code class = "language-text" > Guieded - use entire disk< / code > bestätigt, danach die Festplatte
ausgewählt. Als Partitionsschema wird
< code class = "language-text" > All Files in one partition< / code > gewählt. Wenn alle Optionen gesetzt wurden
wird nochmal eine zusammenfassung
angezeigt. Diese wird dann mit < code
class="language-text">Finish partitioning and write changes to disk< / code > und danach nochmal mit < code
class="language-text">yes< / code >
bestätigt.
< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/debian_partition_method.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/debian_partition_finish.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p > Nun wird Debian auf die Festplatte installiert. Jenachdem wie schnell das Bootlaufwerk und die Festplatte ist
kann dieser Schritt einige Minuten dauern. Nachdem die ersten Dateien auf die Festplatte kopiert wurden,
2022-01-28 22:26:59 +01:00
fragt Debian ob CDs mit Paketen eingelesen werden sollen. Dieser Schritt sollte mit < code
class="language-text">No< / code > bestätigt werden.
2022-01-28 21:40:39 +01:00
Danach sollte die Region wo der Server steht ausgewählt werden, damit wählt Debian den nächstbesten Server
für die Paketquellen aus. Die in der Region verfügbaren Server werden in der nächsten Seite angezeigt.
2022-01-28 22:26:59 +01:00
Hierbei können im Prinzip alle verwendet werden außer < code class = "language-text" > deb.debian.org< / code > , da
diese relativ langsam sind.
2022-01-28 21:40:39 +01:00
Generell empfehle ich hierbei große Hoster oder UNIs. Ein Proxy im nächsten Schritt muss nicht angegeben
werden. Die Analysedaten sollten in jedem Fall abgelehnt werden, außer du willst deine Daten an Debian
weitergeben. Im nächsten Schritt sollte nur der SSH Server aktiviert werden. Die Optionen können deaktiviert
oder aktiviert werden, indem mit den Pfeiltasten auf die entsprechende Option navigiert wird und dann die
Leertaste gedrückt wird.< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/debian_scan_media.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/debian_survey.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/debian_software.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p > Nachdem der SSH Server installiert wurde, muss der Bootloader installiert werden, dafür muss bei der Frage ob
Grub installiert werden soll "Yes" gedrückt werdeb und in der nächsten Seite die Systemfestplatte ausgewählt
werden.< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/debian_grub_install.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p > Nachdem das System installiert wurde wird Debian neugestartet. Nun kann sich entweder über die Oberfläche
angemeldet werden oder via SSH über die IP Adresse. Nach der Authentifizierung am System mit dem zuvor
erstellten Nutzer muss sich als root angemeldet werden und danach das System auf den neuesten Stand gebracht
werden.< / p >
< pre >
< code class = "language-bash" > su root
# nun muss das Passwort den root Benutzers eingegeben werden
apt update
apt upgrade -y< / code >
< / pre >
< p > Nachdem das System auf dem neuesten Stand ist kann (auch als root) Docker installiert werden. Docker stellt
hierfür ein Script bereit. Zum herunterladen des Scripts muss zuerst Curl installiert werden.< / p >
< pre >
2022-01-28 22:29:43 +01:00
< code class = "language-bash" > su root
# nicht benötigt falls noch als root angemeldet aus dem vorherigen Schritt.
2022-01-28 21:40:39 +01:00
apt install curl -y
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker
apt install docker-compose git -y< / code >
< / pre >
< p > Nachdem nun die erforderlichen Vorbereitungen auf dem System abgeschlossen wurden, kann mit der Installation
vom Mailcow selber begonnen werden. Dazu muss als erstes mit Git sich die Anwendung heruntergeladen werden
und danach die Konfigurationsdatei mit dem mitgelieferten Script generiert werden. Das nachfolgende Script
muss wie auch die beiden vorherigen mit root Rechten ausgeführt werden. Das Script fragt zuerst nach dem
Hostname, welcher später verwendet werden soll um das WebUI von Mailcow zu erreichen und danach nach der
2022-01-28 22:26:59 +01:00
Zeitzone, für welche < code class = "language-text" > Europe/Berlin< / code > verwendet werden sollte. < / p >
2022-01-28 21:40:39 +01:00
< pre >
2022-01-28 22:29:43 +01:00
< code class = "language-bash" > su root
# nicht benötigt falls noch als root angemeldet aus dem vorherigen Schritt.
cd /opt
2022-01-28 21:40:39 +01:00
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh< / code >
< / pre >
< p >
Nachdem nun Mailcow zum ersten starten vorbereitet wurde, muss bevor es gestartet werden kann, die Firewall
angepasst werden. Dafür müssen die nachfolgenden Ports von außen erreichbar sein:
< ul >
< li > 25: SMTP< / li >
< li > 465: SMTP Secure< / li >
< li > 585: SMTP Submission< / li >
< li > 143: IMAP< / li >
< li > 993: IMAP Secure< / li >
< li > 80: HTTP< / li >
< li > 443: HTTPS< / li >
< / ul >
Falls Mailcow nicht außerhalb des lokalen Netztes erreichbar sein soll (z.B. weil Mails nur über VPN abrufbar
sein sollen) reicht es Port 25 nach außen zu öffnen. Dieser wird aber zwingend benötigt, da über den SMTP Port
eingehende Mails ankommen. Nachdem die Ports freigegeben wurden, müssen noch einige DNS Einträge angelegt
werden. Der
erste ist ein A Record für den im Config Script angegebenen Hostname auf die öffentliche IP Adresse des Servers
gesetzt werden. Als zweiter Eintrag muss ein MX Eintrag auf den Domain selber gesetzt werden. Als MX Server muss
der bei Mailcow angegebene Hostname angegeben werden. Die Priorität ist bei nur einem Server uninteressant,
daher kann hier jede Zahl eingegeben werden. Bei mehreren Servern versucht der sendende Server von der kleinsten
2022-01-28 22:26:59 +01:00
Priorität an alle durch bis er einen erreichen kann. Als nächstes muss ein CNAME Eintrag für < code
class="language-text">autodiscover< / code > und
einer < code class = "language-text" > autoconfig< / code > auf den Mail Domain angelegt werden. Der nächste Eintrag ist
ein TXT Eintrag für den subdomain
< code class = "language-text" > _dmarc< / code > mit dem Inhalt < code class = "language-text" > v=DMARC1; p=none< / code > .
Als letzten Eintrag brauchen wir noch den SPF Eintrag, dieser wird
direkt auf den Domain angelegt und muss vom Typ TXT sein. Der Inhalt des Eintrags lautet < code
class="language-text">v=spf1 a mx ip4:< IP
DES SERVERS> ~all< / code >
wobei < code class = "language-text" > < IP DES SERVERS> < / code > durch die IP Adresse des Servers ersetzt werden
muss. Danach muss beim Hoster für
2022-01-28 22:11:01 +01:00
die IP Adresse der reverse DNS Eintrag auf den gleichen Domain wie im MX Eintrag geändert werden (also in meinem
2022-01-28 22:26:59 +01:00
Fall auf < code class = "language-text" > mail.jonasled-test.xyz< / code > )
2022-01-28 21:40:39 +01:00
< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/mailcow_dns.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p >
2022-01-28 22:06:57 +01:00
Wenn nun alle DNS Einstellungen laufen kann Mailcow das erste mal mit dem nachfolgenden Befehl gestartet
2022-01-28 21:40:39 +01:00
werden. Beim ersten mal werden alle Programme heruntergeladen, abhängig von der Internetgeschwindigkeit kann
dies einige Minuten dauern. Nach ein paar weiteren Minuten sollte über den festgelegten Domain das
Webinterface erreichbar sein.
< / p >
< pre >
2022-01-28 22:29:43 +01:00
< code class = "language-bash" > su root
# nicht benötigt falls noch als root angemeldet aus dem vorherigen Schritt.
docker-compose up< / code >
2022-01-28 21:40:39 +01:00
< / pre >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/mailcow_login.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p >
Nachdem das oben abgebildete Login Fenster angezeigt wird, ist Mailcow fertig gestartet. Der default
Nutzername ist admin mit dem Passwort moohoo, dieses sollte umgehend nach dem ersten Login abgeändert
2022-01-28 22:26:59 +01:00
werden. Dazu in der Benutzerübersicht beim Admin Benutzer auf < code class = "language-text" > edit< / code >
(blauer Button im Bild unten) klicken
2022-01-28 21:40:39 +01:00
und ein neues Passwort mit
2022-01-28 23:10:23 +01:00
einem < a href = "/passwordgen.html" > Passwortgenerator< / a > erstellen und speichern. Als nächstes
2022-01-28 21:40:39 +01:00
empfehle ich dringend ein Zweifaktor Login festzulegen. Dazu kann entweder wenn ein passender < a
href="https://www.amazon.de/dp/B07HBD71HL/">Hardwareschlüssel< / a > vorhanden ist WebAuthn oder Yubico
verwendet werden. Wenn kein Hardwareshlüssel vorhanden ist, können time based OTP Keys verwendet werden.
Hierfür kann ich entweder die Integration im kostenpflichtigen Bitwarden Passwortmanager oder die Android
App < a href = "https://play.google.com/store/apps/details?id=org.liberty.android.freeotpplus" > FreeOTP+< / a >
2022-01-28 22:26:59 +01:00
empfehlen. Im nächsten Schritt kann der Domain für die Mails angelegt werden, dafür auf die Domain
Konfiguration unter < code class = "language-text" > Configuration< / code > --> < code
class="language-text">Mail Setup< / code > wechseln und einen neuen Domain anlegen. (siehe Screenhots)
In dem Popup muss nur der Domain angegeben werden und danach mit < code
class="language-text">Add domain and restart SOGo< / code > angelegt
werden. Nach einem Moment warten ist der Domain in Mailcow erstellt und unter < code
class="language-text">Mailboxes< / code > können nun
2022-01-28 21:40:39 +01:00
Mailboxen angelegt werden.
< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/mailcow_setup_mail.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/mailcow_domain_setup.jpg" > < / jl-img > < br >
< jl-img src = "/img/anleitungen/mailcow/mailcow_domain_new_1.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/mailcow_domain_new_2.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p >
2022-01-28 22:26:59 +01:00
In der Mailbox Konfiguration kann nun mit dem Button < code class = "language-text" > Add mailbox< / code > eine
neue Mailbox angelegt werden. Hier
muss der Teil der Mail vor dem < code class = "language-text" > @< / code > angegeben werden. (Beispielswiese für
die Mail < code class = "language-text" > info@jonasled-test.xyz< / code >
2022-01-28 21:40:39 +01:00
muss hier info angegeben werden) Danach sollte der volle Name des Nutzers und ein Passwort aus einem
2022-01-28 23:10:23 +01:00
< a href = "/passwordgen.html/" > Passwortgenerator< / a > festgelegt werden. Wenn nun alle
2022-01-28 22:26:59 +01:00
Einstellungen passen, kann der Domain mit < code class = "language-text" > Add< / code > angelegt werden. Nun kann
sich der Nutzer ins SOGo anmelden
2022-01-28 21:40:39 +01:00
um das Webmail zu nutzen oder mit einem Client wie Thunderbird anmelden.
< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/mailcow_mailbox_new.jpg" > < / jl-img >
2022-01-28 21:40:39 +01:00
< p >
Nachdem wir nun die erste Mailbox erstellt haben, muss noch ein DNS Eintrag erstellt werden, damit andere
Server validieren können, dass der sendende Server wirklich authorisiert dazu ist. Dazu im Mailcow Admin
2022-01-28 22:26:59 +01:00
Interface auf < code class = "language-text" > Configuration< / code > --> < code class = "language-text" > Configuration & Details< / code > gehen und dann abschließend auf der Seite unter
2022-01-28 22:03:03 +01:00
Configuration auf ARC/DKIM Keys gehen. Danach den beim Domain angegebenen Key kopieren und in der DNS
2022-01-28 22:26:59 +01:00
Verwaltung als TXT Record mit der Bezeichnung < code class = "language-text" > dkim._domainkey< / code > eintragen.
2022-01-28 22:03:03 +01:00
< / p >
2022-05-01 12:53:54 +02:00
< jl-img src = "/img/anleitungen/mailcow/mailcow_dkim_webui.jpg" > < / jl-img >
< jl-img src = "/img/anleitungen/mailcow/mailcow_dkim_dns.jpg" > < / jl-img >
2022-01-28 22:03:03 +01:00
< p >
Nun ist unser Mail Server vollständig konfiguriert und kann auch eingesetzt haben. Um die Funktion zu testen
sollte zuerst mit einem anderen Anbieter eine Mail an eine Adresse auf dem neuen Server gesendet werden.
Danach muss noch die ausgehende Funktion getestet werden. Dafür gibt es die Seite < a
href="https://www.mail-tester.com/">mail-tester.com< / a > . Auf dieser bekommt man eine Mail Adresse, an
welche man eine Mail senden kann und danach alle fehler angezeigt bekommt.
2022-01-28 21:40:39 +01:00
< / p >
< / div >
< jl-footer > < / jl-footer >
< script src = "/js/script.js" > < / script >
< script >
document.title = "Mailcow installieren - Jonas Leder";
< / script >
< / body >
< / html >