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.
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
La version de SYMPA dans les dépots debian étant un peu ancienne (6.1.x), on installe SYMPA depuis les sources.
groupadd sympa useradd -m -g sympa -d /home/sympa sympa
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
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
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.
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
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.
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.
/! 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
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"