mailing-lists multi-domaine avec mailman sur un postfix « virtuel » (mysql)

Nouvel article pour compléter tous ceux sur l’installation d’un serveur de mails bien complet (voir ces tags).
Cette fois il s’agit d’ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc.
Bref, au choix, je pensais à « sympa » (dont j’ai déjà un peu parlé) ou mailman, que je ne connaissais pas.

  • « sympa » en mode multi-domaine, arrêtez-moi si je me trompe, sur une installation postfix « virtuelle » (utilisateurs en base MySQL), c’était loin d’être gagné. Mal documenté à mon goût sur la partie multi-domaine.
  • « mailman » semblait pouvoir faire tout ça, avec une interface web (et ligne de commande) assez ancestrale, mais suffisante, efficace et qui marche 🙂

Deux points de détails à bien regarder, qui m’ont fait faire cet article afin de ne pas oublier tout ça et que ça puisse resservir :

  • l’interconnexion de mailman avec la partie Mysql de postfix
  • le multi-domaine, afin de pouvoir gérer des listes genre liste1@domaine1.fr et liste2@domaine2.com, ces 2 domaines étant hébergés sur la même machine, la même installation postfix

Allez hop, c’est parti pour l’installation et les détails de configuration.
Voyez d’abord mes articles sur l’installation complète postfix/mysql/amavis/spamassassin/etc histoire de situer de quoi je parle.

Contexte

On installe ça sur une Debian Squeeze, appelée « monserveur.fr » ayant plusieurs noms de domaine : « serveur.fr » et aussi « autredomaine.fr »
On voudra créer des mailing-lists sur l’un ou l’autre des domaines.

Installation

aptitude

J’ai préféré opter pour la version packagée plutôt que la dernière version officielle en .tar.gz, histoire de simplifier les migrations de Debian. Ca commence comme bien souvent :

monserveur:~# aptitude install mailman
Les NOUVEAUX paquets suivants vont être installés :
  mailman
0 paquets mis e jour, 1 nouvellement installés, 0 e enlever et 0 non mis e jour.
Il est nécessaire de télécharger 9 642 ko d'archives. Après dépaquetage, 44,3 Mo seront utilisés.
Prendre : 1 ftp://ftp.fr.debian.org/debian/ squeeze/main mailman amd64 1:2.1.13-5 [9 642 kB]
 9 642 ko téléchargés en 1s (8 576 ko/s)
Lecture des champs des paquets... Fait
Lecture de l'état des paquets... Fait
Récupération des rapports de bogue... Fait
Analyse des informations Trouvé/Corrigé... Fait
Bogues de gravité serious sur mailman (-> 1:2.1.13-5) 
 #611804 - Astonishing header mangling
Résumé :
 mailman(1 bogue)
