From 7484aed75c87e1d2d0a87c2b903f22a3732dbc3a Mon Sep 17 00:00:00 2001
From: Jonas Leder <jonas@jonasled.de>
Date: Fri, 28 Jan 2022 21:40:39 +0100
Subject: [PATCH] add mailcow and debian setup

---
 public/API/mainMenu.json        |   5 +
 public/anleitungen/mailcow.html | 166 ++++++++++++++++++++++++++++++++
 2 files changed, 171 insertions(+)
 create mode 100644 public/anleitungen/mailcow.html

diff --git a/public/API/mainMenu.json b/public/API/mainMenu.json
index 0824172..51538ca 100644
--- a/public/API/mainMenu.json
+++ b/public/API/mainMenu.json
@@ -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"
             }
         ]
     },
diff --git a/public/anleitungen/mailcow.html b/public/anleitungen/mailcow.html
new file mode 100644
index 0000000..db97559
--- /dev/null
+++ b/public/anleitungen/mailcow.html
@@ -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>
\ No newline at end of file
-- 
GitLab