Table des matières

Sympa Mailing List

!toc levels=6

Contexte

Installation d'un serveur de mailing list SYMPA, sous Debian Jessie. Installation réalisée dans un conteneur LXC.
Version SYMPA: 6.2.16
Base de donnée: Postgresql (9.4)
Serveur web: Apache (2.4.10)
MTA: Postfix (0.3.4.1)

Remarque sur le dimensionnement de la machine: SYMPA semble être relativement gourmand en RAM. Même pour un simple serveur de test, 512Mo est insufisant et l'OOM killer montre son nez.

Base Postgresql

apt install postgresql
su - postgres
psql -d template1 -U postgres
CREATE USER sympa WITH PASSWORD 'sympapw';
CREATE DATABASE sympa;
GRANT ALL PRIVILEGES ON DATABASE sympa to sympa;
\q

SYMPA

La version de SYMPA dans les dépots debian étant un peu ancienne (6.1.x), on installe SYMPA depuis les sources.

Création de l'utilisateur & group

groupadd sympa
useradd -m -g sympa -d /home/sympa sympa

Robot

La liste des dépendances à installer est assez longue, mais à prioris difficile de réduire (liste construite à la main lors la la première test-install)

apt install build-essential  postgresql libarchive-zip-perl libterm-progressbar-perl libmime-encwords-perl libfcgi-perl perl-modules libfile-copy-recursive-perl libintl-perl mhonarc libnet-netmask-perl libtemplate-perl libsoap-lite-perl libmime-charset-perl libhtml-stripscripts-parser-perl libnet-ldap-perl libnet-ldap-server-perl libmail-dkim-perl libcgi-pm-perl libclass-singleton-perl libdbd-pg-perl libdatetime-format-mail-perl libfile-nfslock-perl libmime-lite-html-perl libnet-cidr-perl libauthcas-perl libcrypt-ciphersaber-perl libcrypt-openssl-x509-perl libcrypt-smime-perl libunicode-linebreak-perl 

wget http://www.sympa.org/distribution/sympa-6.2.16.tar.gz
tar -xzf sympa-6.2.16.tar.gz
cd sympa-6.2.16/
./configure --with-initdir=/etc/init.d/

make clean all
make
make install

/home/sympa/bin/sympa_wizard.pl --check
[Enter] 
2 (Postgres)

-> Install module MHonArc::UTF8 ? y (too old chez debian)
-> Install module MIME::Charset ? y (idem)
-> Install module DBD::CSV ? n
-> Install module DBD::ODBC ? n
-> Install module DBD::Oracle ? n
-> Install module DBD::SQLite ? n
-> Install module DBD::Sybase ? n
-> Install module DBD::mysql ? n
-> Install module Data::Password ? n

Si l'on part de rien, on lance l'assistance qui va nous permettre de générer un /etc/sympa.conf sans douleurs.
Note: les (nombreuses) autres question non copiées ci-dessous sont laissées avec leur choix par défaut.

./sympa_wizard.pl