Êtes-vous certain de vouloir installer/mettre e jour les paquets ci-dessus ? [Y/n/?/...]
Préconfiguration des paquets...
Sélection du paquet mailman précédemment désélectionné.
(Lecture de la base de données... 57308 fichiers et répertoires déje installés.)
Dépaquetage de mailman (e partir de .../mailman_1%3a2.1.13-5_amd64.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de mailman (1:2.1.13-5) ...
Looking for enabled languages (this may take some time) ... done.
Installing site language en ............................................ done.
Configuring mailman for domain monserveur.fr ...
Mise e jour de la version 0x0 vers 0x2010df0
suppression des anciens fichiers sources
Mise e jour de la liste de diffusion mailman
Mise e jour de la base de donnees des requetes en attente.
- mise e jour de l'ancien fichier mbox prive
Rien e faire.
- Mise e jour de l'ancien fichier mbox public
Rien e faire.
Reparation des modeles de langue : mailman

Mise e jour des filigranes Usenet
- rien e mettre e jour ici
Rien e faire.
mise e jour des anciens fichiers qfiles
Starting Mailman master qrunner: mailmanctl.

Un seul écran à noter :

Pas de liste du site                                                                                                                                                      ¦
  ¦                                                                                                                                                                           ¦
  ¦ Mailman a besoin d'une liste du site (« site list »). Elle permet d'envoyer les rappels pour les mots de passe, etc. Elle doit être créée avant le lancement de Mailman.  ¦
  ¦                                                                                                                                                                           ¦
  ¦ Pour créer cette liste, exécuter « newlist mailman » et suivez les instructions qui apparaissent e l'écran. Il est ensuite nécessaire de redémarrer mailman avec la       ¦
  ¦ commande « /etc/init.d/mailman start ».

L’installation créera cette liste de diffusion appelée « mailman » (et j’avoue que je ne comprends pas son utilité…)

permissions

Il faut vérifier/adapter les permissions qui ne semblent pas bonnes après installation :

monserveur:~# check_perms
Les repertoires doivent etre au moins en 02775 : /var/lib/mailman/logs
Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl/LC_MESSAGES
Problemes trouves : 84
Re-executer en tant que list (ou root) avec l'option -f pour reparer

On execute la même commande avec le paramètre -f et on recontrôle :

Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Problemes trouves : 10

MAIS : il s’agit de liens symboliques et l’outil contrôle les permissions des liens, pas des fichiers visés. Bref, c’est bon.

Conf mailman

Une partie de la doc d’installaiton est dans /usr/lib/mailman/bin/postfix-to-mailman.py qui est un lien vers /etc/mailman/postfix-to-mailman.py. Attention, cette doc doit être transposée au contexte « serveur virtuel avec conf en MySQL » – ce que je fais dans cet article.

Dans /etc/mailman/mm_cfg.py, j’adapte ces paramètres là :
DEFAULT_SERVER_LANGUAGE = ‘fr’
MTA=’Postfix’

Codes d’accès à mailman

Remarque :
« mailman » peut s’utiliser en ligne de commande, voir la liste des commandes possibles (éventuellement pratique pour scripter) : dpkg -L mailman | grep bin. Ca permet de découvrir la liste des outils : rmlist, list_lists, add_members, newlist etc…

L’accès à l’interface mailman ne se fait pas avec un identifiant et un mot de passe, mais juste avec un mot de passe.
Pour créer des « comptes » de la sorte, c’est l’outil mmsitepass.

Conf apache

Par défaut, le script mailman d’interface web est accessible sur http://votre.serveur/cgi-bin/mailman/admin/. Si vous n’aimez pas les répertoires standards, vous pouvez adapter le fichier /etc/mailman/apache.conf en adaptant /cgi-bin/mailman/ et /pipermail/ et en conséquence le fichier /etc/mailman/postfix-to-mailman.py, paramètres DEFAULT_URL_PATTERN et PRIVATE_ARCHIVE_URL.

Configuration postfix

« pipe » postfix : interface postfix binaires mailman

En fait, tout est déjà OK à la base – avant même l’installation de mailman !. C’est marrant ça, l’outil doit être bien ancré dans le monde UNIX…

monserveur:~# grep mailman /etc/postfix/*
/etc/postfix/master.cf:mailman   unix  -       n       n       -       -       pipe
/etc/postfix/master.cf:  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py

On voir qu’on a un canal de communication « mailman » qui renvoie vers un script python qui fera le boulot

transport : interface postfix « pipe »

Dans ma table « transport » (voir cet article), j’ajoute :

insert into transport values ('list.serveur.fr','mailman'),('list.autredomaine.fr','mailman');

Ceci prépare le terrain : si on écrit à une adresse @list.serveur.fr ou @list.autredomaine.fr (comme je disais au début de la doc), alors postfix passera le relai au « pipe » nommé « mailman » (issu du master.cf de postfix), donc aux scripts mailman.
Rien de nécessaire dans la table « domains » ; comme pour le répondeur vacation (voir précédent article).

Multi-domaine

J’ai déclaré ceci dans le fichier /etc/mailman/mm_cfg.py :

add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
add_virtualhost('list.serveur.fr','monserveur.fr')
add_virtualhost('list.autredomaine.fr','monserveur.fr')

Pour gérer le multi-domaine, c’est aussi simple que ça (et les bons transports SQL). J’y reviendrai un peu plus tard tout de même.

main.cf

La doc dit d’ajouter mailman_destination_recipient_limit=1 dans /etc/postfix/main.cf ; soit.

Relance de tout ça

reload apache
restart mailman
reload postfix

Rien dans amavis, comme pour les répondeurs vacation

Créer une liste

On veut créer une liste « mesabonnes@serveur.fr ».

Au niveau SQL

On déclare tout ça :

insert into forwardings values ('mesabonnes-admin@serveur.fr','mesabonnes-admin@list.serveur.fr');
insert into forwardings values ('mesabonnes-bounces@serveur.fr','mesabonnes-bounces@list.serveur.fr');
insert into forwardings values ('mesabonnes-confirm@serveur.fr','mesabonnes-confirm@list.serveur.fr');
insert into forwardings values ('mesabonnes-join@serveur.fr','mesabonnes-join@list.serveur.fr');
insert into forwardings values ('mesabonnes-leave@serveur.fr','mesabonnes-leave@list.serveur.fr');
insert into forwardings values ('mesabonnes-owner@serveur.fr','mesabonnes-owner@list.serveur.fr');
insert into forwardings values ('mesabonnes-request@serveur.fr','mesabonnes-request@list.serveur.fr');
insert into forwardings values ('mesabonnes-subscribe@serveur.fr','mesabonnes-subscribe@list.serveur.fr');
insert into forwardings values ('mesabonnes-unsubscribe@serveur.fr','mesabonnes-unsubscribe@list.serveur.fr');

Et bien sûr :

insert into forwardings values ('mesabonnes@serveur.fr','mesabonnes@list.serveur.fr');

C’est bien ici qu’on voit comment le lien entre la liste et mailman est fait : les adresses sont renvoyées vers un domaine bidon (pas nécessaire de le déclarer dans un DNS, c’est interne à postfix), domaine pour lequel un « transport » particulier est créé afin d’envoyer le courrier vers le pipe unix => script mailman.

Enfin, au niveau de mailman

En tant que root, newlist mesabonnes. On met un responsable de la liste et un code d’accès.

Administration de la liste par le web (hors ligne de commande, donc)

L’outil principal listant toutes les listes est là : http://serveur.fr/cgi-bin/mailman/admin/ si vous n’avez pas changé les adresses. Une fois une liste sélectionnée, on obtient l’interface suivante :
interface mailman
Ensuite, c’est le festival des options.
Il faut bien les lire une fois et noter celles qui vous intéressent : masquer l’expéditeur, limiter la taille des messages, fixer les règles de modération, éviter les doublons (lorsqu’une personne de la liste répond à la liste, doit-elle recevoir le mail, simplement un accusé ?), Il y a des outils pour abonner des gens en masse (sans les prévenir ou en les prévenant) etc etc.
La seule chose que je vais mentionner, par rapport au multi-domaine, c’est l’option « Le nom d’hôte préféré par cette liste de diffusion pour le courriel. » du menu « [Options Générales] » afin d’indiquer le vrai serveur sous lequel est utilisé la liste : serveur.fr et pas autredomaine.fr dans l’exemple.

Voilà, normalement ça marche 🙂

Remarques

multi-domaine

On a vu rapidement que le multi-domaine marchait facilement : les transports dans la table SQL + quelques lignes dans mm_cfg.py et les alias qui vont bien.
MAIS : l’identifiant de la liste ne tient pas compte du nom de serveur. Donc les noms devront être différents d’un domaine à l’autre (je suppose), impossible donc d’avoir liste1@serveur.fr et liste1@autredomaine.fr pointant vers la même installation mailman.
On peut imaginer plein d’autres méthodes pour contourner ça. J’en mentionne une car je l’ai testée et la contrainte d’avoir des noms différents ne me gêne pas.
Je peux passer par des noms de listes intermédiaires pour éviter les problèmes, exemple :
– liste1@serveur.fr ==forward==> interne_liste1@list.monserveur.fr
– liste1@autredomaine.fr == forward ==> interne_liste2@list.monserveur.fr
Et donc avoir déclaré avec « newlist » les listes interne_liste1/2
Ca marche. Sauf que mailman considère qu’il y a une forme de redirection et tous les messages sont soumis à modération (même pour une liste non modérée) pour signaler à l’administrateur que quelqu’un a fait un alias de cette liste.
Ici on s’en fout, mais imaginons que quelqu’un crée un simple alias « labandedabrutis@cabalance.fr » pointant vers votre liste, la bande d’abrutis en question sera ravie de ne pas être connue sous ce nom là…

lien avec spamassassin

Je n’ai pas cherché longtemps, c’est bien fait de base (sûrement un paramétrage – ou l’ordre ? – qui va bien dans /etc/postfix/master.cf) qui fait que le mail passe par toute la chaîne amavis/spamassassin/clamav. Ca se voit nettement dans les logs.

générer les alias facilement

Utilisez ce script :

#!/bin/bash
if test -z $1
then
        echo Usage: $0 liste serveur
        exit -1
fi
if test -z $2
then
        echo Usage: $0 liste serveur
        exit -1
fi

for i in admin bounces confirm join leave owner request subscribe unsubscribe
do
        echo insert into forwardings values \\(\\'$1-$i@$2\\',\\'$1-$i@list.$2\\'\\)\\;
done
echo insert into forwardings values \\(\\'$1@$2\\',\\'$1@list.$2\\'\\)\\;

Voilà, c’est complet je pense. Amusez-vous bien.

L’article mailing-lists multi-domaine avec mailman sur un postfix « virtuel » (mysql) est apparu en premier sur Le blog de Michauko.

Vus : 3862
Publié par Michauko : 64