topics.conf
mais ne conviendra sans doute pas à nos attentes. Il convient donc de le modifier selon nos besoins, en respectant sa syntaxe qui est d'une grande simplicitéNous allons utiliser Sympa, qui sait gérer les domaines virtuels. Entendons par là qu'il est assez simple de disposer d'une interface de gestion des listes pour chaque domaine virtuel, permettant ainsi de déléguer la gestion des listes à un « listmaster » différent pour chaque domaine virtuel hébergé.
Sympa est un robot éprouvé, qui est fourni dans la distribution Debian. Il dispose d'une documentation abondante et relativement compréhensible. Il sait gérer un grand nombre de listes, avec un grand nombre d'abonnés, propose une gestion fine des autorisations de diffusion comme des modes d'abonnement (à chaque message, à un résumé périodique, de périodicité paramétrable…)
Note : Sympa n'est pas un gadget, c'est un robot de diffusion très complexe et son installation peut présenter quelques difficultés.
Dans cette installation, il n'y aura pas de domaines virtuels. La machine hôte s'appelle cyrus.nain-t.net
, elle gère les messages pour le domaine nain-t.net
et nos listes seront @lists.nain-t.net
. Il faut bien commencer par le début.
Nous allons utiliser l'interface web de Sympa. Le module fastcgi d'apache est fortement recommandé (il est dans le dépôt non-free
, la licence présentant quelques restrictions) :
aptitude install libapache2-mod-fastcgi
De plus, MySQL est nécessaire, mais nous l'avons déjà.
Puis nous installons Sympa, qui a beaucoup de dépendances :
aptitude install sympa
Nous utiliserons wwsympa, mais pas SOAP. Nous choisissons comme nom de domaine principal lists.nain-t.net
. Il est donc nécessaire, si la machine s'appelle autrement (cyrus.nain-t.net dans notre cas), d'avoir un CNAME dans notre (nos) DNS.
# host lists.nain-t.net lists.nain-t.net is an alias for cyrus.nain-t.net. cyrus.nain-t.net has address 82.243.85.42
Le script d'installation pose un certain nombre de questions auxquelles il vaut mieux répondre correctement, mais il n'y a rien de définitif puisque la configuration sera par la suite modifiable dans /etc/sympa/sympa.conf
. De plus, ce script doit pouvoir créer pour vous la base MySQL nécessaire.
A l'issue de l'installation, nous devons retrouver quelques éléments remarquables :
/etc/sympa
est le répertoire de configuration. Il y a dedans un certain nombre de choses dont :sympa.conf
qui est le fichier de configuration principal du robot ;wwsympa.conf
pour la configuration de l'interface CGI ;topics.conf
qui contient la liste de classement par thème 1) des listes que nous pourrons créer. Son contenu est à modifier en fonction des besoins ;/etc/mail/sympa.aliases
est un fichier pour le moment vide, mais qui va se peupler avec la création de listes. Il est nécessaire que l'utilisateur sympa
puisse y pénétrer et y écrire. Vérifiez donc que sympa
est bien propriétaire du répertoire /etc/mail
Ce fichier d'alias, si l'on décide de l'utiliser, va nous imposer un mode de configuration de Postfix qui n'est pas optimal, mais qui nous évitera de devoir intervenir sur main.cf
à chaque création ou suppression de liste de diffusion.
Voici un exemple de fichier sympa.conf
:
## Configuration file for Sympa ## many parameters are optional (defined in src/Conf.pm) ## refer to the documentation for a detailed list of parameters ###\\\\ Directories and file location ////### ## Directory containing mailing lists subdirectories home /var/lib/sympa/expl ## Directory for configuration files ; it also contains scenari/ and templates/ directories etc /etc/sympa ## File containing Sympa PID while running. ## Sympa also locks this file to ensure that it is not running more than once. Caution : user sympa need to write access without special privilegee. pidfile /var/run/sympa/sympa.pid ## Umask used for file creation by Sympa umask 027 ## The main spool containing various specialized spools ## All spool are created at runtime by sympa.pl spool /var/spool/sympa ## Incoming spool queue /var/spool/sympa/msg ## Bounce incoming spool queuebounce /var/spool/sympa/bounce ###\\\\ Syslog ////### ## The syslog facility for sympa ## Do not forget to edit syslog.conf syslog `/bin/cat /etc/sympa/facility` ## Communication mode with syslogd is either unix (via Unix sockets) or inet (use of UDP) log_socket_type unix ## Log intensity ## 0 : normal, 2,3,4 for debug log_level 0 ###\\\\ General definition ////### ## Main robot hostname domain lists.nain-t.net ## Listmasters email list comma separated ## Sympa will associate listmaster privileges to these email addresses (mail and web interfaces). Some error reports may also be sent to these addresses. listmaster sysop@nain-t.net ## Local part of sympa email adresse ## Effective address will be [EMAIL]@[HOST] email sympa ## Default lang (cs | de | el | en_US | fr | hu | it | ja_JP | nl | oc | pt_BR | tr) lang fr ## Who is able to create lists ## This parameter is a scenario, check sympa documentation about scenarios if you want to define one create_list public_listmaster ## Secret used by Sympa to make MD5 fingerprint in web cookies secure ## Should not be changed ! May invalid all user password cookie `/bin/cat /etc/sympa/cookie` ###\\\\ Errors management ////### ## Bouncing email rate for warn list owner #bounce_warn_rate 20 ## Bouncing email rate for halt the list (not implemented) ## Not yet used in current version, Default is 50 #bounce_halt_rate 50 ## Task name for expiration of old bounces #expire_bounce_task daily ## Welcome message return-path ## If set to unique, new subcriber is removed if welcome message bounce #welcome_return_path unique ###\\\\ MTA related ////### ## Path to the MTA (sendmail, postfix, exim or qmail) ## should point to a sendmail-compatible binary (eg: a binary named 'sendmail' is distributed with Postfix) sendmail /usr/sbin/sendmail ## Maximum number of recipients per call to Sendmail. The nrcpt_by_domain.conf file allows a different tuning per destination domain. nrcpt 25 ## Max. number of different domains per call to Sendmail avg 10 ## Max. number of Sendmail processes (launched by Sympa) running simultaneously ## Proposed value is quite low, you can rise it up to 100, 200 or even 300 with powerfull systems. maxsmtp 40 ###\\\\ Pluggin ////### ## Path to the antivirus scanner engine ## supported antivirus : McAfee/uvscan, Fsecure/fsav, Sophos, AVP and Trend Micro/VirusWall #antivirus_path /usr/local/uvscan/uvscan ## Antivirus pluggin command argument #antivirus_args --secure --summary --dat /usr/local/uvscan ###\\\\ S/MIME pluggin ////### ## Path to OpenSSL ## Sympa knowns S/MIME if openssl is installed #openssl /usr/local/bin/openssl ## The directory path use by OpenSSL for trusted CA certificates #capath /etc/sympa/ssl.crt ## This parameter sets the all-in-one file where you can assemble the Certificates of Certification Authorities (CA) #cafile /usr/local/apache/conf/ssl.crt/ca-bundle.crt ## User CERTs directory ssl_cert_dir /var/lib/sympa/x509-user-certs ## Password used to crypt lists private keys #key_passwd your_password ###\\\\ Web interface ////### ## Sympa's main page URL wwsympa_url http://lists.nain-t.net/wws ## Supported languages for the user interface supported_lang en_US,fr, #-- Database configuration begin # DO NOT REMOVE SURROUNDING COMMENTS # DO NOT EDIT BY HAND # USE dpkg-reconfigure -plow sympa TO RECONFIGURE ## Database driver (DBD) db_type mysql ## Name of your database db_name sympa ## Your database hostname db_host localhost ## Username to connect to the DB db_user sympa ## Password for the user db_passwd epikoi #-- Database configuration end
Les passages surlignés représentent les paramètres indiqués lors du déroulement du script d'installation.
Vous désirerez sans doute aussi modifier le titre de l'interface cgi de sympa. Il faut dans ce cas modifier dans le fichier wwsimpa.conf
:
## Title of main web page title Les listes de nain-t.net
Après toute modification de la configuration de sympa, il faut relancer sympa et apache.
Autant prévoir l'avenir et préparer un serveur virtuel, qui répondra dans un premier temps au doux nom de lists.nain-t.net
et qui sera configuré pour faire fonctionner proprement wwsympa.fcgi
Dans /etc/apache2/sites-avalable/
, nous créons par exemple un fichier nommé sympa
qui contient quelque chose comme ceci :
<VirtualHost *> ServerAdmin webmaster@nain-t.net DocumentRoot /var/www/lists.net ServerName lists.nain-t.net <Directory /usr/lib/cgi-bin/sympa> SetHandler fastcgi-script </Directory> Alias /static-sympa /var/lib/sympa/static_content Alias /icons /usr/share/sympa/icons <Directory /var/lib/sympa/static_content> Order allow,deny Allow from all </directory> ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa.fcgi </VirtualHost>
Puis :
# a2ensite sympa
pour créer le lien dans le répertoire /etc/apache2/sites-enabled
(Nous somme toujours sous Debian n'est-ce pas), et enfin :
# apache2 graceful
pour actualiser Apache. Une connexion sur http://lists.nain-t.net/wws
devrait nous montrer l'interface de notre gestionnaire de liste.
Attention ! Il pourra se faire que www-data
n'ait pas le droit de lecture sur les feuilles de style qui se trouvent dans /var/lib/sympa/static_content/css
.
Enfin, pour que ce soit encore plus propre, nous pouvons prévoir une page d'accueil index.html
que nous mettrons dans la racine de notre domaine virtuel, qui redirigera automatiquement sur le script cgi :
<html> <head> <meta http-equiv="refresh" content="0; url=wws/"> </head> <body> </body> </html>
C'est parti 2) :
Nous n'allons pas entrer dans les détails du fonctionnement de sympa. Cependant il y a quelques choses à savoir pour pouvoir démarrer :
sympa.conf
, nous avons déclaré sysop@nain-t.net
comme étant le listmaster
, mais nous ne l'avons pas pour autant enregistré dans la base de données. La procédure à suivre est donc celle-ci :sysop@nain-t.net
, ce qui provoquera l'envoi d'un message sur cette adresse, contenant un mot de passe ;sysop@nain-t.net
et le mot de passe reçu.L'identification fera alors apparaitre plus de fonctionnalités sur le portail, principalement dans ce cas, les outils d'administration des listes :
D'une manière générale, tout abonné à une liste et qui se sera enregistré sur le site disposera d'un « login » lui permettant d'accéder au portail avec des droits adaptés à sa fonction :
Sympa est hautement configurable à tous les niveaux. En passant un peu( voire beaucoup) de temps à consulter la documentation, il doit être possible d'arriver à maitriser ce robot.
Non, bien sûr. Pour l'instant, il est possible de :
Sympa est fait pour fonctionner avec la plupart des MTA connus Sendmail, Postfix, Exim et même Qmail. A ce titre, son installation ne prend guère d'initiative concernant la configuration du MTA. Même si une liste est créée, elle ne pourra pas fonctionner, Postfix n'étant pas au courant de son existence.
La seule chose qui est faite lors de la création d'une liste (test0 dans notre exemple), c'est l'ajout de quelques alias dans /etc/mail/sympa.aliases
:
# cat /etc/mail/sympa.aliases ## List aliases used for the sympa mailing-list manager #------------------------------ test0: list alias created 04 Jul 2008 test0: "| /usr/lib/sympa/bin/queue test0@lists.nain-t.net" test0-request: "| /usr/lib/sympa/bin/queue test0-request@lists.nain-t.net" test0-editor: "| /usr/lib/sympa/bin/queue test0-editor@lists.nain-t.net" #test0-subscribe: "| /usr/lib/sympa/bin/queue test0-subscribe@lists.nain-t.net" test0-unsubscribe: "| /usr/lib/sympa/bin/queue test0-unsubscribe@lists.nain-t.net" test0-owner: "| /usr/lib/sympa/bin/bouncequeue test0@lists.nain-t.net"
Ah tiens, pourquoi l'alias concernant le traditionnel « subscribe » est-il mis en commentaire ? Sans doute pour amener les gens à utiliser plutôt l'interface cgi. Mais comment revenir sur ce paramétrage si nous le souhaitons ? C'est un secret, qui vous sera révélé plus tard…
/usr/lib/sympa/bin/queue
, c'est, l'équivalent du MDA, mais pour les messages à destination de la liste de diffusion. Autrement dit, nous devons, avec ce qui est écrit dans ce fichier, arriver à ce que Postfix comprenne que les messages adressés à :
test0@lists.nain-t.net
Soient non pas transmis à Cyrus
, mais au programme /usr/lib/sympa/bin/queue
de Sympa. De même, les messages à test0-owner@lists.nain-t.net
devront être transmis au programme /usr/lib/sympa/bin/bouncequeue
Ce fichier est donc un fichier d'alias classique, qu'il faut transmettre à Postfix par la directive alias_maps
, en plus des alias déjà indiqués :
alias_maps = hash:/etc/aliases, hash:/etc/mail/sympa.aliases
Oui mais voilà, le fichier indexé /etc/mail/sympa.aliases.db
n'a sans doute pas été créé et dans les logs de sympa, après création de la liste, un message d'erreur doit l'indiquer.
Pourquoi tant de haine ?
Lorsque nous créons une nouvelle liste avec l'interface cgi, /etc/mail/sympa.aliases
est mis à jour, puis un petit utilitaire, aliaswrapper
est invoqué pour lancer la commande newaliases
, chargée de synchroniser sympa.aliases.db
avec sympa.aliases.db
.
Il y a (au moins) deux raisons pour lesquelles ce dispositif peut ne pas fonctionner :
newaliases
prend l'identité du propriétaire du fichier source à traiter qui est ici sympa
. Sympa doit donc pouvoir écrire dans /etc/mail
. Ceci a déjà été dit plus haut ;newaliases
traite le fichier spécifié par le paramètre de configuration alias_database
dans main.cf
de Postfix. Hors, qu'avons nous dans le main.cf
?alias_database = hash:/etc/aliases
Qu'il nous faut donc remplacer par :
alias_database = hash:/etc/mail/sympa.aliases
Si ces deux points sont vérifiés, le wwsympa.fcgi
devrait dans l'avenir gérer correctement les alias qu'il crée. En attendant, un :
postalias /etc/mail/sympa.aliases
devrait permettre de rendre notre liste0 (presque) opérationnelle. Car sommes nous certains que Postfix va reconnaitre la destination @lists.nain-t.net comme locale ?
Pour anticiper un peu sur l'avenir (peuplé de domaines virtuels), plutôt que de l'indiquer « en dur » dans le paramètre mydestination
, voyons si ce ne serait pas possible de piquer l'information dans la base de données MySQL nécessaire à Sympa, elle y est certainement. Une investigation rapide dans la base montre que :
mysql> select robot_admin from admin_table; +------------------+ | robot_admin | +------------------+ | lists.nain-t.net | +------------------+ 1 row in set (0.01 sec)
Donc, un fichier que nous appellerons par exemple /etc/postfix/db/lists_destinations.cf
qui contiendrait ceci :
hosts = 127.0.0.1 user = sympa password = epikoi dbname = sympa query = SELECT robot_admin FROM admin_table WHERE robot_admin = '%s' limit 1
Le limit 1
est nécessaire car sans cette limite, si nous créons n listes dans le domaine nain-t.net, la requête sortira n occurrences. Il ne reste plus qu'à ajouter l'appel à ce fichier dans notre main.cf :
mydestination = $myhostname, localhost, localhost.localdomain, mysql:/etc/postfix/db/mydestination.cf, mysql:/etc/postfix/db/lists_destinations.cf
Et de demander à Postfix de relire sa configuration.
(Le fichier /etc/postfix/db/mydestination.cf
a été vu dans « Postfix avec Cyrus »).
Nous nous sommes assurés que sympa
sait lire et écrire dans /etc/mail
et nous avons modifié /etc/mostfix/main.cf
comme suit :
alias_maps = hash:/etc/aliases, hash:/etc/mail/sympa.aliases alias_database = hash:/etc/mail/sympa.aliases
Puis nous avons synchrinisé le hash des alias générés par sympa avec la commande :
postalias /etc/mail/sympa.aliases
Ceci ne devrait plus être nécessaire par la suite.
Enfin, nous avons agi sur le mydestination
de Postfix en créant un fichier de requête /etc/postfix/db/lists_destinations.cf
sur la base MySQL de Sympa :
hosts = 127.0.0.1 user = sympa password = epikoi dbname = sympa query = SELECT robot_admin FROM admin_table WHERE robot_admin = '%s' limit 1
et avons modifié le paramètre mydestination
dans notre main.cf
comme ceci :
mydestination = $myhostname, localhost, localhost.localdomain, mysql:/etc/postfix/db/mydestination.cf, mysql:/etc/postfix/db/lists_destinations.cf
Si nous n'avons pas de listes à gérer dans d'autres domaines oui, mais ce n'est pas le cas. Il nous reste à voir comment réaliser une configuration fonctionnelle pour plusieurs domaines.
topics.conf
mais ne conviendra sans doute pas à nos attentes. Il convient donc de le modifier selon nos besoins, en respectant sa syntaxe qui est d'une grande simplicité