Configurer EXIM4 en smarthost avec support SSL

Ce post explique comment configurer le serveur de mail Exim4 pour relayer les emails vers le serveur SMTP de son FAI. Cette configuration est largement détaillée sur internet, mais la particularité ici est d'utiliser le protocole SSL.

Le système utilisé est une distribution Debian GNU/Linux 7.4 Wheezy et le FAI est ici OVH.

Commençons par installer le serveur Exim4 :

# aptitude install exim4
et configurerons le en mode relais ("smarthost") :
# dpkg-reconfigure exim4-config
en choissant :
  • Envoi par relais ("smarthost") - réception SMTP ou fetchmail
  • Nom du courrier du système : votre_nom_de_domaine.fr
  • Liste des adresses IP où Exim sera en attente de connexions SMTP entrantes : -vide-
  • Autres destinations dont le courrier doit être accepté : votre_nom_de_domaine.fr
  • Domaines à relayer : -vide-
  • Machines à relayer : votre_réseau_local
  • Nom réseau ou adresse IP du système " smarthost " : ssl0.ovh.net::465
  • Faut-il cacher le nom local de courrier dans les courriers sortants ? : Non
  • Faut-il minimiser les requêtes DNS (connexions à la demande) ? : Non
  • Méthode de distribution du courrier local : Format "mbox" dans /var/mail
  • Faut-il séparer la configuration dans plusieurs fichiers ? : Oui
votre_réseau_local est généralement de la forme "192.168.0.0/24".
Notez également la présence des deux doubles points pour définir le port de connexion dans l'adresse du serveur smtp du FAI "ssl0.ovh.net::465". Attention cependant, bien que l'adresse soit celle utilisée par OVH pour les connexions sécurisées SSL, l'utilisation du protocole SSL n'a pas encore été défini dans notre configuration d'Exim4.

A l'issu de cette installation :

  1. les fichiers de configurations sont dans /etc/exim4/. Après toute modification manuelle de ces fichiers, il faudra exécuter les commandes :
    # update-exim4.conf
    # service exim4 restart
    
    pour prendre en compte les modifications.

  2. le fichier /etc/mailname contient votre_nom_de_domaine.fr entré lors de la configuration précédente;

  3. le fichier /etc/aliases contient les redirections de courriers des comptes utilisateurs du système;
    le fichier /etc/email-addresses contient les adresses mails "publiques" à utiliser pour les comptes utilisateurs du système;
    Après toute modification manuelle de ces deux fichiers, il faudra exécuter la commande :
    # newaliases
    
    pour prendre en compte les modifications.

Configurons maintenant le mode SSL.

Pour cela, il faut éditer le fichier /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost et rajouter les lignes en gras :

                                                                                                                                                                                                                                                                              
### transport/30_exim4-config_remote_smtp_smarthost                                                                                                                                                                                                                           
#################################                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                              
# This transport is used for delivering messages over SMTP connections                                                                                                                                                                                                        
# to a smarthost. The local host tries to authenticate.                                                                                                                                                                                                                       
# This transport is used for smarthost and satellite configurations.                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                              
remote_smtp_smarthost:                                                                                                                                                                                                                                                        
  debug_print = "T: remote_smtp_smarthost for $local_part@$domain"                                                                                                                                                                                                            
  driver = smtp                                                                                                                                                                                                                                                               
  protocol = smtps                                                                                                                                                                                                                                                            
  hosts_require_auth = ssl0.ovh.net                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                        
  hosts_try_auth = <; ${if exists{CONFDIR/passwd.client} \                                                                                                                                                                                                                    
        {\                                                                                                                                                                                                                                                                    
        ${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$host_address}}\                                                                                                                                                                                                   
        }\                                                                                                                                                                                                                                                                    
        {} \                                                                                                                                                                                                                                                                  
      }                                                                                                                                                                                                                                                                       
.ifdef REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
  hosts_avoid_tls = REMOTE_SMTP_SMARTHOST_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
  headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
  return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_DATA
  helo_data=REMOTE_SMTP_HELO_DATA
.endif
.ifdef TLS_DH_MIN_BITS
tls_dh_min_bits = TLS_DH_MIN_BITS
.endif
Les lignes à rajouter sont donc :
protocol = smtps
hosts_require_auth = ssl0.ovh.net                                                                                                                                                                                 
et éditons maintenant le fichier /etc/exim4/passwd.client pour définir l'utilisateur et le mot-de-passe à utiliser pour la connexion à OVH :
# password file used when the local exim is authenticating to a remote
# host as a client.
#
# see exim4_passwd_client(5) for more documentation
#
# Example:
### target.mail.server.example:login:password
ssl0.ovh.net:votre_utilisateur@votre_nom_de_domaine.fr:votre_mot_de_passe
votre_utilisateur@votre_nom_de_domaine.fr doit être défini dans l'interface de gestion de votre FAI, ici OVH.

Puis comme expliqué plus haut, il faut utiliser successivement les commandes :

# update-exim4.conf
# service exim4 restart
pour prendre en compte les modifications.

Maintenant vous pourrez envoyer des mails vers l'extérieur en passant par votre serveur Exim4.