LINUX:Postfix-Tester

Révision datée du 11 décembre 2022 à 14:43 par Adebast (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

retour au menu de Postfix


But

Après la configuration de Postfix, il faut le tester. On peut aussi tester un serveur distant.


Envoi de mail

On peut directement tester l'envoi à partir du serveur de messagerie via la commande "mail":

mail root -s Essai

Avec la commande ci-dessus, on veut envoyer un mail à l'utilisateur local root dont le sujet ("-s") est "Essai". Le prompt apparaît pour introduire le corps du message. Ce message est clôturé par une ligne ne comportant qu'un point (".").

On peut l'envoyer à un autre serveur de messagerie afin de voir si l'envoi distant fonctionne:

mail pdupont@home.dom -s Essai


Codage en BASE64

La messagerie via Internet est très ancienne; il travaillait en 7 bits dont la partie centrale correspond à l'alphabet anglais (majuscules et minuscules) et aux digits (0 à 9), ce qui correspond à 62 caractères (on y ajoute le "+" et le "/" pour arriver à 64) ; le début regroupe des caractères spéciaux comme le saut de ligne, le saut de page, le retour à la ligne, des codes pour la gestion du transfert sur ligne série ou via modem. Pour envoyer par exemple un exécutable directement, il allait y avoir interférence avec ces codes de gestion. La solution, toujours utilisée est de recoder ce fichier d'une base de 8 bits à une base de 6 bits (26=64); à chacune de ces 64 cases correspondent les 64 lettres et chiffres retenues ci-dessus; les cases sont numérotées de 0 à 63. Le principe est d'aligner l'un derrière l'autre toutes les séquences de 8 bits du fichier. On a une longue chaine binaire. Si on découpe cette chaine par lot de 6 bits au lieu de 8 bits, chaque bloc donne en binaire à un chiffre en base 64. Ce chiffre correspond au numéro d'ordre des 64 lettres et chiffres cités ci-dessus. On obtient ainsi une suite de caractères en BASE64.


Ce codage est encore utilisé actuellement pour l'envoi de fichier attaché à votre mail. Quand on regarde le texte source du mail, en début du fichier attaché, on peut remarquer une ligne:

Content-Transfer-Encoding: base64

qui notifie que la suite de la section est codé sur cette base.

Lors de l'authentification passant par l'envoi du nom de l'utilisateur et de son mot de passe, ce codage est utilisé. Nous en avons donc besoin pour notre essai d'envoi de mail aux points qui suivent.

Les commande suivantes donnent un exemple d'un script permettant cette transformation:


#!/usr/bin/bash
perl -MMIME::Base64 -le 'print encode_base64("pdupont\@CENTRAL");' > user.lis
perl -MMIME::Base64 -le 'print encode_base64("Bateau23Ivre");' > pw.lis

La seconde ligne transforme le nom d'utilisateur "pdupont@CENTRAL" et le stocke dans le fichier "user.lis". Son contenu est "cGR1cG9udEBDRU5UUkFM".

La troisième fait la même chose pour le mot de passe de cet utilisateur et le stocke dans le fichier "pw.lis". Son contenu est "QmF0ZWF1MjNJdnJl".

Nous pourrons intégrer leur contenu dans les deux scripts qui suivent.


Openssl

Le but de ce script Linux est d'interagir directement avec un serveur de messagerie et de dialoguer en direct avec lui sans passer par un client de messagerie tel Thunderbird ou MS Outlook. On va voir tout les échanges et les commandes entre nous, le client et un serveur de messagerie.

Actuellement le cryptage est devenu la règle. On va utiliser pour cela le programme "openssl" dui nous a servi dans un autre article pour créer les certificats publiques.

Pour ce script, nous aurez besoin du programme "expect" que l'on installe de la façon suivante:

dnf install expect

Dans ces exemples, nous interagissons avec un serveur de messagerie (MailEnable sous MS Windows) via le protocole "Submission" avec authentification. Son adresse IP est 192.168.1.35 et, comme nous n'avons pas utilisé un serveur DNS interne, on interagit avec lui via son adresse IP. (option IP suivi du port de submission: -connect 192.168.1.35:587)

Comme ce serveur est sur un PC privé, le nom de domaine est créé pour la bonne cause "central.dom". Le certificat de CA de ce nom de domaine n'est pas connu au niveau international. Il ne se trouve pas dans le fichier global ou "bundle" des certificats des CA officiels de Linux. Il faut donc spécifier le nom du fichier du certificat CA du domaine "central.dom". (option: "-CAfile /etc/pki/tls/certs/ca.central.crt")

On peut effectuer la même opération avec un serveur de messagerie d'Internet pour autant que vous y ayez accès et que vous y ayez un compte pour y vérifier que le mail envoyé est bien arrivé. Dans ce cas, le certificat CA ne doit pas être spécifié.

Entre chaque envoi de commande, nous avons ajouté une pause ("sleep") afin de laisser le serveur répondre. A vous de juger. Ces scripts sont des exemples; à vous de les adapter à votre situation.


STARTTLS

Dans ce premier cas, l'échange se fait ici via STARTSSL. Celui-ci est noté par l'option "-starttls smtp".


Voici le script:


#!/usr/bin/expect -f
spawn /usr/bin/openssl s_client -crlf -starttls smtp -CAfile /etc/pki/tls/certs/ca.central.crt -connect 192.168.1.35:587
sleep 1
send -- "EHLO mail.adbweb.gslb.eu\n"
sleep 1
send -- "AUTH LOGIN\n"
sleep 1
send -- "cGR1cG9udEBDRU5UUkFM\n"
sleep 1
send -- "QmF0ZWF1MjNJdnJl\n"
sleep 1
send -- "MAIL FROM:<pdupont@central.dom>\n"
sleep 1
send -- "rcpt to:<edupont@central.dom>\n"
sleep 1
send -- "DATA\n"
send -- "From: Pierre <pdupont@central.dom>\n"
send -- "To: Eric <edupont@central.dom>\n"
send -- "Subject: Test\n"
send -- "OK\n"
send -- ".\n"
sleep 1
send -- "QUIT\n"
expect EOF


Voici la réponse; nous avons mis en gras ce que nous envoyons:


CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
verify return:1
depth=0 CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
verify return:1
---
Certificate chain
 0 s:CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
   i:CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST= Belgique, C = BE
---
Server certificate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
issuer=CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 1754 bytes and written 484 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
   Protocol  : TLSv1.2
   Cipher    : ECDHE-RSA-AES256-GCM-SHA384
   Session-ID: 85380000236DDA4F300C27AC2A8D6F504119261324F739EC0AC03B7E6702A2B3
   Session-ID-ctx:
   Master-Key: 8F7EDBC71316CED9600AB12FB758FA8C00E12A5BD2FA21EC6282F916B70D755F009092653CD8A5C1FF5E22281F5FD4BD
   PSK identity: None
   PSK identity hint: None
   SRP username: None
   Start Time: 1604581840
   Timeout   : 7200 (sec)
   Verify return code: 0 (ok)
   Extended master secret: yes
---
250 STARTTLS
EHLO mail.adbweb.gslb.eu
250-central.dom [192.168.1.100], this server offers 4 extensions
250-AUTH CRAM-MD5 PLAIN LOGIN
250-SIZE 40960000
250-HELP
250 AUTH=LOGIN
AUTH LOGIN
334 VXNlcm5hbWU6
 cGR1cG9udEBDRU5UUkFM
334 UGFzc3dvcmQ6
 QmF0ZWF1MjNJdnJl
235 Authenticated
MAIL FROM:<pdupont@central.dom>
250 Requested mail action okay, completed
rcpt to:<edupont@central.dom>
250 Requested mail action okay, completed
DATA
From: Pierre <pdupont@central.dom>
To: Eric <edupont@central.dom>
Subject: Test
OK
.
354 Start mail input; end with <CRLF>.<CRLF>
250 Requested mail action okay, completed
QUIT
DONE

En début, le serveur se présente. (certificats, nom et version du logiciel, protocole TLS,...). Il annonce le protocole STARTTLS.

Nous présentons ("EHLO mail.adbweb.gslb.eu").

Le serveur présente les types d'authentification disponibles ("AUTH CRAM-MD5 PLAIN LOGIN").

On lance l'authentification, on fourni le nom d'utilisateur et le mot de passe codés en BASE64 comme calculés ci-dessus.

Le serveur accepte l'authentification.

Ensuite, on annonce qui envoie le mail et à qui.

Après acceptation du serveur, on émet le message (étape "DATA"). Remarquez que l'on répète le nom de l'envoyeur et du réceptionniste. C'est ce contenu que recevra notre correspondant. Il n'y a pas de vérification de ce contenu. On peut mettre ce que l'on veut. Les émetteurs de virus et de SPAMs ne s'en privent pas.

Le serveur accepte le message. Tout s'est bien passé.

Lors de l'échange du nom d'utilisateur et du mot de passe, le serveur envoie les messages "334 VXNlcm5hbWU6" et "334 UGFzc3dvcmQ6". Ces messages sont codés en BASE64. Si on les décode avec les commandes respectives:

perl -MMIME::Base64 -le 'print decode_base64("VXNlcm5hbWU6");'
perl -MMIME::Base64 -le 'print decode_base64("UGFzc3dvcmQ6");'

on a les traductions: "Username:" et "Password:".


SSL/TLS

Dans ce second exemple, la configuration du serveur a changé. Nous obligeons le cryptage SSL (SSL/TLS) comme pour le protocole SMTPS et nous avons changé le port qui devient 3587. Pour cette raison, l'option "-starttls smtp" a disparu. Le n° du port a changé aussi. Les reste est le même.


Voici le script:


#!/usr/bin/expect -f
spawn /usr/bin/openssl s_client -crlf -CAfile /etc/pki/tls/certs/ca.central.crt -connect 192.168.1.35:3587
sleep 1
send -- "EHLO mail.adbweb.gslb.eu\n"
sleep 1
send -- "AUTH LOGIN\n"
sleep 1
send -- " cGR1cG9udEBDRU5UUkFM\n"
sleep 1
send -- " QmF0ZWF1MjNJdnJl\n"
sleep 1
send -- "MAIL FROM:<pdupont@central.dom>\n"
sleep 1
send -- "rcpt to:<edupont@central.dom>\n"
sleep 1
send -- "DATA\n"
send -- "From: Pierre <pdupont@central.dom>\n"
send -- "To: Eric <edupont@central.dom>\n"
send -- "Subject: Test\n"
send -- "OK\n"
send -- ".\n"
sleep 1
send -- "QUIT\n"
expect EOF


Voici la réponse; nous avons mis en gras ce que nous envoyons:


CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
verify return:1
depth=0 CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
verify return:1
---
Certificate chain
 0 s:CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
   i:CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
---
Server certificate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=CN = mail.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
issuer=CN = CA.central.dom, emailAddress = pdupont@home.dom, OU = Dupont, O = Central, L = Namur, ST = Belgique, C = BE
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: ECDH, P-384, 384 bits
---
SSL handshake has read 1530 bytes and written 451 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: B82D0000E8986401F48CE36CF3CBA2428C180A89B8AB9520791465FB22005D60
    Session-ID-ctx:
    Master-Key: D9609E195D90C8A81F3CDD0A66B17C1C7F9D6FEB451F6BF4A18F906240A57E79A3BD18AADC11DA70A25F48BB7618FBF4
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1604581681
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---
220 mail.central.dom ESMTP MailEnable Service, Version: 10.31-- ready at 11/05/20 14:08:46
EHLO mail.adbweb.gslb.eu
250-central.dom [192.168.1.100], this server offers 4 extensions
250-AUTH CRAM-MD5 PLAIN LOGIN
250-SIZE 40960000
250-HELP
250 AUTH=LOGIN
AUTH LOGIN
334 VXNlcm5hbWU6
 cGR1cG9udEBDRU5UUkFM
334 UGFzc3dvcmQ6
 QmF0ZWF1MjNJdnJl
235 Authenticated
MAIL FROM:<pdupont@central.dom>
250 Requested mail action okay, completed
rcpt to:<edupont@central.dom>
250 Requested mail action okay, completed
DATA
From: Pierre <pdupont@central.dom>
To: Eric <edupont@central.dom>
Subject: Test
OK
.
354 Start mail input; end with <CRLF>.<CRLF>
250 Requested mail action okay, completed
QUIT
DONE

Comme différence, nous voyons que la réponse "250 STARTTLS" a disparu.



retour au menu de Postfix