199 lines
No EOL
14 KiB
HTML
199 lines
No EOL
14 KiB
HTML
<!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 <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>
|
|
<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 <code
|
|
class="language-text">No</code> 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 <code class="language-text">deb.debian.org</code>, 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 <code class="language-text">Europe/Berlin</code> 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 <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
|
|
die IP Adresse der reverse DNS Eintrag auf den gleichen Domain wie im MX Eintrag geändert werden (also in meinem
|
|
Fall auf <code class="language-text">mail.jonasled-test.xyz</code>)
|
|
</p>
|
|
<img src="/API/getFile.php?filename=img/mailcow_dns.jpg">
|
|
<p>
|
|
Wenn nun alle DNS Einstellungen 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 <code class="language-text">edit</code>
|
|
(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 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
|
|
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 <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>
|
|
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 <code class="language-text">Add</code> 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 <code class="language-text">Configuration</code> --> <code class="language-text">Configuration & Details</code> 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 <code class="language-text">dkim._domainkey</code> eintragen.
|
|
</p>
|
|
<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.
|
|
</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> |