Mailu individuell konfigurieren

Mailu ist eine komplette E-Mailserver-Lösung basierend auf Docker. Hierbei werden alle nötigen Funktionen wie zum Beispiel SMTP (Postfix) , IMAP / POP3 (Dovecot), Filterregeln (Sieve), Antispam (Rspamd), Antivirus (ClamAV), Webmail (Roundcube), Fetchmail und auch ein modernes Verwaltungstool (Mailu Admin) bereitgestellt.
Alle Dienste laufen in eigenen Containern und kommunizieren über das Netzwerk miteinander. Weitere Details werden auf der Projektseite aufgezeigt.
Im Standardfall wird Mailu bereits durchaus gut und sinnvoll konfiguriert, womit die größten Anwendungsfälle bereits im Vorfeld abgedeckt sind. Allerdings ist der Wille nach nach individueller Konfiguration durchaus gerechtfertigt und darum soll es in diesem Artikel gehen.
Wie werden einzelne Dienste von Mailu konfiguriert, welche Möglichkeiten gibt es und was gibt es zu beachten.
Wichtig:
Alle hier genannten Beispiele können funktionieren, sollten aber auf eigene Gefahr verwendet werden. Ich übernehme keinerlei Haftung für Fehlkonfiguration, oder falsche Handhabung. Die Dokumentation und Hinweise der Entwickler sollte bei Unwissenheit zur Rate gezogen werden!
Allgemeines zur Konfiguration
Die meisten Einstellungen die Mailu bereits unterstützt werden durch Umgebungsvariablen gesetzt und können hier eingesehen werden:
https://mailu.io/1.9/configuration.html
Für weitergehende Einstellungen die hierdurch nicht abgedeckt sind, bietet Mailu ein sehr gut nutzbares Verfahren von Überschreibungen an. Hierfür wird in den Docker-Containern ein Overrides Ordner angezogen. Je nach Containerart kann dies ggf. ein unterschiedlicher Pfad sein. Hierzu möchte ich im folgenden die einzelnen Container und Möglichkeiten der Konfiguration kurz und bündig beschreiben.
Konfiguration der Komponenten
Redis
Weil es sich um das Standard Alpine Docker Image von Redis handelt, kann eine individuelle Konfigurationsdatei als Startparameter angegeben werden. Der Pfad ist hierbei frei zu wählen.
Dovecot (IMAP / POP3)
Über die Datei /overrides/dovecot.conf können Anpassungen vorgenommen werden. In der Konfigurationsdatei /etc/dovecot/dovecot.conf wird dies durch die unten stehende Zeile ermöglicht, die ein Einlesen probiert, aber bei Fehlen der Datei keinen Fehler auslöst:
!include_try /overrides/dovecot.conf
Postfix (SMTP)
In Postfix können alle Einstellungen über den Ordner /overrides vorgenommen werden. Hierbei werden Einstellungen aus den Dateien /overrides/postfix.cf und /overrides/postfix.cf gelesen und mittels "postconf -e" gesetzt:
# File: /start.py
if os.path.exists("/overrides/postfix.cf"):
for line in open("/overrides/postfix.cf").read().strip().split("\n"):
os.system('postconf -e "{}"'.format(line))
if os.path.exists("/overrides/postfix.master"):
for line in open("/overrides/postfix.master").read().strip().split("\n"):
os.system('postconf -e "{}"'.format(line))
Im Branch 1.7 ist ein Überspringen von Zeilen mit führendem Doppelkreuz (Kommentar) nicht vorgesehen, es sorgt lediglich für eine Meldung im Log, dass ein Parameter nicht gesetzt werden kann. In Version 1.8 ist in der start.py ein Überspringen implementiert.
Zusätzlich werden im /overrides Ordner alle Maps mittels postmap kompiliert. Somit können Maps ebenfalls dort abgelegt werden, müssen lediglich die Endung .map im Dateinamen haben. Beim Start werden diese dann verarbeitet:
for map_file in glob.glob("/overrides/*.map"):
destination = os.path.join("/etc/postfix", os.path.basename(map_file))
shutil.copyfile(map_file, destination)
os.system("postmap {}".format(destination))
os.remove(destination)
Alle Maps bekommen nach der Bearbeitung eine .db-Endung, allerdings müssen die Dateien in der postfix.cf ohne die .db-Endung konfiguriert werden. Hier ein Beispiel:
# File: postfix.cf
transport_maps = hash:/etc/postfix/transport.map
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd.map
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
Rspamd
Einstellungen müssen lediglich im Ordner /etc/rspamd/override.d hinterlegt werden. Hier bietet es sich an einen Ordner zu mounten, der alle Konfigurationsdateien enthält.
Clamav
Hier gibt es keine Überschreibungsoptionen, allerdings können die Dateien freshclam.conf und clamd.conf des Ordners /etc/clamav überschrieben (gemountet) werden. Hier die Schritte wie es zum Beispiel gemacht werden kann:
Datei laden und editieren
# Datei aus dem Container laden
mkdir -p /srv/mailu/override/antivirus/clamd.conf
docker cp mailu_antivirus_1:/etc/clamav/clamd.conf /srv/mailu/override/antivirus/
# Anpassungen vornehmen
vim clamd.conf
In der docker-compose.yml muss die Datei nun hinterlegt werden:
antivirus:
...
volumes:
- "/srv/mailu/data/filter:/data"
- "/srv/mailu/override/antivirus/clamd.conf:/etc/clamav/clamd.conf"
Ein Neuerstellen des Containers ist notwendig!
docker-compose up -d
Webmail (Roundcube)
Roundcube ist nicht verpflichtend, aber hat man diesen Webmailer gewählt, können Einstellungen vorgenommen werden, indem die folgenden Dateien kopiert, editiert und eingehangen (mounted) werden:
- /php.ini
- /var/www/html/config/config.inc.php
Nachwort zur Konfiguration
Wenn man sich dazu entscheidet, Konfigurationsdateien aus den Containern zu kopieren und im Anschluss zu überlagern (mounten), kann dies zu Fehlern, oder nachfolgenden Problemen führen!
Anpassungen die den Weg in die Mailu-Images finden, können dann in den eigenen Dateien nicht mehr enthalten sein. Dies betrifft vor allem wichtige Sicherheitseinstellungen. Deshalb hier ein möglicher Weg damit umzugehen, der bei jedem Update (Image-Update) durchgeführt werden sollte:
- Update der Container (docker-compose pull && docker-compose up -d)
- Kopieren der Dateien aus den Containern
- Anhängen neuer Einstellungen oder Überschreiben der Optionen
- einhängen der neuen Dateien durch Neustart der Docker-Container
Links
Setup-Tool zum genrieren eines Docker-Compose Files für Mailu
https://setup.mailu.io/1.9/setup/
Dokumentation von Mailu
https://mailu.io/1.9/
Github Projekt
https://github.com/Mailu/Mailu