Crans
  • Commentaires
  • Page immuable
  • Menu
    • Affichage
    • Carte locale du site
    • Pièces jointes
    • Informations
    • Code source
    • Utilisateur
    • Ajouter un lien
    • Se désabonner
  • Connexion
    • Connexion
    • Paramètres

Navigation

  • Modifications récentes
  • Recherche avancée
  • Aide

Trail

  • MailMan3
Version 4 à la date du 2021-03-07 20:04:50
CransWiki:
  • CransTechnique
  • ServicesMineurs
  • MailMan3

Mailman 3

Mailman 3 est encore en cours de déploiement, cette documentation risque d'évoluer dans les jours à venir.

Sommaire

  1. Mailman 3
    1. Installation
      1. Mailman
      2. Installation de la base de données
      3. Configuration de Mailman
      4. Configuration de Hyerkitty
      5. Configuration de Mailman-web
      6. Connexion via le CAS
      7. Thèmes Crans personnalisés
      8. Migration de la base de données, collecte des fichiers statiques
      9. Redémarrer mailman
      10. Postfix
        1. Configuration standard
        2. Configuration du serveur mail principal

Mailman 3 est le service de listes de diffusions utilisé au Crans. Il vient remplacer Mailman 2, après près de 20 ans de bons et loyaux services.

Mailman est déployé sur le serveur mailman. L'interface web de Mailman est disponible sur https://lists.crans.org/ (à venir) ou sur https://mailman.crans.org/.

Les listes de diffusion sont dans le domaine @lists.crans.org (certaines ont des alias @crans.org).

Installation

Mailman

Mailman 3 est gentiment packagé sous Debian, on se contente donc d'installer le paquet depuis APT.

Les données de Mailman seront stockées dans /var/lib/mailman3. On prévoie donc un disque dédié monté sur ce chemin.

Sur un Debian Bullseye propre, il suffit de faire :

$ sudo apt update
$ sudo apt install --no-install-recommends mailman3-full

Mailman est désormais déjà prêt à être configuré et utilisé :) Il est bon de vérifier néanmoins que le dossier /var/lib/mailman3 appartient bien à list:list.

Pour des raisons de confort d'utilisation d'un terminal Django, installer iPython via le paquet python3-ipython peut se révéler très pratique.

Installation de la base de données

Mailman est essentiellement séparé en deux cœurs : mailman qui gère les listes et mailman-web qui gère l'affichage web avec Django. Les deux parties ont besoin de leur propre base de données.

Sur le serveur qui héberge PostgreSQL (tealc au Crans), il faut donc créer les deux bases de données :

$ sudo -u postgres createuser -P mailman3
$ sudo -u postgres createdb -O mailman3 mailman3
$ sudo -u postgres createuser -P mailman3web
$ sudo -u postgres createdb -O mailman3web mailman3web

On n'oublie pas d'autoriser les connexions dans /etc/postgresql/11/main/pg_hba.conf :

host   mailman3    mailman3    172.16.10.0/24    md5
host   mailman3    mailman3    fd00:0:0:10::/64    md5

host   mailman3web    mailman3web    172.16.10.0/24    md5
host   mailman3web    mailman3web    fd00:0:0:10::/64    md5

Configuration de Mailman

Sa configuration se trouve dans /etc/mailman/mailman.cfg, qui doit appartenir à root:list et avoir pour permissions 0640.

On définit dans la partie [database] les paramètres de connexion à la base de données :

[database]
class: mailman.database.postgresql.PostgreSQLDatabase
url: postgres://mailman3:PASSWORD@172.16.10.1:5432/mailman3

Dans la partie [webservice], on définit un mot de passe pour la connexion à l'API nommé admin_pass.

On configure enfin la réception et l'envoi de mails :

[mta]
incoming: mailman.mta.postfix.LMTP

outgoing: mailman.mta.deliver.deliver

smtp_host: 172.16.10.124  # Redisdead
smtp_port: 25
smtp_user: 
smtp_pass: 

lmtp_host: 127.0.0.1
lmtp_port: 8024

configuration: python:mailman.config.postfix

Les mails sont reçus localement par LMTP et pour l'envoi mailman s'adresse au serveur SMTP de Redisdead.

Configuration de Hyerkitty

Hyperkitty est le service d'archivage de Mailman. Pour l'activer, il faut ajouter dans le fichier de configuration de Mailman :

[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman3/mailman-hyperkitty.cfg

Et renseigner le mot de passe dans /etc/mailman3/mailman-hyperkitty.cfg :

[general]
base_url: http://localhost/hyperkitty/
api_key: {{ mailman3.archiver_key }}

Configuration de Mailman-web

Sa configuration se trouve dans /etc/mailman/mailman-web.py, qui doit appartenir à root:www-data et avoir pour permissions 0640.

SECRET_KEY = '{{ mailman3.web_secret_key }}'

ADMINS = (
     ('Mailman Suite Admin', 'root@crans.org'),
)

ALLOWED_HOSTS = [
    "localhost",  # Archiving API from Mailman, keep it.
    "mailman.crans.org",
    "lists.crans.org",
]

# Mailman API credentials
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = '{{ mailman3.restadmin_pass }}'
MAILMAN_ARCHIVER_KEY = '{{ mailman3.archiver_key }}'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')

# Add allauth_cas_crans path
import sys
sys.path.insert(0, "/usr/scripts/mailman")

INSTALLED_APPS = (
    'mailman_theme_crans',  # override templates
    'hyperkitty',
    'postorius',
    'django_mailman3',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'django_gravatar',
    'compressor',
    'haystack',
    'django_extensions',
    'django_q',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth_cas',
    'allauth_cas_crans',
)

# Database configuration
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mailman3web',
        'USER': 'mailman3web',
        'PASSWORD': 'PASSWORD',
        'HOST': '172.16.10.1',
        'PORT': 5432,
        'OPTIONS': {
        },
    }
}

