Briefkasten Header

MailCow mit Reverse Proxy auf Debian / Ubuntu installieren

In dieser Anleitung wird erklärt, wie Sie MailCow auf Ihrem Server neben einem Apache Webserver installieren. Hierfür wird Mailcow für die Verwendung eines Reverse Proxy konfiguriert. Zudem erfahren Sie, wie sie SSL Zertifikate von Let’s Encrypt abrufen und einen Virtual Host erstellen.

Disclaimer:

Seien Sie sich bewusst, welche Aufgabe es ist, einen Mailserver zu administrieren. Sie müssen Einstellungen in vielen Bereichen tätigen – Auf dem Server selbst und im DNS Ihres Domainanbieters. Sie müssen eventuell den Kontakt mit Anbietern wie T-Online oder GMX pflegen, um überhaupt an diese Provider senden zu können. Zudem müssen Sie Ihr System aktuell halten und gegen Angreifer schützen.
Auf der anderen Seite bietet ein eigener Mailserver eine gute Möglichkeit sich Wissen in vielen Bereichen anzueignen. Zudem sind Sie unabhängig von den großen Providern, welche Ihre Mails eventuell für Werbezwecke analysieren. Außerdem existiert ein Server mit verfügbarer Kapazität oftmals bereits, sodass Ihnen keine weiteren Kosten durch den Betrieb zusätzlicher Hardware entstehen.

DNS Einträge setzen

Setzen Sie zunächst die DNS Einträge, um Mails auf Ihrem System zu empfangen. In diesem Tutorial lautet die Adresse des Servers mail.voiceoverit.de bzw. IHR_HOSTNAME. Passen Sie die Einstellungen bei Bedarf an Ihre Bedürfnisse an.

NameTypWert
mailAIHRE_IP
autoconfigCNAMEmail
autodiscoverCNAMEmail
@MXmail

Im weiteren Verlauf der Installation sollten Sie noch die DKIM, DMARC und SPF Einträge setzen. Die erforderlichen Werte bekommen Sie später von Mailcow angezeigt. Optional können Sie auch noch weitere Einträge setzen. Weitere Informationen erhalten Sie in der Dokumentation von Mailcow.

Firewall konfigurieren

Sollte Ihr System über eine Firewall verfügen, stellen Sie sicher, dass folgende Ports geöffnet sind:

DienstProtokollPort
SMTPTCP25
SMTPSTCP465
SMTPTCP587
IMAPTCP143
IMAPSTCP993
POP3TCP110
POP3STCP995
ManageSieveTCP4190
HTTPTCP80
HTTPSTCP443

Docker & Docker-Compose installieren

Docker:

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

Stellen Sie nach der Installation sicher, dass der Dienst gestartet wurde und läuft:

systemctl enable docker.service
systemctl start docker.service
systemctl status docker.service
#Stellen Sie sicher, dass Docker läuft:
docker.service - Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2020-03-06 17:04:12 UTC; 52s ago
      Docs: https://docs.docker.com
  Main PID: 3775 (dockerd)
     Tasks: 8
    Memory: 78.0M
    CGroup: /system.slice/docker.service
            └─3775 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Docker-Compose:

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

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

Repository klonen und MailCow konfigurieren

Stellen Sie zunächst sicher, dass die Rechte auf 644 stehen. Führen Sie hierfür „umask“ aus. Sie sollten 0022 als Antwort erhalten. Dies entspricht dem Recht 644.
Wechseln Sie anschließend in das Verzeichnis /opt
Führen Sie dort die folgendenden Befehle aus:

apt-get install git

cd /opt/

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

cd mailcow-dockerized 

Führen Sie nun das erste mit ./generate_config.sh Skript aus. Sie müssen hier unter anderem Ihren vollständigen Hostnamen setzten. Zudem setzen Sie Einstellungen wie die Zeitzone oder ob Sie CalmAV verwenden möchten.

FQDN angeben

In diesem Tutorial wird Mailcow mit einem Reverse Proxy konfiguriert. Dies ermöglicht es zum Beispiel auf dem gleichen Server noch andere Webdienste bereitstellen zu können. Aus diesem Grund wird in der folgenden Konfiguration mailcow an die IP 127.0.0.1 und die Ports 8443 für HTTPS und 8080 für HTTP gebunden.
Verwenden Sie nicht die Ports 8081, 9081 oder 65510.
Öffnen Sie hierfür die mailcow.conf

Mailcow mit Reverse Proxy einsetzen.

Zusätzlich wird die Ausfürung des Automatic Certificate Management Enviroment verhindert. Hiermit verbieten Sie das Erstellen von SSL Zertifikaten über Let’s Encrypt. Dies wird später von certbot übernommen, um gleichzeitig die Zertifikate für gehostete Websites auf dem System abzurufen. Setzen sie hierfür zusätzlich SKIP_LETS_ENCRYPT=y

