Modifications entre les versions 4 et 11 (s'étendant sur 7 versions)
Version 4 à la date du 2007-02-27 17:54:20
Taille: 2568
Commentaire: précisons les auteurs...
Version 11 à la date du 2012-08-23 08:00:33
Taille: 5435
Éditeur: TruongTungLam
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Cette page présente une façon de configurer [:Postfix:] afin d'y activer le chiffrement (et accessoirement l'authentification) des connexions via TLS. Cette page présente une façon de configurer [[Postfix]] afin d'y activer le chiffrement (et accessoirement l'authentification) des connexions via TLS.
Ligne 3: Ligne 3:
Note : Je (JeanChristopheAndré) présente ici l'installation sur une Debian ''Sarge'' ou ''Etch''. == A quoi ça sert ? ==
Ligne 5: Ligne 5:
== Installation des outils requis == Le chiffrement des connexions SMTP (échange de message) a plusieurs utilités :
 * il permet de transmettre des mails sans qu'un intru puisse les ''sniffer'' sur le réseau ;
 * il permet d'activer des systèmes d'authentification en toute sécurité (même si les mots de passe sont en clair, le canal est crypté donc on est tranquille) afin que des utilisateurs, même extérieurs au réseau local, puissent profiter des possibilités du serveur ;
 * il permet à deux serveurs de se reconnaître l'un l'autre, ce qui peut être utile par exemple pour des serveurs en IP dynamiques
