Installation de mutt-notmuch
Note pour moi-même : je n'utilise finalement pas notmuch.
Note pour les autres : comme j'avais rédigé ça, je le laisse là, des fois que ça puisse servir.
Compilation et installation
Récupération du dépôt :
cd tmp
git clone https://github.com/karelzak/mutt-kz/ mutt-notmuch
cd mutt-notmuch
./prepare
Installation de dépendances (non encore installées chez moi) :
sudo apt-get install libcdk5 libcdk5-dev libgpg-error-dev libgpgme11-dev libnotmuch-dev \
libnotmuch3 libdb-dev libncursesw5-dev
sudo apt-get install --no-install-recommends notmuch
Configuration avec les options qui vont bien :
./configure --enable-gpgme --enable-hcache --enable-imap --enable-locales-fix \
--enable-mailtool --enable-pop --enable-smtp --with-gnutls --with-ssl \
--enable-notmuch --with-wc-funcs --enable-iconv
Compilation puis installation :
make
sudo make install
Mise à jour des alternatives :
sudo update-alternatives --install /usr/bin/mutt mutt /usr/local/bin/mutt 40
sudo update-alternatives --config mutt
Paramétrages
Paramétrage dans ~/.notmuch-config
:
# .notmuch-config - Configuration file for the notmuch mail system
# For more information about notmuch, see http://notmuchmail.org
# Database configuration
#
# The only value supported here is 'path' which should be the top-level
# directory where your mail currently exists and to where mail will be
# delivered in the future. Files should be individual email messages.
# Notmuch will store its database within a sub-directory of the path
# configured here named ".notmuch".
[database]
path=/home/<login>/Mail
# User configuration
#
# Here is where you can let notmuch know how you would like to be
# addressed. Valid settings are
#
# name Your full name.
# primary_email Your primary email address.
# other_email A list (separated by ';') of other email addresses
# at which you receive email.
#
# Notmuch will use the various email addresses configured here when
# formatting replies. It will avoid including your own addresses in the
# recipient list of replies, and will set the From address based on the
# address to which the original email was addressed.
[user]
name=<Nom>
primary_email=<user>@<domain.tld>
other_email=<otheruser>@<otherdomain.tld>
# Configuration for "notmuch new"
#
# The following options are supported here:
#
# tags A list (separated by ';') of the tags that will be
# added to all messages incorporated by "notmuch new".
[new]
tags=new;inbox;
Paramétrage du marquage des mails, dans Mail/.notmuch/hooks/post-new
:
#!/bin/sh
notmuch tag +collectif +asso -- tag:new AND \( folder:INBOX.asso* OR folder:archives.asso* OR from:root@monasso.tld \)
notmuch tag +spam -- tag:new AND \( folder:Junk \)
notmuch tag +archive -- tag:new AND \( folder:archives* \)
notmuch tag -inbox -- tag:new AND \( folder:Draft* OR folder:Send* OR folder:Junk OR folder:Archives* \)
notmuch tag -new -- tag:new
Installation et paramétrage de offline-imap
Installation :
sudo apt-get install offlineimap
Paramétrage dans ~/.offlineimaprc
:
[general]
accounts = <login>
[Account <login>]
autorefresh = 0.25
quick = 10
localrepository = Local
remoterepository = Remote
postsynchook = notmuch new
[Repository Local]
type = Maildir
localfolders = ~/Mail
[Repository Remote]
type = IMAP
ssl = yes
remotehost = imap.domain.tld
remoteuser = <login>
remotepass = <pwd>
nametrans = lambda x: '.' if x in ['INBOX',] else '.' + x
Ensuite, on lance avec :
offlineimap
Et ça recopie en local l'arborescence du ou des serveurs Remote
(on peut
mettre plusieurs remoterepository
pour tout récupérer sur un même poste.
Installation de dovecot en local
apt-get install dovecot-core dovecot-imapd
S'assurer que dovecot n'écoute que sur l'IP locale, puis ajouter la ligne :
protocols = imap
dans le dovecot.conf.
Installation de postfix en relai — poster sur un serveur maîtrisé
Configuration de postfix en local
On installe postfix si ce n'est pas déjà fait :
apt-get install postfix postfix-pcre
Penser aussi à supprimer un autre serveur de mail qui traînerait sur la machine…
Génération d'un certificat auto-signé :
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/postfix-monposte.pem -out /etc/ssl/certs/postfix-monposte.pem
Cette commande génère le certificat x509 et la clef privée (valables 10 ans).
Le fichier main.cf
:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/postfix-monposte.pem
smtpd_tls_key_file = /etc/ssl/private/postfix-monposte.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
smtp_use_tls = yes
smtp_tls_cert_file = /etc/ssl/certs/postfix-monposte.pem
smtp_tls_key_file = /etc/ssl/private/postfix-monposte.pem
smtp_tls_mandatory_ciphers = high
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_CApath = /etc/ssl/certs
myhostname = monposte.domain.tld
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = monposte.domain.tld, localhost.domain.tld, localhost
relayhost = smtp.domain.tld:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
maximal_queue_lifetime = 183d
bounce_queue_lifetime = 183d
header_checks = pcre:/etc/postfix/header_checks
Les directives importantes :
- les
postfix-monposte.pem
sont les clefs et certificats auto-signés qui seront utilisés pour la connexion au relai ; relayhost
pour spécifier quel est le serveur relai (à qui seront envoyés les mails dès qu'on a du réseau) – je spécifie le port 587 (submission) pour relayer le mail pour m'affranchir des réseaux trop fermés qui empêchent l'utilisation du port 25 ;smtp_use_tls=yes
pour obliger à chiffrer les connexions vers le relai (si le relai en question le supporte) ;*_queue_lifetime
pour garder beaucoup de queue, si on n'a pas de connexion pendant longtemps (je mets à peu près 6 mois) ;header_checks
, cf. ci-dessous.
Le fichier header_checks
:
/^Received:.*/ IGNORE
Cette directive permet de supprimer toute référence à la machine « locale » (celle depuis laquelle on poste) dans les entêtes des mails envoyés.
Redémarrer postfix.
Configuration sur le serveur distant (relai)
Ici, je suppose que postfix est déjà installé et paramétré, je montre juste les morceaux à ajouter.
master.cf
La première chose à faire est de modifier le master.cf
pour autoriser les
clients authentifiés par certificats à envoyer du mail via cette machine :
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o cleanup_service_name=submissioncleanup
-o smtpd_tls_ask_ccert=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_tls_clientcerts,reject
[…]
submissioncleanup unix n - - - 0 cleanup
-o header_checks=pcre:/etc/postfix/submission_headerchecks
Le mot-clef important est permit_tls_clientcerts
. Dans le cleanup, on
effectue une opération similaire à celle sur la machine « locale », pour
supprimer toute référence à son IP ou à son nom dans les entêtes des mails que
l'on relaie.
Le fichier submission_headerchecks
:
/^Received:.*/ IGNORE
/^X-Originating-IP:.*/ IGNORE
main.cf
Pour autoriser le relai pour les machines clientes identifiées avec un certificat, il faut ajouter les lignes suivantes :
smtpd_tls_fingerprint_digest = sha1
relay_clientcerts = hash:/etc/postfix/relay_clientcerts
Par défaut, le daemon smtp vérifie les empreintes de clef en md5 ; si on veut pouvoir lui donner des empreintes en sha1 (lorsque j'ai écrit cette documentation pour la première fois, sha1 n'était pas encore dépassé, on doit maintenant pouvoir utiliser du sha256), il faut lui préciser. On donne ensuite le fichier contenant ces empreintes.
Si des restrictions sont en place, il faut ajouter le droit pour les machines
authentifiées en TLS de passer ces restrictions. Ceci se fait en ajoutant la
directive permit_tls_clientcerts
dans chacune des restrictions, par exemple
pour smtpd_client_restrictions
:
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
permit_tls_clientcerts
Il faut ensuite récupérer l'empreinte du certificat que l'on a créé sur la
machine distante (le client), et le poser dans le fichier relay_clientcerts
:
F8:A0:CF:6B:57:18:F0:03:EB:C9:AA:72:B1:A8:DB:F6:02:A7:00:EC user.at.machine
Pour récupérer l'empreinte du certificat :
openssl x509 -in /etc/ssl/certs/postfix-monposte.pem -noout -fingerprint
Penser à faire un postmap
sur ce fichier relai, puis redémarrer postfix.