Let’s Encrypt ACME deaktivieren

Apache Reverse Proxy konfigurieren

Installieren Sie Apache2 mittels apt-get install apache2 und aktivieren Sie die entsprechenden Erweiterungen:

a2enmod proxy proxy_http ssl headers rewrite

Da Sie noch kein SSL Zertifikat besitzen, sollten Sie zunächst ein Zertifikat von Let’s Encrypt abrufen. Hierfür muss temporär eine Website unter dem zukünftigen Hostnamen des Mailservers erstellt werden. Erstellen Sie hiernach einen neuen Virtual Host mit Namen Ihres zuvor gewählten Hostnames:

nano /etc/apache2/sites-available/IHR_HOSTNAME.de.conf

Fügen Sie nun eine Konfiguration für eine einfachen VirtualHost ein. Achten Sie darauf, dass das entsprechende Verzeichnis existiert.

 <VirtualHost *:80>
    ServerName IHR_HOSTNAME
    DocumentRoot /var/www/html/
   ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost> 

Aktivieren Sie anschließend den Virtual Host mit a2ensite IHR_HOSTNAME und starten Apache neu mit systemctl reload apache2

Certbot installieren

Installieren Sie nun certbot um Zertifikate von Let’s Encrypt abzurufen:

apt install certbot python-certbot-apache -y 

Ist certbot installiert, können Sie ein Zertifikat für Ihren Hostnamen abrufen. Führen Sie hierfür certbot -d IHR_HOSTNAME aus. Führen Sie certbot zum Ersten mal aus, werden Sie nach einer Email-Adresse gefragt. Außerdem müssen Sie den Nutzungsbedingungen zustimmen. Ist das Zertifikat abgerufen werden Sie gefragt, ob certbot Ihre Apache Konfiguration für die Verwendung des SSL-Zertifikates anpassen soll. Wählen Sie nein, in dem Sie in folgenden Dialog mit einer 1 antworten:

Es wurde nun das entsprechende Zertifikat in /etc/letsencrypt/live/IHR_HOSTNAME/ abgelegt. Überprüfen Sie, ob ein Aufruf im Browser über SSL funktioniert. Rufen sie hierfür https://IHR_HOSTNAME in Ihrem Browser auf. Wechsen Sie anschließend zurück in /etc/apache2/sites-available/ und editieren Sie die zuvor erstellte VirtualHost-Datei. Entfernen Sie nun die aktuelle Konfiguration und fügen Sie folgenden Inhalt ein. Setzen Sie ihren Hostnamen an den fett markierten stellen ein.

<VirtualHost *:80>
   ServerName IHR_HOSTNAME
   ServerAlias autodiscover.*
   ServerAlias autoconfig.*
   RewriteEngine on
   RewriteCond %{HTTP_HOST} ^autoconfig. [NC]
   RewriteRule ^ - [S=1]
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}# [L,NE,R=permanent]
   RewriteRule ^ /autoconfig.php [PT]
   ProxyPass / http://127.0.0.1:8080/
   ProxyPassReverse / http://127.0.0.1:8080/
   ProxyPreserveHost On
   ProxyAddHeaders On
   RequestHeader set X-Forwarded-Proto "http"
   RewriteCond %{SERVER_NAME} =IHR_HOSTNAME [OR]
   RewriteCond %{SERVER_NAME} =autodiscover.* [OR]
   RewriteCond %{SERVER_NAME} =autoconfig.*
   RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
 </VirtualHost>
 <VirtualHost *:443>
   ServerName IHR_HOSTNAME
   ProxyPass / http://127.0.0.1:8080/
   ProxyPassReverse / http://127.0.0.1:8080/
   ProxyPreserveHost On
   ProxyAddHeaders On
   RequestHeader set X-Forwarded-Proto "https"
   Include /etc/letsencrypt/options-ssl-apache.conf
   SSLCertificateFile /etc/letsencrypt/live/IHR_HOSTNAME/fullchain.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/IHR_HOSTNAME/privkey.pem
 </VirtualHost>

Löschen Sie anschließend eine von certbot erstellte Datei. Diese Datei ist für den verschlüsselten Aufruf Ihrer Website / Ihres Hostnamens. Sie steht mit der soeben angelegten Konfiguration in Konflikt. Die Datei befindet sich in /etc/apache2/sites-available/

 rm /etc/apache2/sites-available/IHR_HOSTNAME-le-ssl.conf 

Nachdem Sie die Änderungen durchgeführt haben, starten Sie Apache neu.

