Ajouter le SMTP de Gmail en SmartHost avec Postfix sous Ubuntu Server

Voici un petit tuto permettant d’utiliser le smtp de gmail en smarthost (relay) avec le serveur de messagerie Postfix sur la distribution Ubuntu Server, ici une 9.10.

Bien sur, vous devez avoir au préalable votre serveur Postfix d’installé.

Il vous faut générer un certificat SSL pour votre serveur

Aller dans votre $HOME

root@votrehostname:~#cd ~

Puis générer le nouveau certificat :

Création du fichier « Certificate Authority »

$ /usr/lib/ssl/misc/CA.pl -newca
CA certificate filename (or enter to create)

Making CA certificate ...
Generating a 1024 bit RSA private key
........................................++++++
.............................................................................................++++++
writing new private key to './demoCA/private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [AU]:FR
State or Province Name (full name) [Some-State]:Nord
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Votre Organisation
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:votrehostname
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
c4:22:ea:51:7c:ba:68:9b
Validity
Not Before: Apr 12 09:52:02 2010 GMT
Not After : Apr 11 09:52:02 2013 GMT
Subject:
countryName               = FR
stateOrProvinceName       = Nord
organizationName          = Votre Organisation
commonName                = votrehostname
emailAddress              = [email protected]
X509v3 extensions:
X509v3 Subject Key Identifier:
72:94:AE:2C:47:9E:A2:6E:28:6B:1A:68:51:E5:5A:3D:93:86:8C:95
X509v3 Authority Key Identifier:
keyid:72:94:AE:2C:47:9E:A2:6E:28:6B:1A:68:51:E5:5A:3D:93:86:8C:95
DirName:/C=FR/ST=Nord/O=Votre Organisation/CN=votrehostname/[email protected]
serial:C4:22:EA:51:7C:BA:68:9B

X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Apr 11 09:52:02 2013 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated

Générer le certificat Serveur :

root@votrehostname:~# openssl req -new -nodes -subj '/CN=votrehostname/O=Votre Organisation/C=FR/ST=Nord/[email protected]' -keyout FOO-key.pem -out FOO-req.pem -days 3650
Generating a 1024 bit RSA private key
................................++++++
.++++++
writing new private key to 'FOO-key.pem'
-----

Vous constaterez bien sur que j’utilise les valeurs données plus haut.

Signer le certificat :

root@votrehostname:~# openssl ca -out FOO-cert.pem -infiles FOO-req.pem
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
c4:22:ea:51:7c:ba:68:9c
Validity
Not Before: Apr 12 09:57:23 2010 GMT
Not After : Apr 12 09:57:23 2011 GMT
Subject:
countryName               = FR
stateOrProvinceName       = Nord
organizationName          = Votre Organisation
commonName                = votrehostname
emailAddress              = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D8:65:D7:DA:68:6C:34:00:14:63:98:B0:BD:C9:9D:67:A0:04:74:2E
X509v3 Authority Key Identifier:
keyid:72:94:AE:2C:47:9E:A2:6E:28:6B:1A:68:51:E5:5A:3D:93:86:8C:95

Certificate is to be certified until Apr 12 09:57:23 2011 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Copier les certificats dans votre dossier postfix :

root@votrehostname:~# mkdir /etc/postfix/certif
root@votrehostname:~# cp demoCA/cacert.pem FOO-key.pem FOO-cert.pem /etc/postfix/certif
root@votrehostname:~# chmod 644 /etc/postfix/certif/FOO-cert.pem /etc/postfix/certif/cacert.pem
root@votrehostname:~# chmod 400 /etc/postfix/certif/FOO-key.pem

Gmail utilise un certificat Thawte Premium Server CA.

Il vous faut l’ajouter dans le fichier :

root@votrehostname:~# cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem >> /etc/postfix/certif/cacert.pem

Si vous ne faites pas ça, vous aurez le message suivant :

Server certificate not trusted

Attention il semblerait que Gmail a changé de certificat, je m’en suis rendu compte le 27 Mai 2010.

Il n’utilise plus un certicat Thawte mais Equifax

J’ai rencontré ce message d’erreur :

May 23 06:53:21 hostname postfix/smtp[20658]: certificate verification failed for smtp.gmail.com[209.85.229.109]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Pour palier à ce problème, il suffit d’ajouter le bon certificat :

root@votrehostname:~# cat /etc/ssl/certs/Equifax_Secure_CA.pem >> /etc/postfix/cacert.pem

Configuration du serveur Postfix :

Pour cela, il faut modifier le fichier /etc/postfix/main.cf

