mardi 26 septembre 2006.
Ce tutoriel donne une configuration pas à pas de Postfix, afin d’obtenir un serveur SMTP sécurisé TLS, un client SMTP sécurisé TLS, ainsi qu’un e authentification SASL.
Ce tutoriel est complémentaire du tutoriel Configurer Postfix amavisd-new clamav spamassassin sur Gentoo.
Il necessite un serveur Postfix qui émet et reçois le courrier local et distant, la gestion du Spam étant évidemment optionnelle
.Consultez la doc officielle pour plus de détails.
Ce tutoriel ne saurait être un cour sur ces technologies, ce n’est qu’une méthode pas à pas adaptées à la distribution Gentoo
.
Installation des logiciels
Installation de ’ OpenSSL ’ : (Normalement cela doit être déjà fait)
# echo 'dev-libs/openssl sse2 zlib' >> /etc/portage/package.use
# emerge openssl
La variable USE=sse2 suppose que votre architecture est Intel X86...
Installation de ’ Cyrus SASL ’ :
# echo 'dev-libs/cyrus-sasl crypt pam ssl urandom' >> /etc/portage/package.use
# emerge cyrus-sasl
Bien évidemment cette configuration est le minimum requis et vos besoin peuvent nécessiter d’autres paramètres USE.
Il faut recompiler ’ Postfix ’ avec tous les supports :
# echo 'mail-mta/postfix pam sasl ssl' >> /etc/portage/package.use
# emerge postfix
Comme pour cyrus-sasl c’est un minimum !
Créer son propre certificat serveur auto signé SSL
Maîtrisez les commandes OpenSSL de création de certificat n’est pas aisé, du fait du nombre de paramètres, heureusement OpenSSL fournis avec son logiciels des scripts de configuration automatique.
Cependant ils ont l’inconvénient de masquer la procédure exacte la rendant encore plus obscure.
La méthode détaillé ferait l’objet d’un tutoriel complet à elle toute seule, j’ai donc fait le compromis suivant : la création de l’ AC (Autorité de Certification) sera faite avec le script OpenSSL , mais la clé serveur, la DSC (Demande de Signature de Certificat) et le certificat final seront créés avec la commande OpenSSL traditionnelle.
Préparations
| /etc/ssl/openssl.cnf : |
# Cherchez la ligne suivante dans [ CA_default ] :
dir = ./demoCA
# Remplacez la par :
dir = ./monAC
# puis la ligne :
default_days = 365
# à remplacer par :
default_days = 3650 # A moins que vous vouliez changer de CA tous les ans... (les négociants en matériaux fissibles m'auront compris ;p )
# Dans la section [ req ], identifiez :
default_bits = 1024
# et remplacez par :
default_bits = 2048 # La puissance des ordinateurs ne cesse de croître, soyons paranoiaques...
# Section [ req_distinguished_name ], identifiez :
countryName_default = AU
stateOrProvinceName_default = Some-State #optionel
0.organizationName_default = Internet Widgits Pty Ltd #optionel
# et replacez par (évitez les accents) :
countryName_default = FR # Ou votre pays
stateOrProvinceName_default = (Votre Region)
0.organizationName_default = (votre organisation) |
| /etc/ssl/misc/CA.sh : |
# Cherchez la ligne :
CATOP=./demoCA
# Remplacez la par :
CATOP=./monAC |
La modification de ces fichiers est surtout destiné à la convivialité des futures configurations, et est entièrement optionelle.
Création de l’Autorité de Certification
Allez dans le répertoire de votre choix et tapez la commande suivante et répondez aux questions : (pas d’accents)
# /etc/ssl/misc/CA.sh -newca
CA certificate filename (or enter to create) ==> Tapez Entrée seulement.
Making CA certificate ...
Generating a 2048 bit RSA private key
......................+++
...........................................................+++
writing new private key to './monAC/private/./cakey.pem' ==> La clé privée du CA est créé.
Enter PEM pass phrase: ==> Entrez la phrase de passe .
Verifying - Enter PEM pass phrase: ==> à nouveau.
----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [FR]: ==> Si Ok juste entrée.
State or Province Name (full name) [(Votre region)]: ==> Pareil (optionnel mettez un "." pour laissez vide)
Locality Name (eg, city) []:Trabazouille les oies !!
Organization Name (eg, company) [Votre organisation]: ==> Entrée si OK (optionnel)
Organizational Unit Name (eg, section) []:. ==> Mettez un "."
Common Name (eg, YOUR name) []:machine.domaine.ext ==> Si vous voulez faire un CA pour serveur il est IMPERATIF de mettre le nom complêt de la machine et de vous en souvenir car il faudra utilisez le MEME NOM pour le certificat signé.
Email Address []:votremail@votrefai.qqechose ==> Votre Email.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ==> Appuyez sur Entrée
An optional company name []: ==> IDEM.
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for ./niqozportableCA/private/./cakey.pem: ==> Entrez votre phrase depasse de tout à l'heure.
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 0 (0x0)
Validity
Not Before: Sep 22 08:50:23 2006 GMT
Not After : Sep 21 08:50:23 2009 GMT
Subject:
countryName = FR
stateOrProvinceName = Votre Region
organizationName = Votre Org
commonName = machine.domaine.ext
emailAddress = votremail@votrefai.qqechose
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
26:C8:E4:60:14:01:BB:B3:81:A5:F6:55:34:FC:90:20:5F:58:08:91
X509v3 Authority Key Identifier:
keyid:20:C3:E0:66:14:02:4F:B7:D1:A3:F6:55:34:FF:90:20:2A:58:08:91
Certificate is to be certified until Sep 21 08:50:23 2009 GMT (1095 days)
Write out database with 1 new entries
Data Base Updated
Si tous c’est bien passé vous disposez d’un répertoire “monAC” avec le contenu suivant :# ls -Rl monAC/
monAC/:
total 28
-rw-r--r-- 1 root root 4698 sep 22 10:50 cacert.pem ==> Votre Certificat d'AC.
-rw-r--r-- 1 root root 1098 sep 22 10:50 careq.pem ==> La DSC de L'AC (sans intêrets)
drwxr-xr-x 2 root root 48 sep 22 10:49 certs
drwxr-xr-x 2 root root 48 sep 22 10:49 crl
-rw-r--r-- 1 root root 140 sep 22 10:50 index.txt
-rw-r--r-- 1 root root 21 sep 22 10:50 index.txt.attr
-rw-r--r-- 1 root root 0 sep 22 10:49 index.txt.old
drwxr-xr-x 2 root root 72 sep 22 10:50 newcerts
drwxr-xr-x 2 root root 80 sep 22 10:49 private
-rw-r--r-- 1 root root 3 sep 22 10:50 serial
-rw-r--r-- 1 root root 3 sep 22 10:49 serial.old
monAC/certs:
total 0
monAC/crl:
total 0
monAC/newcerts:
total 8
-rw-r--r-- 1 root root 4698 sep 22 10:50 00.pem ==> Une Copie de cacert.pem (?)
monAC/private:
total 4
-rw-r--r-- 1 root root 1743 sep 22 10:50 cakey.pem ==> La clé privé de l'AC.
Conservez votre répertoire d’ AC à l’emplacement de votre choix, par exemple :
# mv monAC /etc/ssl/
Vous voila donc munis d’une AC entièrement fonctionnelle.
Elle se compose :- D’une clé privé :
- D’un certificat ou clé publique :
Avec cette AC vous allez signer vos futurs certificats.
Création du jeu clé + certificat pour le serveur Postfix
Création de la clé privée serveur
IMPORTANT :
Que ce soit pour le serveur SMTPD Postfix, pour le serveur local LMTPD "local" ou pour le serveur IMAPD Cyrus-IMAP, il faut toujours renseigner ces trois questions :- indiquez quel fichier contient la clef PRIVÉE RSA NON CHIFFRÉE au format .pem du serveur SMTP / LMTP / IMAP .
- indiquez quel fichier contient la clef PUBLIQUE RSA NON CHIFFRÉE (certificat serveur signé) au format .pem du serveur SMTP / LMTP / IMAP
- indiquez quel fichier contient le certificat de l’ AC .
Si tous les services ( IMAP , SMTP , LMTP ) tournent sur la même machine, alors un seul jeu de clefs publique/privée de serveur ( serveur au sens machine et non pas service !) est suffisant.
Création d’une clé privée non chiffrée :
# cd /etc/ssl/
# openssl genrsa -out monAC/private/serveur_key.pem 2048Generating RSA private key, 2048 bit long modulus
.............................+++
.....+++
e is 65537 (0x10001)
Le fichier serveur_key.pem est créé dans monAC/private/, c’est votre clé secrète.
Création de la DSC
Tapez la commande suivante et répondez aux questions exactement comme pour le CA .
# openssl req -new -nodes -key monAC/private/serveur_key.pem -out monAC/newcerts/serveur_DSC.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [(Votre Region)]:
Locality Name (eg, city) []: Trabazouille les oies !!
Organization Name (eg, company) [(Votre organisation)]:
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:machine.domaine.ext ==> TRES IMPORTANT DOIT ETRE IDENTIQUE AU CA..CAD LE NOM FQDN DE VOTRE MACHINE !!!
Email Address []:votreemail@votrefai.qquechose
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Une demande de signature de certificat ( DSC ) nommée serveur_DSC.pem est créé dans monAC/newcerts/ .
Il suffit ensuite de signer ce certificat afin d’obtenir le certificat serveur.
Création du certificat final signé
Signons la DSC avec la commande suivante
# openssl ca -in monAC/newcerts/serveur_DSC.pem -out monAC/certs/serveur_CRT.pem -keyfile monAC/private/cackey.pem -cert monAC/cacert.pem -days 3650
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for monAC/private/cakey.pem: ==> Entrez votre phrase de passe.
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 22 10:07:15 2006 GMT
Not After : Sep 19 10:07:15 2016 GMT
Subject:
countryName = FR
stateOrProvinceName = (Votre region)
organizationName = (Votre Organisation)
commonName = niqozportable.homelinux.org
emailAddress = webmaster@niqozweb.web-hebergeur.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D0:11:2C:17:30:2D:CF:38:B6:EB:66:96:FC:EA:D5:FB:D6:60:37:E7
X509v3 Authority Key Identifier:
keyid:20:C8:E0:60:14:01:4F:B3:81:A3:F6:55:34:FC:90:20:2A:58:08:91
Certificate is to be certified until Sep 19 10:07:15 2016 GMT (3650 days)
Sign the certificate? [y/n]:y ==> y
1 out of 1 certificate requests certified, commit? [y/n]y ==> y
Write out database with 1 new entries
Data Base Updated
Et voila
, Vous disposez d’un jeu de clé et d’une AC , pour sécurisez vos serveurs.
Détail des fichiers :
- La clé secrète se trouve dans :
- monAC/private/serveur_key.pem
- La clé publique ou certificat signé par l’AC :
- monAC/certs/serveur_CRT.pem
- Le certificat de l’AC :
- La clé privé de l’AC :
Les 3 premiers fichiers vous serons demandés par Postfix lors de la configuration TLS .
Vous pouvez donc les copier dans son répertoire :
# mkdir /etc/postfix/ssl
# cd /etc/ssl/monAC
# cp {private/serveur_key.pem,certs/serveur_CRT.pem,cacert.pem} /etc/postfix/ssl/
Mieux vaux de bonnes permissions :# cd /etc/postfix/ssl
# chown root:root *
# chmod 0400 serveur_key.pem
# chmod 0440 serveur_CRT.pem cacert.pem
Il n’est pas necessaire que les fichiers appartiennent à postfix car ils seronts lus avec le privilège root au démarrage du programme.
Ce tutoriel est un "condensé" des différentes documentations sur le sujet, il s’avère donc non exaustif.
Voir
la documentation officielle pour plus de détails.