Table des matières

Architecture de mail

Le serveur mail est le pivot de l'architecture mail. C'est le MX principal.

Les envois de mails vers l'Internet se font par lui, c'est donc le relais. Il reçoit également tous les domaines hébergés par chapril, dont le principal chapril.org

Pour installer un postfix satellite, c'est ici : Installation d'un postfix en satellite

Le serveur de mails est un postfix et le serveur de réception de courrier dovecot. On ne va pas s'étendre sur ce dernier car actuellement il n'y a pas d'email délivré à autre que root.

Enfin, sympa et l'interconnexion de sympa fait l'objet d'une documentation spécifique : Interconnexion entre sympa et postfix.

Architecture de postfix

Postfix réceptionne les mails sur le port 25. Il relaie les mails en provenance de nos réseaux ainsi que les mails soumis par une connexion authentifiée.

La configuration se fait par la compilation des fichiers de /etc/postfix/conf.d en un seul fichier main.cf contenant les options. Cette compilation se fait par l'invocation de la commande make dans le répertoire /etc/postfix.

Les alias supportés par chaque domaine sont placés dans un fichier /etc/postfix/alias/domaine.db qui est généré à partir du fichier domaine.aliases correspondant par la commande make.

Pour remettre les courriels un certain nombre de transports ont été définis. Le transport par défaut est la remise par SMTP directe. Des transports pour la remise de courriel vers sympa (mailing-lists) ont été définis. Voir les détails ici : Interconnexion entre sympa et postfix

Le transport slow_domains permet de limiter l'envoi du volume de mails à certains domaines, gérés par des pauvres comme laposte.net qui n'ont pas les moyens d'encaisser plus de 1 courriel à la fois.

La configuration TLS est basique: un couple clé/certificat placé dans /etc/ssl/ a été créé et auto-signé. Les protocoles SSLv2 et SSLv3 ont été désactivés et l'authentification doit utiliser TLS obligatoirement.

Toute la doc qui suit a été écrite à froid, adaptée de celle de l'April, et concerne des sujets touchy. Il est évident que la peinture ne soit pas sèche et que des éléments divergent de ce qui est réellement sur le serveur.

Installation de Amavis

apt install amavisd-new spamassassin clamav-daemon pyzor razor arj bzip2 cabextract cpio file gzip nomarch pax unzip zip

Puis configuration des groupes:

addgroup clamav amavis
addgroup amavis clamav

Configuration de pyzor/razor:

su - amavis -s /bin/bash
razor-admin -create
razor-admin -register
pyzor discover

Installation des fichiers de test:

apt install clamdscan clamav-testfiles
systemctl start clamav-daemon.service
systemctl restart clamav-freshclam.service
clamdscan /usr/share/clamav-testfiles/clam.mail

Enfin décommenter les lignes dans /etc/amavis/conf.d/15-content_filter_mode :

/etc/amavis/conf.d/15-content_filter_mode
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
 
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Et redémarrer amavis :

systemctl restart amavis

Installation de fail2ban

L'idée est d'éviter les tentatives de brute force pour obtenir nos mots de passe:

apt-get install fail2ban

Installation de Postgrey

Pour un aperçu sur le greylisting : https://debian-handbook.info/browse/stable/network-services.html#sect.setting-up-greylisting

apt install postgrey

Après ça postgrey tourne et écoute sur le 10023. Il faut ajouter une restriction au niveau de posftix :

/etc/postfix/conf.d/50-restrictions.conf:
smtpd_recipient_restrictions =
                             [...]
                             check_policy_service inet:127.0.0.1:10023,

Et nous allons baisser fortement le délais de greylisting, le temps d'avoir en base une liste convenable de serveurs autorisés :

/etc/default/postgrey
POSTGREY_OPTS="--inet=10023 --delay=60"

Nous allons aussi ajouter une liste de gros comptes en whitelist car les messages venant d'eux peuvent « rebondir » depuis de nombreux serveurs d'un même pool avant de nous parvenir tel qu'on les attend

/etc/postgrey/whitelist_clients
yahoo.com
google.com
hotmail.com
live.fr
outlook.com
mail-out.ovh.net
mxb.ovh.net
gandi.net

Et on redémarre le tout :

systemctl restart postgrey
postfix reload

Déploiement de DKIM sur postfix

Pour le déploiement, ont été faites les choses suivantes.

Installation de opendkim:

apt-get install opendkim

Édition de /etc/opendkim.conf et ajout en fin :

KeyTable 	        /etc/postfix/dkim/keytable
SigningTable            /etc/postfix/dkim/signingtable 
ExternalIgnoreList      /etc/postfix/dkim/TrustedHosts

Puis édition de /etc/defaults/opendkim pour décommenter:

SOCKET="inet:12301@localhost" # listen on loopback on port 12301
Malheureusement opendkim est pour le moment mal intégré à systemd. La conf de /etc/defaults/opendkim est silentieusement ignorée par ce dernier. Il faut éditer /lib/systemd/system/opendkim.service pour changer les préférences et ne surtout pas utiliser /etc/init.d pour manipuler le démon.

Puis, pour générer les clefs:

opendkim-genkey -D /etc/postfix/dkim/ -d chapril.org -s mail

On va alors obtenir de fichiers dans /etc/postfix/dkim/ : mail.private et mail.txt. On copie ce dernier dans la zone concernée.

Par ailleurs on définie les tables

/etc/postfix/dkim/keytable
mail._domainkey.chapril.org chapril.org:mail:/etc/postfix/dkim/mail.private
/etc/postfix/dkim/signingtable
chapril.org mail._domainkey.chapril.org

et

/etc/postfix/dkim/TrustedHosts
127.0.0.1
localhost    
192.168.0.0/24
[::ffff:127.0.0.0]/104
[::1]/128
[2a01:4f8:10b:c41::]/64
[2a01:4f8:10b:c42::]/64
88.191.250.11
# 88.191.250.11 est galanga

On pense à changer les permissions :

chgrp opendkim /etc/postfix/dkim/*
chmod g+r /etc/postfix/dkim/*

Enfin, dans Postfix on ajoute dans /etc/postfix/conf.d/60-anti-spam.conf:

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

Puis make dans /etc/postfix et:

service postfix reload

Adresse no-reply

Une adresse devnull@chapril.org existe pour les besoins d'un no-reply.