domain [hostname] : listes.hadoly.fr
gecos [SYMPA] : SYMPA Hadoly
listmaster [your_email_address@hostname] : toto@titi.fr
wwsympa_url [http://hostname/sympa] : http://listes.hadoly.fr/sympa
process_archive [off] : on 
lang [en-US] : fr
db_type [mysql] : Pg
db_user [user_name] : sympa
db_passwd [user_password] : sympapw
title [Mailing lists service] : Listes de diffusion d'Hadoly
use_html_editor [0] : 1
http_host [host.domain.tld] : listes.hadoly.fr

Script d'init

Editer /etc/init.d/sympa et ajouter les “LSB tags” suivants en début de fichier:

### BEGIN INIT INFO
# Provides:             sympa
# Required-Start:       $syslog $remote_fs $network
# Required-Stop:        $syslog $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Sympa Mailing lists management
# Description:          Sympa is a powerfull mailing lists management system
### END INIT INFO

Puis:

update-rc.d sympa defaults

Création des répertoires et démarrage

mkdir /etc/mail
mkdir /var/lock/subsys/

chown root /etc/mail/sympa_aliases
postalias /etc/mail/sympa_aliases
chown sympa /etc/mail/sympa_aliases

service sympa start

Un postalias directement sur le fichier sympa_aliases échoue si le fichier n'appartient pas à root (bug ?). Pour la création initiale du sympa_aliases.db, on change temporairement le propriétaire.

MTA Postfix

Editer /etc/postfix/master.cf et ajouter à la fin:

sympa unix - n n - - pipe flags=R user=sympa argv=/home/sympa/bin/queue ${recipient}
sympabounce unix - n n - - pipe flags=R user=sympa argv=/home/sympa/bin/bouncequeue ${recipient}

Editer /etc/postfix/transport_regexp:

/^.-owner\@listes.hadoly.fr$/ sympabounce:
/^.\@listes.hadoly.fr$/ sympa:

Editer /etc/postfix/main.cf:

relay_domains = $mydestination,listes.hadoly.fr
alias_maps = hash:/etc/aliases,hash:/etc/mail/sympa_aliases
alias_database = hash:/etc/aliases,hash:/etc/mail/sympa_aliases
transport_maps     = regexp:/etc/postfix/transport_regexp
sympa_destination_recipient_limit = 1 
sympabounce_destination_recipient_limit = 1

TLS

Un certificat auto-signé, d'une grande durée est probablement le plus simple. Du let's encrypt la dessus risque d'être pénible.

Serveur web Apache

apt install libapache2-mod-fastcgi apache2-suexec libcgi-fast-perl apache2
a2enmod suexec
a2enmod fastcgi
service apache2 restart

Créer le fichier vim /etc/apache2/sites-available/listes.hadoly.fr.conf

FastCgiServer /home/sympa/bin/wwsympa-wrapper.fcgi -processes 2
<VirtualHost *:80>  
        ServerName listes.hadoly.fr
        ServerAdmin postmaster@listes.hadoly.fr

        ScriptAlias /sympa /home/sympa/bin/wwsympa-wrapper.fcgi
        DirectoryIndex sympa/
        SuExecUserGroup        sympa sympa
        <Location /sympa>
                SetHandler fastcgi-script
                AddHandler fastcgi-script .fcgi .fpl .pl
                Options +ExecCGI
                Options +FollowSymLinks
                Require all granted
        </Location>
        <Directory /home/sympa/static_content>
                Require all granted
        </Directory>

        Alias /static-sympa /home/sympa/static_content
</VirtualHost>

Activer la conf

a2ensite listes.fguillot.fr.conf
service apache2 reload

Dans un second temps, mettre du HTTPS. Tout ce qu'il a de plus classique, a priori.

DKIM

/! Configuration à vérifier ! Pour les mails sortants, qui signe ? Opendkim, ou SYMPA ? Normalement devrait être directement SYMPA. La conf donnée ci-dessous doit donc être simplifiable. Opendkim à utiliser pour vérifier les signatures des mails entrants.

apt install opendkim opendkim-tools

Editer /etc/opendkim.conf

AutoRestart             Yes
AutoRestartRate         10/1h
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:12301@localhost

Editer /etc/default/opendkim

SOCKET="inet:12301@localhost"

Editer /etc/postfix/main.cf. Si d'autres “milters” sont déjà utilisés, ajouter le nouveau en fin de ligne, après une virgule.

milter_protocol = 2
milter_default_action = accept 
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Créer le répertoire qui va acceuillir les clefs.

mkdir -p /etc/opendkim/keys/listes.hadoly.fr

Editer /etc/opendkim/TrustedHosts

127.0.0.1
::1
localhost

Editer /etc/opendkim/KeyTable

lists._domainkey.listes.hadoly.fr listes.hadoly.fr:lists:/etc/opendkim/keys/listes.hadoly.fr/lists.private

“lists” est le selecteur DKIM que l'on va retrouver dans l'enregistrement DNS. Il est possible de le choisir.

Editer /etc/opendkim/SigningTable

*@listes.hadoly.fr lists._domainkey.listes.hadoly.fr

Générer les clefs:

cd /etc/opendkim/keys/listes.hadoly.fr
opendkim-genkey -s lists -d listes.hadoly.fr

Positionner les droits sur la clef privée. Comment faire ? Sympa soit y avoir accès, mais opendkim rale s'il n'est pas l'unique personne a avoir accès à la clef.
Ugly hack: faire une copie de lists.private. Modifier les droits de cette copie pour sympa.

Renseigner/Mettre à jour l'enregistrement DNS:

cat lists.txt

Redémarrer postfix et opendkim. Vérifier les logs, nottament pour la question des droits sur la clef privée.

service postfix restart
service opendkim restart

Editer /etc/sympa/sympa.conf

dkim_feature    on
dkim_add_signature_to   robot,list
dkim_signer_domain      listes.hadoly.fr
dkim_private_key_path /etc/opendkim/keys/listes.hadoly.fr/lists.private.sympa
dkim_selector lists
dmarc_protection_mode dmarc_reject

Le paramètre “dmarc_protection_mode” permet d'éviter de se faire jettre quand la politique DMARC d'un domaine est sur reject. Pour cela, le From du message initial est changé par “laliste@hadoly.fr” et une entête X-Original-From: est ajoutée avec l'adresse réelle de l'émetteur. Cette opération n'est réalisée que si DMARC p=reject (pour le domaine de l'émetteur).

Avec la conf donnée, on signe les messages envoyés par SYMPA lui même (changement de mdp, etc), mais aussi certain mails (ceux validés par modération, ceux déjà DKIM signé, etc). Voir https://www.sympa.org/manual_6.1/conf-parameters/part3#dkim_signature_apply_on

SPF

Juste un enregistrement DNS à faire, pour dire quelles IP ont le droit d'envoyer des mails en @listes.hadoly.fr. Exemple:

listes  IN TXT    "v=spf1 ip4:198.51.100.1 ip6:2001:db8:dead:bebe::3 ~all"