service apache2 restart

Mailcow herunterladen und installieren

Nachdem alle erforderlichen Einstellungen getroffen wurden laden Sie die Dateien für Mailcow herunter. Anschließend wird mailcow gestartet. Dieser Vorgang kann einige Minuten in Anspruch nehmen.

cd /opt/mailcow-dockerized
docker-compose pull
docker-compose up -d

Mailcow Weboberfläche aufrufen

Sollten Sie alles befolgt haben, können Sie nun Ihre Mailcow unter der von Ihnen gewählten Adresse aufrufen. Ihr Browser sollte sie automatisch auf https umleiten. Melden Sie sich anschließend mit dem Benutzernamen admin und dem Passwort moohoo an. Unmittelbar nach der Anmeldung sollten Sie das Passwort des Administratorkontos ändern. Klicken Sie hierfür unter Administrator bearbeiten rechts auf die Schaltfläche bearbeiten.

Domain hinzufügen

Um eine Domain zu Ihrer Mailcow hinzuzufügen, wählen sie im oberen Menüband den Punkt E-Mail-Setup. Danach Domain hinzufügen. Es öffnet sich ein Fenster. Tragen Sie hier die entsprechenden Werte ein. Drücken Sie anschließend auf Domain hinzufügen und SOGo neustarten.

Mailcow Mailbox konfiguration
  • Domain: Ihre Domain – Später der linke Teil der Emailadresse nach dem @
  • Beschreibung: Hier können Sie eine Beschreibung eintragen
  • Max. mögl. Aliasse: Können als alternative Empfängeradresse erstellt werden. Können Mails an mehrere Postfächer weiterleiten.
  • Max. mögl. Mailboxen: Maximale Anzahl der Postfächer der Domain
  • Standard-Quota einer Mailbox: Standardmäßig wird einer Mailbox so viel Speicher bereitgestellt.
  • Max. Speicherplatz einer Mailbox: Sie können einer Mailbox maximal so viel Speicher zuweisen
  • Domain Speicherplatz gesamt: Der Speicher welcher dieser Domain für Mailboxen zur Verfügung steht.

Nachdem Sie Ihre Domain(s) hinzugefügt haben, können Sie im gleichen Menü hinter jeder Domain auf den blauen Butten DNS drücken. Nach wenigen Sekunden bekommen Sie die fehlenden DNS Einträge aufgelistet. Setzen Sie die fehlenden Einträge bei Ihrer Domain um für andere Anbieter vertrauenswürdig zu sein. Hier sind insbesondere SPF und DMARC wichtig. Zudem sollten Sie sich einen DKIM Domain Key setzen. Diese Option finden Sie unter Server-KonfigurationARC-DKIM-Keys.

Postfach erstellen

Sie können nun Postfächer erstellen. Wechseln Sie hierfür in E-Mail-SetupMailboxenMailbox hinzufügen. Die Konfiguration gelingt wie folgt:

  • Benutzername: Der Teil links vor dem @ – (z.B. ihr.name@voiceoverit.de)
  • Domain: Linker Teil der Mailadresse nach dem @ – (z.B. ihr.name@voiceoverit.de)
  • Vor- und Nachname: Name des Postfach-Nutzers
  • Speicherplatz: So viel Speicher steht dem Postfach zur Verfügung
  • Passwort: Passwort des Email-Accounts.

Die grundlegende Konfiguration ist nun abgeschlossen. Sie können sich nun in das erstellte Postfach einloggen. Hierfür können Sie zum Beispiel den Webmailer SOGo verwenden. Diesen können Sie unter https://IHR_HOSTNAME/SOGo erreichen. Alternativ können Sie auch die erstellten Postfächer in Ihrem Mobiltelefon oder Mailprogramm wie Outlook oder Thunderbird einbinden. Die Entsprechenden Daten hierfür lauten:

ServerAdressePortSSLPasswort
SMTP / PostasugangIHR_HOSTNAME465SSL / TLSnormal, Passwort
IMAP / PosteingangIHR_HOSTNAME993SSL / TLSnormal, Passwort

Weiterführende Informationen:
Weitere Artikel über Mailcow bei VoiceOverit.de finden Sie hier

Vielen Dank an die Community rund um Mailcow! Weitere Informationen zu Mailcow findet Ihr unter mailcow.email bzw. https://github.com/mailcow/mailcow-dockerized.
Weiterführende Informationen zur Installation und Wartung gibt es in der englischen Dokumentation: https://mailcow.github.io/mailcow-dockerized-docs

Wenn Ihnen dieser Beitrag geholfen hat, würde ich mich über eine Bewertung oder einen Kommentar freuen!