==== 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
ServerName listes.hadoly.fr
ServerAdmin postmaster@listes.hadoly.fr
ScriptAlias /sympa /home/sympa/bin/wwsympa-wrapper.fcgi
DirectoryIndex sympa/
SuExecUserGroup sympa sympa
SetHandler fastcgi-script
AddHandler fastcgi-script .fcgi .fpl .pl
Options +ExecCGI
Options +FollowSymLinks
Require all granted
Require all granted
Alias /static-sympa /home/sympa/static_content
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"