add mailcow and debian setup

This commit is contained in:
Jonas Leder 2022-01-28 21:40:39 +01:00
parent ac9be3cff5
commit 7484aed75c
2 changed files with 171 additions and 0 deletions

View file

@ -92,6 +92,11 @@
"name": "Nextcloud auf Proxmox",
"url": "/anleitungen/nextcloud.html",
"type": "link"
},
{
"name": "Mailcow E-Mail Server",
"url": "/anleitungen/mailcow.html",
"type": "link"
}
]
},

View file

@ -0,0 +1,166 @@
<!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>
<img src="/API/getFile.php?filename=img/debian_grub.jpg">
<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
festgelegt werden. Hierbei sollte auf einen <a href="https://passwordsgenerator.net/">Passwortgenerator</a>
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
href="https://passwordsgenerator.net/">generiertes Passwort</a> festgelegt werden. Die Partitionierung
wird mit "Guieded - use entire disk" bestätigt, danach die Festplatte ausgewählt. Als Partitionsschema wird
"All Files in one partition" gewählt. Wenn alle Optionen gesetzt wurden wird nochmal eine zusammenfassung
angezeigt. Diese wird dann mit "Finish partitioning and write changes to disk" und danach nochmal mit "yes"
bestätigt.</p>
<img src="/API/getFile.php?filename=img/debian_partition_method.jpg">
<img src="/API/getFile.php?filename=img/debian_partition_finish.jpg">
<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,
fragt Debian ob CDs mit Paketen eingelesen werden sollen. Dieser Schritt sollte mit "No" bestätigt werden.
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.
Hierbei können im Prinzip alle verwendet werden außer "deb.debian.org", da diese relativ langsam sind.
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>
<img src="/API/getFile.php?filename=img/debian_scan_media.jpg">
<img src="/API/getFile.php?filename=img/debian_survey.jpg">
<img src="/API/getFile.php?filename=img/debian_software.jpg">
<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>
<img src="/API/getFile.php?filename=img/debian_grub_install.jpg">
<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>
<code class="language-bash">su root #nicht benötigt falls noch als root angemeldet aus dem vorherigen Schritt.
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
Zeitzone, für welche "Europe/Berlin" verwendet werden sollte. </p>
<pre>
<code class="language-bash">cd /opt
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
Priorität an alle durch bis er einen erreichen kann. Als nächstes muss ein CNAME Eintrag für autodiscover und
einer autoconfig auf den Mail Domain angelegt werden.
</p>
<img src="/API/getFile.php?filename=img/mailcow_dns.jpg">
<p>
Wenn nun die beiden DNS Einträge laufen kann Mailcow das erste mal mit dem nachfolgenden Befehl gestartet
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>
<code class="language-bash">docker-compose up</code>
</pre>
<img src="/API/getFile.php?filename=img/mailcow_login.jpg">
<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
werden. Dazu in der Benutzerübersicht beim Admin Benutzer auf "edit" (blauer Button im Bild unten) klicken
und ein neues Passwort mit
einem <a href="https://passwordsgenerator.net">Passwortgenerator</a> erstellen und speichern. Als nächstes
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>
empfehlen. Im nächsten Schritt kann der Domain für die Mails angelegt werden, dafür auf die Domin
Konfiguration unter Configuration --> Mail Setup wechseln und einen neuen Domain anlegen. (siehe Screenhots)
In dem Popup muss nur der Domain angegeben werden und danach mit "Add domain and restart SOGo" angelegt
werden. Nach einem Moment warten ist der Domain in Mailcow erstellt und unter "Mailboxes" können nun
Mailboxen angelegt werden.
</p>
<img src="/API/getFile.php?filename=img/mailcow_setup_mail.jpg">
<img src="/API/getFile.php?filename=img/mailcow_domain_setup.jpg"><br>
<img src="/API/getFile.php?filename=img/mailcow_domain_new_1.jpg">
<img src="/API/getFile.php?filename=img/mailcow_domain_new_2.jpg">
<p>
In der Mailbox Konfiguration kann nun mit dem Button "Add mailbox" eine neue Mailbox angelegt werden. Hier
muss der Teil der Mail vor dem "@" angegeben werden. (Beispielswiese für die Mail info@jonasled-test.xyz
muss hier info angegeben werden) Danach sollte der volle Name des Nutzers und ein Passwort aus einem
<a href="https://passwordsgenerator.net/">Passwortgenerator</a> festgelegt werden. Wenn nun alle
Einstellungen passen, kann der Domain mit "Add" angelegt werden. Nun kann sich der Nutzer ins SOGo anmelden
um das Webmail zu nutzen oder mit einem Client wie Thunderbird anmelden.
</p>
<img src="/API/getFile.php?filename=img/mailcow_mailbox_new.jpg">
<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
Interface auf Configuration --> Configuration & Details gehen und dann abschließend auf der Seite unter
Configuration auf ARC/DKIM Keys gehen. Danach den beim Domain angegebenen Key kopieren und in der DNS Verwaltung als TXT Record mit der Bezeichnung "dkim._domainkey" eintragen.
</p>
<img src="/API/getFile.php?filename=img/mailcow_dkim_webui.jpg">
<img src="/API/getFile.php?filename=img/mailcow_dkim_dns.jpg">
</div>
<jl-footer></jl-footer>
<script src="/js/script.js"></script>
<script>
document.title = "Mailcow installieren - Jonas Leder";
</script>
</body>
</html>