## TLS Settings
#
smtp_tls_CAfile = /etc/postfix/certif/cacert.pem
smtp_tls_cert_file = /etc/postfix/certif/FOO-cert.pem
smtp_tls_key_file = /etc/postfix/certif/FOO-key.pem
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_use_tls = yes
smtpd_tls_CAfile = /etc/postfix/certif/cacert.pem
smtpd_tls_cert_file = /etc/postfix/certif/FOO-cert.pem
smtpd_tls_key_file = /etc/postfix/certif/FOO-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database =  btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
#
##  SASL Settings
# This is going in to THIS server
smtpd_sasl_auth_enable = no
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_local_domain = $myhostname
smtp_sasl_security_options = noanonymous
#smtp_sasl_security_options =
smtp_sasl_tls_security_options = noanonymous
smtpd_sasl_application_name = smtpd

relayhost = [smtp.gmail.com]:587
transport_maps = hash:/etc/postfix/transport

Ajouter dans le fichier /etc/postfix/transport

gmail.com               smtp:[smtp.gmail.com]:587

Ajouter dans le fichier /etc/postfix/sasl_passwd

 [smtp.gmail.com]:587 [email protected]:password

Puis :

postmap sasl_passwd
postmap transport
/etc/init.d/postfix restart

Voilà, votre serveur est configuré

Nettoyer la création de certificat :

root@votrehostname:~# cd ~
rm FOO-req.pem FOO-cert.pem FOO-key.pem && rm -r demoCA/

Tester l’envoie de mail :

J’ai pour habitude de tester l’envoie de mail via telnet :

