Postfix est un serveur de mails. Il est (et sera) installé sur toutes les machines.
Installation
Lors de l'installation de Postfix, il est souvent nécessaire de
désinstaller Exim4 (le MTA par défaut de Debian). Pour ce faire, et
afin d'éviter d'avoir des paquets cassés, il est préférable d'utiliser
l'Interface Utilisateur (UI) d'aptitude
plutôt qu'un outil moins
interactif en ligne de commande (aptitude ou apt-get).
Sur l'ensemble des machines, on a installé le paquet Debian officiel
(pour Wheezy, v2.9.6-2 au moment de l'installation) :
Configuration
La configuration est (principalement) centralisée dans trois fichiers :
/etc/postfix/main.cf
- contient la configuration de Postfix proprement dite. Ses options de configuration sont décrites dans la page de manuel de postconf(5).
/etc/postfix/master.cf
- est le fichier de configuration du programme principal (
master
) de Postfix. Il contient des règles relatives à des protocoles ou des modes de transport du courrier, et les commandes à appliquer pour chacun de ces protocoles. /etc/aliases
- contient les déclarations des redirections des users locaux et autres scripts.
Configuration sur bulbe
Le
hostname
et domaine par défaut (mydomain
) sontbulbe.nos-oignons.net
.
Les mails sont acceptés à destination de{bulbe.,}nos-oignons.{net,org,fr}
bulbe.tetaneutral.net
localhost
.
Les extensions d'adresse de la forme
user+foo@nos-oignons.net
sont autorisées :recipient_delimiter = +
Seuls les alias peuvent recevoir des mails, que ce soit en
@nos-oignons.{net,org,fr}
ou@bulbe.nos-oignons.{net,org,fr}
.L'authentification SASL a été désactivée, car inutilisée, afin de réduire le spam dans les logs.
Postfix et ses binaires ne sont plus chrootés, mais confinés à l'aide de systemd, afin de pouvoir utiliser un socket unix pour le worker milter de rspamd.
Modification cosmétique
La bannière SMTP (smtpd_banner
) est devenue
bulbe.nos-oignons.net ESMTP Postfix (Debian GNU/Oignons)
TLS et STARTTLS
SSMTP (connexion entière chiffrée) et STARTTLS (chiffrement après l'initiation de la connexion) sont tous deux supportés.
Les certificats auto-signés utilisés sont ceux produits par le paquet
ssl-cert
. Ils sont choisis avec les paramètressmtpd_tls_cert_file
etsmtpd_tls_key_file
, et peuvent être regénérés avec la commandesudo make-ssl-cert generate-default-snakeoil --force-overwrite
.Les connexions TLS utilisent un cache de session persistant, ce qui évite de renégocier une session TLS à chaque connexion. Cf
smtpd_tls_session_cache_database
(pour les connexions entrantes) etsmtp_tls_session_cache_database
(connexions sortantes).Lorsqu'un mail est envoyé, Postfix chiffre si possible, et vérifie le certificat présenté (si il existe dans DNS).
smtp_tls_security_level = dane
etsmtp_dns_support_level = dnssec
Cf http://www.postfix.org/TLS_README.html#client_tls_dane pour plus d'info.Lorsqu'un MTA distant délivre un mail, Postfix propose l'utilisation de STARTTLS.
smtpd_tls_security_level = may
Cf http://www.postfix.org/TLS_README.html pour plus de détails.
aliases
La plupart des users système sont redirigés vers
root
.Les mails pour
root
sont transmis à une mailing-list chiffrée :machines@nos-oignons.net
.
greylisting
Le greylisting est assuré par rspamd. La politique est de ne greylister que les hôtes signalés par des listes noires (RBL).
Intégration avec Mailman
Pour les listes de discussions, Mailman
maintient un fichier d'aliases,
/var/lib/mailman/data/aliases
. On demande à Postfix de l'utiliser en
l'indiquant dans la liste des alias_maps
.
Intégration avec Schleuder
Schleuder dispose de son propre transport
(schleuder
) configuré dans /etc/postfix/master.cf
.
Les adresses qui l'utilisent sont référencées dans la table au format hash
/etc/postfix/schleuder
. Cette table est utilisée grâce à la directive
transport_maps.
Afin que ces adresses fonctionnent pour les domaines qui font partie de
mydestination
il est également nécessaire d'avoir cette table dans la liste
de la directive
local_recipient_maps.
Script répondeur
Un script Ruby tout simple est relié aux addresses dons@
, donner@
et
donate@
. Il se contente de répondre avec un message tout fait,
contenant l'IBAN de l'association.
Le script est installé sur bulbe (/usr/local/bin/repondeur-dons.rb
) et
requiert le paquet ruby-mail
.
Son code est disponible dans le wiki
slow transports
En raison de certaines limitations imposées par certaines sociétés, des slow transports sont configurés dans
/etc/postfix/master.cf
:slow unix - - n - 5 smtp yahoo unix - - n - 5 smtp
/etc/postfix/main.cf
:slow_destination_concurrency_limit = 2 slow_destination_recipient_limit = 20 slow_destination_rate_delay = 2s yahoo_initial_destination_concurrency = 1 yahoo_destination_concurrency_limit = 4 yahoo_destination_recipient_limit = 2 yahoo_destination_rate_delay = 1s default_destination_concurrency_limit = 10
/etc/postfix/transports
(et éventuellement/etc/postfix/transports.regexp
) :liste les domaines auxquels seront appliquées les règles définies ci-dessus, par exemple :
orange.fr slow: yahoo.com yahoo:
Configuration sur les nœuds Tor
Lors de l'installation, debconf
demande le type d'usage qu'on veut
faire de Postfix : on choisit « smarthost ». Les nœuds Tor ne sont pas
destinés à recevoir du courrier, mais seulement à en émettre vers le
serveur principal (bulbe).
Dans /etc/aliases
:
La plupart des users système sont redirigés vers
root
.Les mails pour
root
sont transmis à une mailing-list chiffrée, gérée par Schleuder, en l'occurencemachines@nos-oignons.net
.
Dans /etc/postfix/main.cf
:
On prendra ici marcuse
en exemple, à adapter pour les autres machines.
Dans ce premier bloc, la plupart des options sont celles par défault.
relayhost
désigne la seule machine avec laquelle Postfix va communiquer :
mydomain = nos-oignons.net
myhostname = marcuse.$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost
myorigin = $myhostname
relayhost = bulbe.$mydomain
Ici, on interdit tout courrier venant de l'extérieur (c'est à dire que Postfix ne traitera que le courrier généré par les applications locales) :
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/124 [::1]/128
mynetworks_style = host
inet_interfaces = loopback-only
On va demander à Postfix de s'assurer que le serveur auquel il s'adresse
(relayhost
) n'est pas un usurpateur : il va vérifier que l'empreinte
du certificat ssl/tls présenté par le serveur correspond bien à celle qui
se trouve en dur dans son fichier de configuration :
smtp_tls_security_level = fingerprint
smtp_tls_fingerprint_digest = sha1
smtp_tls_fingerprint_cert_match = ac:ad:75:7f:58:c3:cf:53:ef:a0:d2:e3:0a:64:3d:e9:a2:c4:58:28
- NOTE :
pour obtenir cette empreinte sha1 de la clef publique pour
bulbe.nos-oignons.net
, on exécute (sur bulbe donc) :openssl x509 -in /var/lib/acme/live/bulbe.nos-oignons.net/cert -pubkey | \ openssl pkey -pubin -outform DER | \ openssl dgst -sha1 -c
On pin la clef publique, parce que le certificat lui-même change régulièrement.
Ça devrait se faire tout seul, mais on demande quand même que le chiffrement de l'échange soit de bonne qualité :
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1
smtp_tls_exclude_ciphers = NULL, MD5, DES, RC4
smtp_tls_mandatory_ciphers = high
Enfin, pour avoir un peu de traces dans /var/log/mail.info
:
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
Et ne pas oublier : sudo etckeeper commit
Test de Postfix
L'utilitaire SWAKS permet de tester simplement et rapidement un certain nombre d'aspects du serveur mail.
Exemple d'utilisation :
swaks -t nicoo@nos-oignons.net --server bulbe.nos-oignons.net --protocol smtp --tls