In dieser Dokumentation geht es darum, den Mailcow-Server neben einer Laravel Web-Anwendung mit Nginx zu installieren und vor allem konfigurieren.
Der Hauptfokus liegt dabei an den folgenden Themen:
Bei dem Hostanbieter, entsprechend der nachfolgenden Tabelle, die DNS-Einträge erstellen bzw. einstellen.
Name | Typ | Wert |
---|---|---|
A | 1.2.3.4 (IP-Adresse) | |
autodiscover | CNAME | mail.example.com |
autoconfig | CNAME | mail.example.com |
@ | MX 10 | mail.example.com |
@ | TXT | v=spf1 mx a -all |
dkim._domainkey | TXT | v=DKIM1; k=rsa; t=s; s=email; p=… (1) |
_dmarc | TXT | v=DMARC1; p=reject; rua=mailto:info@example.com (2) |
(1) Eintrag dkim._domainkey wird später bei der Konfiguration des Mail-Servers eingetragen
(2) die E-Mail entsprechend anpassen!
Zur Veranschaulichung meine DNS-Einstellungen bei Contabo.
In Kommandozeile bitte folgende Befehle ausführen:
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable docker.service
systemctl start docker.service
In Kommandozeile bitte folgende Befehle ausführen:
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
die Rechte zum Ausführen von Docker-Compose vergeben:
chmod +x /usr/local/bin/docker-compose
Klonen von Hauptzweig der Repository – es muss sichergestellt werden, dass die Umask gleich 0022 ist:
umask
0022 # <- muss 0022 ausgegeben
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
Nun muss die Konfigurationsdatei für Mailcow generiert werden.
./generate_config.sh
FQDN Ihres Servers angeben (i.d.R. "mail.example.com") und bestätigen die Eingabe mit der Enter-Taste.
Falls die Zeitzone nicht standardmäßig erkannt werden sollte, "Europe/Berlin" für Deutschland eingeben.
nano mailcow.conf
...
HTTP_PORT=8080
HTTP_BIND=
HTTPS_PORT=8443
HTTPS_BIND=
Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
Laden Sie die für Mailcow benötigten Images und führen Sie die Erstellungsdatei aus. Der Parameter -d startet mailcow: dockerized distanziert
docker-compose pull
docker-compose up -d
Nun kann der Mail Client im Browser aufgerufen werden.
Bitte beachten:
Port 8443 muss mit übergeben werden!
Die Standardanmeldeinformationen:
Zertifikat mittels folgenden Befehls anfordern
certbot -d mail.your-homepage.de
Mit der Ausgabe:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://mail.your-homepage.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mail.your-homepage.de/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mail.your-homepage.de/privkey.pem
Your certificate will expire on ... To non-interactively
renew *all* of your certificates, run "certbot renew"
#!/bin/bash
echo -n "Job started at "; echo -n `date +%d/%m/%Y\ %H:%M:%S`; echo -e
cp /etc/letsencrypt/live/mail.your-homepage.de/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem
cp /etc/letsencrypt/live/mail.your-homepage.de/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem
postfix_c=$(docker ps -qaf name=postfix-mailcow)
dovecot_c=$(docker ps -qaf name=dovecot-mailcow)
nginx_c=$(docker ps -qaf name=nginx-mailcow)
docker restart ${postfix_c} ${dovecot_c} ${nginx_c}
echo -n "Job finished successfully at "; echo -n `date +%d/%m/%Y\ %H:%M:%S`; echo -e
Der Post-Hook-Skript sollte alle 3 Monate ausgeführt werden, damit sie SSL-Verschlüsselung für den Mailserver funktioniert. Das kann entweder manuell oder auch automatisiert mittels eines Cronjobs erledigt werden.
Mit dem Befehl:
crontab -e
wird die Crontab-Datei bearbeitet oder erstellt, falls sie noch nicht existiert.
Wenn der BEfehlr das erste mal ausgeführt wird, so erscheint folgende Abfrage:
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Dann wird die Crontab-Datei geöffnet und der Cronjob kann eingerichtet werden:
...
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
00 00 * * * cd /path/to/bashfile && /bin/bash renew_mailcow_cert.sh >> renew_mailcow_job.log
In diesem Fall wird der Bashskript jeden Tag um 00:00 Uhr ausgeführt und die Ausgabe in renew_mailcow_job.log zurückgeschrieben.
Um Systemlogs für die Cronjobs anzeigen zu lassen, wird folgender Befehl ausgeführt:
grep CRON /var/log/syslog
Um HTTP-Anfragen automatisch zu HTTPS umzuleiten, führen Sie folgende Schritte durch:
1. Erstellen Sie eine Nginx-Konfigurationsdatei mithilfe des Befehls
nano /opt/mailcow-dockerized/data/conf/nginx/redirect.conf
2. Fügen Sie in diese Konfigurationsdatei nun folgenden Inhalt ein:
server {
root /web;
listen 80 default_server;
listen [::]:80 default_server;
include /etc/nginx/conf.d/server_name.active;
if ( $request_uri ~* "%0A|%0D" ) { return 403; }
location ^~ /.well-known/acme-challenge/ {
allow all;
default_type "text/plain";
}
location / {
return 301 https://$host$uri$is_args$args;
}
}
3. Mit „Strg + X“ das Dokument verlassen und anschließend mit „Y + ENTER“ speichern.
4. Nginx neustarten:
docker-compose restart nginx-mailcow
Mit Standardanmeldeinformationen anmelden:
und als erstes Admin-Passwort bearbeiten
Wechseln Sie nun zur E-Mail-Konfiguration, indem Sie oben auf "Konfiguration" und anschließend auf "E-Mail-Setup" klicken.
Der Reiter "Domains" ist bereits ausgewählt. Fügen Sie hier Ihre Domain durch einen Klick auf den Button "Domain hinzufügen" hinzu.
Geben Sie im Dialog, welcher erscheint, die Domain im Textfeld "Domain" und eine Beschreibung im Textfeld "Beschreibung" an.
Die restlichen Einstellungen (z.B. die maximale Anzahl oder Größe der Postfächer) können Sie anpassen, jedoch sollten die Standard-Werte i.d.R. ausreichend sein. Klicken Sie anschließend auf den Button "Domain hinzufügen und SOGo neustarten".
Wechseln Sie zum Reiter "Mailboxen" und fügen mithilfe des Buttons "Mailbox hinzufügen" eine neue Mailbox (Postfach) hinzu.
Dabei müssen Sie folgende Angaben machen:
Klicken Sie daraufhin auf den Button "Hinzufügen", um das Postfach zu erstellen.
Klicken Sie auf den Reiter "Konfiguration" und danach auf "ARC/DKIM-Keys"
Geben Sie Ihre Domain in das Textfeld "Domain(s)" unter "ARC/DKIM-Key hinzufügen" ein.
und der Schlüssel wird automatisch generiert.
Dieser Schlüssel soll nun kopiert werden um die DNS-Einstellungen zu vervollständigen.
Klicken Sie im Menü des Mailcow-Webinterfaces oben auf "Apps" und dann auf "Webmail":
oder rufen Sie den Webmail-Client direkt auf, indem Sie an die Domain Ihres Servers "/SOGo" anhängen:
Nun ist es möglich, sich an dem gerade erstellten Postfache anzumelden
und die erste E-Mail von dem persönlichen Postfach kann versendet werden!
Auf der https://www.mail-tester.com/ kann das eingerichtete E-Mail-Postfach auf Spam-Verdacht geprüft werden.
Die E-Mail-Adresse kopieren:
und eine Nachricht an die kopierte Adresse verschicken:
Dabei soll beachtet werden, dass ein längerer Text eingegeben wird! Hierzu hilft https://www.loremipsum.de/ 😊
Danach das Ergebnis prüfen:
Nach kurzer Zeit wird das angeforderte Ergebnis auch angezeigt. Wenn alles korrekt funktionieret bzw. die Einstellungen richtig sind, sollte es folgendermaßen aussehen:
Das war's! 🤘