Ligne 7: Ligne 10:
La version de Postfix livrée avec ''Sarge'' nécessite d'installer un paquet supplémentaire :
{{{
$ sudo aptitude install postfix-tls
}}}
En revanche avec ''Etch'' intègre TLS de base dans le paquet `postfix`.
== Création d'une clé privée et d'un certificat auto-signé pour le serveur ==
Ligne 13: Ligne 12:
On aura aussi besoin des outils SSL pour créer un certificat pour le serveur :
{{{
$ sudo aptitude install openssl
Puisque nous allons utiliser un système basé sur SSL (TLS 1.0 ou SSL 3.0), il faut créer une clé privée et un certificat (clé publique signée). Nous n'expliquerons pas ici les détails, le sujet dépasse le cadre de cette documentation. Voici donc la façon rapide pour produire le fichier `smtpd.pem` (format PEM) qui contiendra la clé et le certificat :

 {{{
$ cd ~
$ openssl req -new -x509 -nodes -days 1825 -text -out smtpd.pem -keyout smtpd.pem
(...)
Country Name (2 letter code) [AU]:SN
State or Province Name (full name) [Some-State]:Region-de-Dakar
Locality Name (eg, city) []:Dakar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Agence universitaire de la Francophonie
Organizational Unit Name (eg, section) []:BAO/CNFD
Common Name (eg, YOUR name) []:smtp.sn.auf.org ### ATTENTION A METTRE LE NOM EXACT DU SERVEUR ICI
Email Address []:ressources-informatiques@auf.org
Ligne 18: Ligne 27:
== Création d'un certificat pour le serveur == Note : le fichier `smtpd.pem` produit contient à la fois la clé privée (non protégée par un mot de passe) et le certificat public (auto-signé).
Ligne 20: Ligne 29:
La création correcte d'un certificat n'étant pas le sujet de cette page, je vous indique simplement une façon d'en produire un rapidement.
{{{
$ sudo mkdir /etc/postfix/ssl
$ cd /etc/postfix/ssl
$ sudo openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 365
$ sudo chmod 0600 smtpd.pem
On place le fichier où il faut, en le protégeant :
 {{{
# mkdir /etc/postfix/ssl
# cd /etc/postfix/ssl
# mv ~/smtpd.pem .
# chmod 0600 smtpd.pem <--- très important car il y a une clé privée non protégée dans ce fichier
Ligne 30: Ligne 39:
On pourra utiliser l'extrait de configuration suivant dans `/etc/postfix/main.cf` :
{{{
#===== TLS
tls_random_source = dev:/dev/urandom
#----- connexion entrante
smtpd_tls_loglevel = 2
smtpd_use_tls = yes
#smtpd_enforce_tls = yes
# n'offrir la possibilité de s'authentifier *que* si on est sécurisé via TLS
smtpd_tls_auth_only = yes
smtpd_tls_ask_ccert = yes
#smtpd_tls_req_ccert = yes
 1. Pour les connexions entrantes, voici les lignes à placer dans `/etc/postfix/main.cf` :
 {{{
# extrait de /etc/postfix/main.cf

# NB sur un postfix antérieur à 2.3, c'est smtpd_use_tls = yes
Ligne 44: Ligne 46:
#smtpd_tls_CAfile = $config_directory/ssl/CA.pem # on prépare l'avenir : les authentification ne seront possibles
# uniquement si le chiffrage TLS est actif sur la communication :
smtpd_tls_auth_only = yes
}}}

 {{{
# extrait de /etc/postfix/master.cf
submission inet n - - - - smtpd
  -o smtpd_tls_security_level=encrypt
}}}


 2. Pour les connexion sortantes (quand le serveur envoie ces mails à un autre serveur qui connait TLS) :
 {{{
# extrait de /etc/postfix/main.cf
# on active TLS pour les connexions sortantes
smtp_tls_security_level = may
# NB sur un postfix antérieur à 2.3, c'est smtp_use_tls = yes
smtp_tls_key_file = $config_directory/ssl/smtpd.pem
smtp_tls_cert_file = $config_directory/ssl/smtpd.pem
smtp_tls_note_starttls_offer = yes
smtp_tls_enforce_peername = no
# ne s'authentifier *que* si on est sécurisé via TLS
smtp_tls_auth_only = yes
}}}

 3. Quelques autres options qui peuvent être utiles (voir `man 5 postconf` pour les détails) :
 {{{
# quelques options possibles (voir man 5 postconf)
# optimisation vias des cache de session TLS :
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# demander le certificat au client qui se connecte
smtpd_tls_ask_ccert = yes
# logs
smtp_tls_loglevel = 2
smtpd_tls_loglevel = 2
# divers ...
Ligne 47: Ligne 86:
#----- connexion sortante
smtp_tls_loglevel = 2
smtp_use_tls = yes
#smtp_enforce_tls = yes
smtp_tls_note_starttls_offer = yes
# ne s'authentifier *que* si on est sécurisé via TLS
smtp_tls_auth_only = yes
smtp_tls_enforce_peername = no
smtp_tls_key_file = $config_directory/ssl/smtpd.pem
smtp_tls_cert_file = $config_directory/ssl/smtpd.pem
#smtp_tls_CAfile = $config_directory/ssl/CA.pem
Ligne 61: Ligne 89:
{{{
$ sudo invoke-rc.d postfix restart
 {{{
# service postfix restart
Ligne 65: Ligne 93:
== Documentations ==
 * [http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/doc/ A TLS extension for POSTFIX]
== Voir aussi ==
 * `man 5 postconf` (explications des options)
 * la doc officielle de Postfix sur le sujet : http://www.postfix.org/TLS_REA
DME.html
 * [[http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/doc/|A TLS extension for POSTFIX]]
Ligne 68: Ligne 98:
== Discussions ==
 ThomasNoël : Tu n'actives par le `smtps` dans `/etc/postfix/master.cf` ?
  JeanChristopheAndré : Ce n'est pas obligatoire vu que cette configuration propose d'utiliser TLS plutôt que SSL.
= Annexes =

== Autorisation de relais via certificat ==

Avec le chiffrement TLS des connexions, vous obtenez également la possibilité d'identifier les machines se connectant (via leur certificat) et donc d'accepter de relayer le trafic de certaines d'entre-elles. C'est particulièrement utile dans le cadre de serveurs de messagerie en IP dynamiques.

Cela se fait par l'intermédiaire de l'option `relay_clientcerts` qui liste les empreintes de certificats des machines autorisées à être relayées.

Voici un exemple de configuration :
{{{
# (extraits de /etc/postfix/main.cf)
# demander le certificat de la machine se connectant
smtpd_tls_ask_ccert = yes
# liste des empruntes de certificat des machines à relayer
relay_clientcerts = hash:$config_directory/relay_clientcerts
# autoriser (entre autres) le relais
smtpd_recipient_restrictions = ..., permit_tls_clientcerts, ...
}}}

Voici un exemple de fichier `relay_clientcerts` :
{{{
E1:3C:1A:C7:53:3F:B8:CB:1E:C2:99:F6:6B:88:84:C9 antenne.danang.vn.refer.org
}}}

Cette page présente une façon de configurer Postfix afin d'y activer le chiffrement (et accessoirement l'authentification) des connexions via TLS.

A quoi ça sert ?

Le chiffrement des connexions SMTP (échange de message) a plusieurs utilités :

  • il permet de transmettre des mails sans qu'un intru puisse les sniffer sur le réseau ;

  • il permet d'activer des systèmes d'authentification en toute sécurité (même si les mots de passe sont en clair, le canal est crypté donc on est tranquille) afin que des utilisateurs, même extérieurs au réseau local, puissent profiter des possibilités du serveur ;
  • il permet à deux serveurs de se reconnaître l'un l'autre, ce qui peut être utile par exemple pour des serveurs en IP dynamiques

Création d'une clé privée et d'un certificat auto-signé pour le serveur

Puisque nous allons utiliser un système basé sur SSL (TLS 1.0 ou SSL 3.0), il faut créer une clé privée et un certificat (clé publique signée). Nous n'expliquerons pas ici les détails, le sujet dépasse le cadre de cette documentation. Voici donc la façon rapide pour produire le fichier smtpd.pem (format PEM) qui contiendra la clé et le certificat :

  • $ cd ~
    $ openssl req -new -x509 -nodes -days 1825 -text -out smtpd.pem -keyout smtpd.pem
    (...)
    Country Name (2 letter code) [AU]:SN
    State or Province Name (full name) [Some-State]:Region-de-Dakar
    Locality Name (eg, city) []:Dakar
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Agence universitaire de la Francophonie
    Organizational Unit Name (eg, section) []:BAO/CNFD                 
    Common Name (eg, YOUR name) []:smtp.sn.auf.org   ### ATTENTION A METTRE LE NOM EXACT DU SERVEUR ICI
    Email Address []:ressources-informatiques@auf.org

Note : le fichier smtpd.pem produit contient à la fois la clé privée (non protégée par un mot de passe) et le certificat public (auto-signé).

On place le fichier où il faut, en le protégeant :

  • # mkdir /etc/postfix/ssl
    # cd /etc/postfix/ssl
    # mv ~/smtpd.pem .
    # chmod 0600 smtpd.pem  <--- très important car il y a une clé privée non protégée dans ce fichier

Configuration de Postfix pour utiliser TLS

  1. Pour les connexions entrantes, voici les lignes à placer dans /etc/postfix/main.cf :

    # extrait de /etc/postfix/main.cf
    
    # NB sur un postfix antérieur à 2.3, c'est smtpd_use_tls = yes 
    smtpd_tls_key_file = $config_directory/ssl/smtpd.pem
    smtpd_tls_cert_file = $config_directory/ssl/smtpd.pem
    # on prépare l'avenir : les authentification ne seront possibles
    # uniquement si le chiffrage TLS est actif sur la communication :
    smtpd_tls_auth_only = yes
    # extrait de /etc/postfix/master.cf
    submission inet n       -       -       -       -       smtpd
      -o smtpd_tls_security_level=encrypt
  2. Pour les connexion sortantes (quand le serveur envoie ces mails à un autre serveur qui connait TLS) :
    # extrait de /etc/postfix/main.cf
    # on active TLS pour les connexions sortantes
    smtp_tls_security_level = may
    # NB sur un postfix antérieur à 2.3, c'est smtp_use_tls = yes 
    smtp_tls_key_file = $config_directory/ssl/smtpd.pem
    smtp_tls_cert_file = $config_directory/ssl/smtpd.pem
    smtp_tls_note_starttls_offer = yes
    smtp_tls_enforce_peername = no
    # ne s'authentifier *que* si on est sécurisé via TLS
    smtp_tls_auth_only = yes
  3. Quelques autres options qui peuvent être utiles (voir man 5 postconf pour les détails) :

    # quelques options possibles (voir man 5 postconf)
    # optimisation vias des cache de session TLS :
    smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
    # demander le certificat au client qui se connecte
    smtpd_tls_ask_ccert = yes
    # logs
    smtp_tls_loglevel = 2
    smtpd_tls_loglevel = 2
    # divers ... 
    smtpd_tls_received_header = yes
    smtpd_tls_session_cache_timeout = 3600s

Il faut bien évidement penser à redémarrer (et non recharger) Postfix :

  • # service postfix restart

Voir aussi

Annexes

Autorisation de relais via certificat

Avec le chiffrement TLS des connexions, vous obtenez également la possibilité d'identifier les machines se connectant (via leur certificat) et donc d'accepter de relayer le trafic de certaines d'entre-elles. C'est particulièrement utile dans le cadre de serveurs de messagerie en IP dynamiques.

Cela se fait par l'intermédiaire de l'option relay_clientcerts qui liste les empreintes de certificats des machines autorisées à être relayées.

Voici un exemple de configuration :

# (extraits de /etc/postfix/main.cf)
# demander le certificat de la machine se connectant
smtpd_tls_ask_ccert = yes
# liste des empruntes de certificat des machines à relayer
relay_clientcerts = hash:$config_directory/relay_clientcerts
# autoriser (entre autres) le relais
smtpd_recipient_restrictions = ..., permit_tls_clientcerts, ...

Voici un exemple de fichier relay_clientcerts :

E1:3C:1A:C7:53:3F:B8:CB:1E:C2:99:F6:6B:88:84:C9 antenne.danang.vn.refer.org

Postfix/Chiffrement (dernière édition le 2012-08-23 08:00:33 par TruongTungLam)