# Reverse-proxy configuration
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

EMAILNAME = 'crans.org'
DEFAULT_FROM_EMAIL = f'contact@crans.org'
SERVER_EMAIL = f'root@crans.org'

ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
SOCIALACCOUNT_PROVIDERS = {
    'crans': {},
}

COMPRESS_PRECOMPILERS = (
  ('text/less', 'lessc {infile} {outfile}'),
  ('text/x-scss', 'sassc -t compressed {infile} {outfile}'),
  ('text/x-sass', 'sassc -t compressed {infile} {outfile}'),
)
COMPRESS_OFFLINE = True

POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'

Certains paramètres concernent la connexion au CAS, voir ci-dessous.

Connexion via le CAS

On souhaite que les adhérents se connectent sur l'interface web via le CAS du Crans. On comment pour cela par installer l'exension nécessaire pour django-allauth, qui n'existe malheureusement pas dans les paquets Debian :

$ sudo apt install --no-install-recommends python3-pip python3-lxml
$ sudo pip3 install django-allauth-cas

On ajoute alors le module allauth_cas aux applications installées (voir ci-dessus).

On souhaite alors configurer le CAS pour le Crans. On utilise pour cela le module allauth_cas_crans qui est implémenté dans le dépôt scripts du Crans. En le supposant clôné dans /usr/scripts, on ajoute alors au fichier de configuration de mailman-web :

import sys
sys.path.insert(0, "/usr/scripts/mailman")

On peut désormais ajouter le module allauth_cas_crans. On n'oubliera pas d'autoriser https://mailman.crans.org/ et https://lists.crans.org/ d'accéder au CAS.

Thèmes Crans personnalisés

Une fois les scripts Crans sourcés comme ci-dessus, il suffit d'ajouter en première application mailman_theme_crans pour remplacer les thèmes par défaut.

Migration de la base de données, collecte des fichiers statiques

Pour migrer la base de données et créer les différentes tables, une fois Mailman bien configuré, il suffit de lancer :

$ sudo -u www-data mailman-web migrate

Pour importer les fichiers statiques :

$ sudo -u www-data mailman-web collectstatic

Et enfin, pour compresser et mettre en cache certaines ressources (afin d'optimiser le délai de réponse) :

$ sudo -u www-data mailman-web compress

Toutes ces opérations sont à faire après chaque mise à jour de mailman.

Redémarrer mailman

Les services sont gérés par systemd :

$ sudo systemctl restart mailman
$ sudo systemctl restart mailman-web

Postfix

Configuration standard

On installe un serveur Postfix qui servira uniquement à recevoir les mails (comme indiqué plus haut, l'envoi des mails se fait en contactant directement redisdead). On commence par installer postfix :

$ sudo apt install --no-install-recommends postfix

Sa configuration se fait dans /etc/postfix/main.cf. Le début de la configration est assez standard :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# This postfix configuration set up a MTA only to send and receive mailing list mails

# When a mail is sent to @localhost, this domain will be used
myorigin = crans.org

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/crans.org/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/crans.org/privkey.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

# Limit to 200Mo by message
message_size_limit = 209715200

# Default aliases
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# Only localhost
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

# Listen on IPv4 and IPv6
inet_interfaces = all
inet_protocols = all

# Do not use gethostname
myhostname = mailman.adm.crans.org
mydomain = crans.org

# Softbounce, ask remote mail server to send the mail again if error
# Do not keep it active in production!
soft_bounce = no

On veillera en particulier à bien générer un certificat TLS via certbot nommé crans.org.

On ajoute la configuration spécifique à Mailman 3 :

# Mailman3 integration
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
transport_maps =
    hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps =
    hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains =
    hash:/var/lib/mailman3/data/postfix_domains

Il suffit ensuite de recharger Postfix.

Configuration du serveur mail principal

On souhaite que les mails soient reçus par le serveur mail principal, à savoir redisdead, afin de faire un premier tri et de gérer lui-même la sécurité des mails.

On ajoute alors redisdead.crans.org, freebox.crans.org et sputnik.crans.org en serveurs MX pour lists.crans.org.

Dans le fichier /etc/postfix/main.cf, on pense bien à ajouter lists.crans.org dans le champ $mydestination (et non relay_domains uniquement).

Dans /etc/postfix/transport, on indique à postfix de transporter les mails envoyer sur une adresse @lists.crans.org sur le serveur de Mailman :

lists.crans.org              smtp:[172.16.10.110]

Après un rechargement de postfix, les mails sont prêts à être distribués !


CatégorieCrans CatégoriePagePublique

  • Propulsé par MoinMoin
  • Mentions légales