Dieser Artikel beschreibt, wie GNU Mailman zusammen mit Exim unter Debian eingerichtet werden kann. Er setzt daher ein funktionierendes Mailsetup, ähnlich dem hier beschriebenen Setup voraus. Dabei handelt es sich um meine Mitschriften bei der Installation. Weitere Informationen finden sich unter Anderem in /usr/share/doc/mailman/README.Exim4.Debian und im Exim4-Handbuch unter http://www.exim.org/howto/mailman21.html.
Mailman kann unter Debian einfach aus den Repositories installiert werden.
$ apt-get install mailman
Anschließend muss manuell eine Liste namens mailman angelegt werden. In diesem Schritt müssen auch E-Mailadresse und Passwort des Listenbesitzers (und somit des Administrators) eingegeben werden. Die hier eingegebenen Werte sollte man sich gut merken.
$ newlist mailman
Dabei fordert das Skript einen auf, verschiedene Aliase in /etc/alias einzutragen, bevor Mailman das erste mal gestartet werden kann. Dies kann ignoriert werden, da Exim die Mailinglisten automatisch erkennen soll. Die Ausgabe der Aliasvorschläge wird in einem späteren Schritt deaktiviert.
$ /etc/init.d/mailman start
Um die Weboberfläche zu aktivieren, genügt es einen Symlink auf die mitgelieferte Beispielkonfiguration für Apache zu setzen. Voraussetzung hierfür ist, dass Apache2 ohne virtuelle Hosts betrieben wird. Ein Beispiel für virtuelle Hosts befindet sich jedoch auskommentiert in derselben Datei:
$ ln -s /etc/mailman/apache.conf /etc/apache2/conf.d/mailman
$ /etc/init.d/apache2 reload
Eine Beispielkonfiguration für Apache mit virtuellen Hosts könnte hingegen so aussehen:
$ more /etc/apache2/conf.d/mailman
/etc/apache2/conf.d/mailman |
<VirtualHost *> ## ## BASIC CONFIGURATION ## ServerName lists.example.org ServerAdmin webmaster@exmaple.org ErrorLog ${APACHE_LOG_DIR}/lists.example.org/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/lists.example.org/access.log combined <Directory /> Options -Indexes Order deny,allow Deny from all </Directory> ## ## MAILMAN MAILING LIST MANAGER ## See: /etc/mailman/apache.conf for examples ## RedirectMatch ^/$ /mailman/listinfo <Directory /usr/lib/cgi-bin/mailman/> AllowOverride None Options !ExecCGI AddHandler cgi-script .cgi Order allow,deny Allow from all </Directory> <Directory /var/lib/mailman/archives/public/> Options FollowSymlinks AllowOverride None Order allow,deny Allow from all </Directory> <Directory /usr/share/images/mailman/> AllowOverride None Order allow,deny Allow from all </Directory> Alias /pipermail/ /var/lib/mailman/archives/public/ Alias /images/mailman/ /usr/share/images/mailman/ ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/ </VirtualHost> |
In diesem Fall kann die Adminoberfläche mit folgender URL aufgerufen werden: http://lists.example.net/mailman/admin. Zuvor muss allerdings noch die Mailman-Konfiguration angepasst werden:
$ nano /etc/mailman/mm_cfg.py
DEFAULT_URL_PATTERN = 'http://%s/'
PRIVATE_ARCHIVE_URL = '/mailman/private'
IMAGE_LOGOS = '/images/mailman/'
DEFAULT_EMAIL_HOST = 'lists.example.net'
DEFAULT_URL_HOST = 'lists.example.net'
MTA = None
SMTP_MAX_RCPTS = 15
SMTP_MAX_SESSIONS_PER_CONNECTION = 30
OWNERS_CAN_DELETE_THEIR_OWN_LISTS = Yes
MTA = None ist sehr wichtig. Mailman geht sonst in der Voreinstellung 'MANUAL' davon aus, dass man für jede Mailingliste verschiedene Aliase in /etc/alias einträgt. Da die Aliase allerdings an ein Pipe-Programm weiterleiten wollen, wird dieses Vorgehen unter Debian aus Sicherheitsgründen nicht unterstützt. Für Exim wird es aber auch gar nicht benötigt. Für Postfix, würden die Aliase in der Datei /var/lib/mailman/virtaul-mailman abgelegt werden. Einige Anleitungen im Internet nutzen diese Datei auch für Exim. Viel einfacher ist jedoch die Methode im Exim-Handbuch, die hier auch verwendet wird. Und dafür ist der Wort auf None zu setzen.
$ cd /usr/lib/mailman/bin
$ ./withlist -l -r fix_url mailman
$ /etc/init.d/mailman restart
Aus Sicherheitsgründen sollte nun die Standardliste mailman gegen unbefugte Beitritte gesichert werden. Dies geht am einfachsten über die Weboberfläche, indem man folgende URL aufruft und dann folgende Optionen auswählt: http://lists.example.net/admin/mailman/
[Submit your changes]
Um neue Listen über das Webinterface anlegen zu können, muss noch ein Site Password gesetzt werden. Dieses Passwort befähigt zur Administration aller Mailinglisten unabhängig vom Listenpasswort. ("Think root for Unix systems" laut Handbuch). Auf ähnliche Weise kann auch das "List Creator's Password" gesetzt werden. Es erlaubt nur neue Listen anzulegen, um diese Aufgabe an einzelne Personen weiterdelegieren zu können:
$ cd /usr/lib/mailman/bin
$ ./mmsitepass
Damit die neu angelegten Mailinglisten nun auch genutzt werden können, muss nun die Konfiguration von Exim angepast werden, so dass der Mailserver mit Mailman zusammenarbeiten kann. Dieser Schritt ist im Instllationsleitfaden von Mailman gut dokumentiert, weicht unter Debian jedoch davon ab, da die Eximkonfiguration von Debian nicht dem Standardverhalten einer großen Konfigurationsdatei entspricht. Stattdessen ist die Konfiguration unter Debian in vielen kleinen Dateien unterhalb des Verzeichnisses /etc/exim4/conf.d aufgehoben.
Zunächst schlägt die Dokumentation vor, ein paar globale Makros zu definieren:
$ nano /etc/exim4/conf.d/main/04_exim4-config_mailman-LOCAL
MAILMAN_HOME=/var/lib/mailman
MAILMAN_WRAP=MAILMAN_HOME/mail/mailman
MAILMAN_USER=list
MAILMAN_GROUP=list
domainlist MAILMAN_DOMAINS=lists.patk.org
Anstelle einer eigenen Domain Liste für Mailman kann auch einfach unten local_domains verwendet werden, wenn Mailman auf alle Domains reagieren soll. So oder so, muss aber sichergestellt sein, dass die Mailinglisten-Domain in local_domains enthalten ist. (In Debian in der Datei /etc/exim4/update-exim4.conf.conf) Ein Stolperstein können hier Subdomains sein, so wie in diesem Beispiel. Es reicht nicht aus, wenn hier nur patk.org in den local_domains enthalten ist, es muss auch lists.patk.org dort eingetragen werden. Andernfalls beschwert sich exim beim Zustellversuch mit "Remote Address is localhost address" und friert die Nachricht ein.
Dann muss ein neuer Router angelegt werden:
$ nano /etc/exim4/conf.d/router/970_exim4-config_mailman-LOCALZuletzt muss ein neuer Transport angelegt werden:
$ nano /etc/exim4/conf.d/transport/40_exim4_config_mailman-LOCAL
mailman:
debug_print = "T: mailman for $local_part@$domain"
driver = pipe
command = MAILMAN_WRAP \
'${if def:local_part_suffix \
{${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} \
{post}}' \
$local_part
current_directory = MAILMAN_HOME
home_directory = MAILMAN_HOME
user = MAILMAN_USER
group = MAILMAN_GROUP
freeze_exec_fail = true
Damit die veränderte Konfiguration aktiv wird, muss die Eximkonfigurationsdatei neugeneriert und der Mailserver durchgestartet werrden:
$ update-exim4.conf
$ exim4 -bV
$ /etc/init.d/exim4 restart
Die Exim-Konfiguration kann ganz einfach mit Exim selbst getestet werden, indem einfach geprüft wird, ob Mails an bestimmte Empfänger zugestellt werden können. Für diesen Test können die verschiedenen Adressen der Site List (mailman) verwendet werden, die ja ohnehin vorhanden sein muss.
$ exim4 -bt mailman-subscribe
$ exim4 -bt mailman-unsubscribe
$ ...
Das Ergebnis muss jeweils eine Beschreibung der verwendeten Transporte und Router sein, ähnlich dieser Ausgabe:
R: system_aliases for mailman-subscribe@developer-showcase.de
R: mailman_workaround for mailman@developer-showcase.de
mailman-subscribe@developer-showcase.de
router = mailman_workaround, transport = mailman_transport
Wenn eine solche Ausgabe erscheint, ist noch ein Fehler in der Konfiguration oder es wurde vergessen, die globale Konfigurationsdatei von Exim4 neuzubauen.
R: system_aliases for mailman-subscribe@lists.example.net
R: mailman_router for mailman-subscribe@lists.example.net
mailman-subscriber@lists.example.net is undeliverable: Unrouteable address
Nach diesem technischen Test noch ein funktionaler Test. Mit dem Kommando newlist wird eine neue Liste angelegt, welche daraufhin über die Weboberfläche mit Teilnehmern gefüllt wird. Anschließend kann eine Mail an die Liste geschickt werden, um zu sehen, ob diese korrekt zugestellt wird.
$ newlist
Enter the email of the person running the list: owner@example.net
Initial test password:
Hit enter to notify test owner...
Die Teilnehmer können in der Weboberfläche unter folgender URL hinzugefügt werden: http://lists.example.net/admin/test/ --> [Membership Management...] --> [Mass Subscription].
Anschließend schickt man mehrere Mails an die Liste und prüft, ob diese korrekt zugestellt werden. Die Absenderadresse sollte dabei natürlich der Liste angehören. Wenn alles funktioniert, kann die Liste über die Weboberfläche wieder gelöscht werden. (Vgl. Konfigurationsoption OWNERS_CAN_DELETE_THEIR_OWN_LISTS von Mailman, weil dies standardmäßig nicht erlaubt ist.)