root@votrehostname:/etc/postfix# telnet localhost 25
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 hostname ESMTP Postfix (Ubuntu)
EHLO [email protected]
250-hostname
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:[email protected]
250 2.1.0 Ok
RCPT TO:[email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject:test

test envoi de mail

.
250 2.0.0 Ok: queued as 9D381812
quit
221 2.0.0 Bye
Connection closed by foreign host.

Ce qui est en gras est a renseigner par vos soins bien sur 😉

Pour vérifier, faite un petit

mailq

ou

postqueue -p

Et vérifier dans le fichier /var/log/mail.log que vous n’avez pas d’erreur.

A noter : La flèche utilisée pour illustrer cet article est sous licence libre, mais je ne sais pas laquelle et a été trouvée sur icones.pro

Author: Pierre-Yves Dubreucq

Passioné par les logiciels libres depuis 2001, je suis VP Bare Metal (Dedibox) chez Scaleway. Je tiens ce blog depuis 13 ans avec beaucoup moins d'assiduité malheureusement qu'à ses débuts, mais bon, le temps est une denrée rare.

Share This Post On

19 Comments

  1. Mais… euh… concrètement… Ça sert à quoi ?

    Post a Reply
  2. Bonjour @Jean-Cédric,
    Ça sert juste à utiliser le smtp de gmail, plutôt que de configurer complétement un serveur de messagerie, mais via son propre serveur.
    Bonne journée

    Post a Reply
    • comment on fait pour relier zabbix ,et gmail pour l’envoie de mail

      Post a Reply
      • Bonjour @tsiouh,
        A mon avis, il doit être écrit dans la doc de Zabbix comment utiliser un serveur SMTP pour l’envoi d’email, tu met ton serveur postfix. Et à partir de là, tu dois pouvoir utiliser cet article pour utiliser gmail en tant que relay.
        Bonne journée

        Post a Reply
  3. Sympathique pour que google ait encore plus de données sur la vie privée de chacun…
    DONNONS LEURS NOS DONNÉES !

    Post a Reply
  4. Canon, merci. Ca fonctionnne très bien avec GoogleApps également. Comme ça Google s’occupe des spams, sécurité et autres bricoles et nous on se retrouve avec une messagerie client d’enfer en SSH et notre propre serveur de emails sans ouvrir le port 25. Que du bonheur.

    Post a Reply
  5. Bien le bonjour @Jean-Luc,
    En effet, c’est assez pratique 😉
    @N. Je comprends ton point de vue, mais des gens peuvent être intéressés malgré tout par ce besoin 😉
    Bonne journée à tous et merci pour vos retours

    Post a Reply
  6. Salut PY 🙂 c’est rico le pote de jerem 😉

    Mr N. à malheureusement raison … :/, c’est un sujet un peu vaste pour en parler ici, mais très important : il est vrai qu’Internet est actuellement en pleine mutation et pas vraiment dans le bon sens (ca se passe niveau réseau surtout) … Et pour contrer ça … y a pas 36 solutions … DÉCENTRALISER au max, en gros le fait que l’on soit a 97% d’internautes complètement passifs vis à vis du net le tue tout simplement :/ car donne beaucoup de trop de pouvoir aux FAIs, les gros mechants pas beaux …
    Installer un postfix a la maison c’est une super bonne idée mais ne plus passer par du service en ligne (quel qu’il soit) et utiliser son propre SMTP c’est encore vachement mieux 🙂

    PS: Super site Pierro, plein d’info sympa a+ On aura ptetre l’occaz de reparler de tous ça devant une bonne bière duchnord 😉 ++

    Post a Reply
  7. Salut @Rico 😉
    En effet, je suis pour l’install se son propre postfix, mais dès fois le besoin n’est pas suffisant pour passer du temps à le mettre en place 😉
    Là j’avais juste besoin de faire du push mail avec un compte google aps 😉
    Mais en effet le sujet est très très vaste 😉 Et on pourrait en parler pendant des heures 😉
    J’espère en effet avoir l’occaz de boire une petite bière ensemble 😉
    Bonne journée

    Post a Reply
  8. Merci pour cela! (Quoi que je ne sais pas si cela fonctionne encore 😉
    Dans ta section « Copier les certificats dans votre dossier postfix : » tu as une petite faute de frappe…

    root@votrehostname:~# mkdir /etc/postfix/certif
    root@votrehostname:~# cp demoCA/cacert.pem FOO-key.pem FOO-cert.pem /etc/postfix/certif
    root@votrehostname:~# chmod 644 /etc/postfix/certif/FOO-cert.pem /etc/postfix/certif/cacert.pem
    root@votrehostname:~# chmod 400 /etc/postfix/certif/FOO-key.pem

    Post a Reply
  9. Salut @Alexandre 😉
    Merci beaucoup, en effet, c’était un oubli 😉
    Je pense que ce tuto fonctionne encore, il n’y a pas trop de raison 😉
    Bonne journée
    CiaO ++

    Post a Reply
  10. Bonjour,

    J’ai suivi votre tuto que je trouve très bien foutu … si si sérieux !
    Mais j’ai un p’tit souci tout semble bien se passer mais dans ma log j’ai : connect to alt4.gmail-smtp-in.l.google.com[74.125.93.27]:25: No route to host

    Auriez vous une idée du pourquoi ?
    Merci d’avance 😉

    Post a Reply
  11. Salut  @Nicolas,
    Je vais poser une question bête, mais êtes vous sur d’avoir accès à internet depuis l’hôte en question ?
    Arrivez-vous à pinguer l’hôte 74.125.93.27 ?
    Si oui, arrivez-vous à joindre le port tcp/25 ?
    Pour cela j’utilise l’outils :
    tcptraceroute 74.125.93.27 25
    N’hésitez pas si vous avez une question…
    Bonne soirée
    CiaO ++

    Post a Reply
    • g cette erreur:connect to smtp.gmail.com[74.125.115.109]:587: Connection timed out et j’arrive pa à pinguer 74.125.115.109.je travail sur une machine virtuelle w connecté derrière un proxy

      Post a Reply
  12. Merci de votre réponse.

    Accès à internet : oui pas de souci !
    Ping de l’IP de google : Pas de souci non plus !
    Le port 25 : J’ai testé avec un telnet 74.125.93.27 25 >> et la c’est le drame :o(

    J’obtiens la chose suivante :
    userperso@nomamchine:~$ tcptraceroute 74.125.93.27 25
    Selected device eth0, address 192.168.1.52, port 49621 for outgoing packets
    Tracing the path to 74.125.93.27 on TCP port 25 (smtp), 30 hops max
    1 192.168.1.1 1.565 ms 1.252 ms 1.180 ms
    2 80.10.123.15 36.057 ms !A * *

    Je ne vois vraiment pas pourquoi :o( Une idée peut être lol ?

    Post a Reply
  13. Good job.

    It helped me to fix some domain issues.

    Merci

    Post a Reply
  14. Bonjour,
    je trouve votre tutoriel très utile,

    je l’ai suivi cependant je rencontre une difficulté:

    lors du test d’envoi du mail
    au niveau de RCPT TO:
    RCPT TO:[email protected]
    451 4.3.0 : Temporary lookup failure

    savez vous d’où cela peut provenir??

    PS: au niveau du cat j’avais un message d’erreur pour le > que j’ai remplacer par >>

    Post a Reply

Trackbacks/Pingbacks

  1. Tweets that mention Ajouter le SMTP de #gmail en SmartHost avec #postfix sous #ubuntu Server #libre -- Topsy.com - [...] This post was mentioned on Twitter by Pierre-Yves Dubreucq. Pierre-Yves Dubreucq said: Ajouter le SMTP de #gmail en SmartHost…

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *