Postfix : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Contrôler l'adresse mail de l'émetteur)
(Contrôler l'adresse mail de l'émetteur)
Ligne 868 : Ligne 868 :
 
  alice@mail.glx alice
 
  alice@mail.glx alice
  
* Nous générons la base à l'aide de la commande postmap :
+
* Nous générons la base à l'aide de la commande '''postmap''' :
  
 
{{ Box Console | objet=sudo postmap sender_login }}
 
{{ Box Console | objet=sudo postmap sender_login }}
  
* Nous redémarrons Postfix pour appliquer les paramètres :
+
* Nous redémarrons '''Postfix''' pour appliquer les paramètres :
  
 
{{ Box Console | objet=sudo service postfix restart }}
 
{{ Box Console | objet=sudo service postfix restart }}
Ligne 878 : Ligne 878 :
 
* Maintenant, voici le même test avec les restrictions d'activées :
 
* Maintenant, voici le même test avec les restrictions d'activées :
  
root@pfalk:~# telnet 10.0.0.44 587
+
{{ Box Console | objet=<span style="font-family:sans-serif;color:blue">telnet 10.0.0.44 587<span><br />
Trying 10.0.0.44...
+
Trying 10.0.0.44...<br />
Connected to 10.0.0.44.
+
Connected to 10.0.0.44.<br />
Escape character is '^]'.
+
Escape character is '^]'.<br />
220 alice.lan ESMTP Postfix
+
220 alice.lan ESMTP Postfix<br />
ehlo mail.glx
+
<span style="font-family:sans-serif;color:blue">AUTH LOGIN YWxpY2U=<span><br />
250-alice.lan
+
334 UGFzc3dvcmQ6<br />
250-PIPELINING
+
<span style="font-family:sans-serif;color:blue">YWxpY2U=<span><br />
250-SIZE 5120000
+
235 2.7.0 Authentication successful<br />
250-VRFY
+
<span style="font-family:sans-serif;color:blue">mail from:<cache@fictif.tld><span><br />
250-ETRN
+
250 2.1.0 Ok<br />
250-STARTTLS
+
<span style="font-family:sans-serif;color:blue">rcpt to:<nicolas@cachelou.fr><span><br />
250-AUTH PLAIN LOGIN
+
<span style="font-family:sans-serif;color:red">553 5.7.1 <cache@fictif.tld>: Sender address rejected: not owned by user alice@mail.glx<span> }}
250-AUTH=PLAIN LOGIN
+
250-ENHANCEDSTATUSCODES
+
250-8BITMIME
+
250 DSN
+
AUTH LOGIN YWxpY2VAbWFpbC5nbHg=
+
334 UGFzc3dvcmQ6
+
YWxpY2U=
+
235 2.7.0 Authentication successful
+
mail from:<existepas@domaine.tld>
+
250 2.1.0 Ok
+
rcpt to:<nicolas@cachelou.fr>
+
553 5.7.1 <existepas@domaine.tld>: Sender address rejected: not owned by user alice@mail.glx
+
  
 
=== Ecoute sur le port 587 ===
 
=== Ecoute sur le port 587 ===

Version du 1 février 2014 à 02:16

POSTFIX Logo.png

Présentation

Postfix est un serveur mail SMTP (Simple Mail Transfer Protocol) appelé aussi MTA pour Mail Transport Agent. Son rôle est d'assurer le traitement des mails aussi bien à l'envoi qu'à la réception.

Pour que les utilisateurs puissent récupérer leur message, Postfix devra être couplé à un service de relève de message basé sur le protocole POP (Post Office Protocol) et/ou IMAP (Internet Message Access Protocol). Nous utiliseront le service courier. L'authentification des utilisateurs sur le serveur mail s'effectuera par l'intermédiaire du daemon saslauth.

Installation

Il sera nécessaire d'installer les services suivants :

  • Postfix, qui est le MTA;
  • Courier-Pop, qui est le serveur POP pour la récupération des messages par l'utilisateur via un client de messagerie;
  • Courier-Imap, qui est le serveur IMAP pour la récupération des messages par l'utilisateur via un client de messagerie ou un webmail;
ICON Terminal.png

apt-get install postfix courier-pop courier-imap procmail

Configuration de base

Configuration de base pour un usage local uniquement.

Fichier /etc/postfix/main.cf

  • Le fichier de configuration main.cf contient les éléments de configuration sur le MTA Postfix.
smtpd_banner = $myhostname ESMTP $mail_name
biff = no

append_dot_mydomain = no 

readme_directory = no

myhostname = alice.lan
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydomain = mail.glx
myorigin = $mydomain
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/124 [::1]/128
home_mailbox = Maildir/
mailbox_command = procmail -a "$EXTENSION"
recipient_delimiter = +
inet_interfaces = all
message_size_limit = 5120000
mailbox_size_limit = 10240000
ICON boxWarning.png

Par défaut, la variable home_mailbox a pour valeur /var/mail. Les messages sont enregistrés dans un fichier texte portant le nom de l'utilisateur UNIX. Ce mode de fonctionnement n'est pas compatible avec les daemons courier-pop et courier-imap

Fichier /etc/procmailrc

  • Le daemon procmail interrogera ce fichier pour chaque mail entrant. On y définira la localisation des boîtes mails.
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/

Création du répertoire mail

Dans notre cas nous disposons de l'utilisateur UNIX alice sur notre serveur avec pour répertoire personnel /home/alice.

  • Création des répertoires pour le courrier électronique de alice :
ICON Terminal.png

cd /home/alice
maildirmake Maildir
maildirmake -f Sent Maildir
maildirmake -f Queue Maildir
maildirmake -f junkmail Maildir
maildirmake -f virus Maildir
maildirmake -f Drafts Maildir
maildirmake -f Trash Maildir
chown alice:alice Maildir -R
chmod 700 Maildir -R

  • Pour que cette opération s'effectue automatiquement à chaque ajout d'un nouvel utilisateur UNIX :
ICON Terminal.png

sudo maildirmake /etc/skel/Maildir
sudo maildirmake /etc/skel/Maildir/.Drafts
sudo maildirmake /etc/skel/Maildir/.Sent
sudo maildirmake /etc/skel/Maildir/.Trash
sudo maildirmake /etc/skel/Maildir/.Templates



ICON Light.png
Nos comptes mails sont basés sur les utilisateurs UNIX du serveur.

Application des paramètres

  • Pour que les modifications soient prises en compte, il faut redémarrer Postfix :
ICON Terminal.png

sudo service postfix restart

Test de validation du serveur

Test du serveur SMTP

  • Nous pouvons vérifier le bon fonctionnement du serveur SMTP en s'y connectant depuis la commande telnet :
ICON Terminal.png

telnet 127.0.0.1 25

  • Le serveur répondra par un code 220 contenant la bannière qui a été définit au paramètre smtpd_banner dans le fichier main.cf.
ICON Terminal.png

telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 alice.lan ESMTP Postfix

  • Pour valider son fonctionnement, nous allons envoyer un mail. Commençons d'abord par indiquer notre adresse mail émetteur :
ICON Terminal.png

mail from:<root@mail.glx>
250 2.1.0 OK

  • Le serveur acquittant avec le code 250, nous pouvons maintenant indiquer l'adresse de l'expéditeur :
ICON Terminal.png

rcpt to:<alice@mail.glx>
250 2.1.5 OK

  • Le serveur doit acquitter également avec le code 250. Maintenant nous allons rédiger le contenu du mail. Pour cela, il faut saisir la commande data :
ICON Terminal.png

data

  • Le serveur répondra par :
ICON Terminal.png

354 End data with <CR><LF>.<CR><LF>

  • Dès lors, nous pouvons maintenant rédiger notre mail. La touche Entrée est interprété comme un retour à la ligne dans le mail.
ICON Terminal.png

test d'envoi / réception
Merci ;)

  • Le mail rédigé, on revient à la ligne avec la touche Entrée, puis on saisie un point (.) et on appui de nouveau sur la touche Entrée :
ICON Terminal.png

.

  • Le serveur valide la mise en attente de distribution du mail et retourne son numéro d'identifiant quand le file d'attente :
ICON Terminal.png

250 2.0.0 Ok: queued as C01187F9FA

  • On ferme la connexion avec la commande quit :
ICON Terminal.png

quit
221 2.0.0 Bye
Connection closed by foreign host.

Test du serveur POP3

  • On va vérifier la bonne réception du mail envoyé à l'étape précédente. Pour cela on se connecte au serveur sur le port 110 :
ICON Terminal.png

telnet 10.0.0.44 110
Trying 10.0.0.44... Connected to 10.0.0.44. Escape character is '^]'. +OK Hello there.

  • On indique lenom d'utilisateur UNIX du compte avec la commande user :
ICON Terminal.png

user alice
+OK Password required

  • Le serveur demande le mot de passe du compte, on lui renseigne via la commande pass :
ICON Terminal.png

pass alice
+OK logged in.

  • Le serveur accepte la connexion. On consulte la liste des messages avec la commande list :
ICON Terminal.png

list
+OK POP3
1 280
.

  • On affiche les 20 premières lignes du message 1 avec la commande top :
ICON Terminal.png

top 1 20
+OK headers follow.
Return-Path: <root@mail.glx>
X-Original-To: alice@mail.glx
Delivered-To: alice@mail.glx
Received: from pfalk.net.ncad.fr (pfalk.net.ncad.fr [10.0.0.48])
__by alice.lan (Postfix) with SMTP id A3242628A2
__for <alice@mail.glx>; Thu, 30 Jan 2014 01:20:57 +0100 (CET)

test
.

Test du serveur IMAP

  • On se connecte au serveur sur le port imap 143 :
ICON Terminal.png

telnet 10.0.0.44 143
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.

  • OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL
    ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
  • Le serveur attend un login est un mot de passe. Pour cela, on utilise la commande LOGIN <user> <password> :
ICON Terminal.png

01 LOGIN alice alice
1 OK LOGIN Ok.

  • On demande la liste des répertoires grâce à la commande LIST "" "*" :
ICON Terminal.png

2 LIST "" "*"
¤ LIST (\HasNoChildren) "." "INBOX.Queue"
¤ LIST (\HasNoChildren) "." "INBOX.Drafts"
¤ LIST (\HasNoChildren) "." "INBOX.Trash"
¤ LIST (\HasNoChildren) "." "INBOX.junkmail"
¤ LIST (\HasNoChildren) "." "INBOX.Sent"
¤ LIST (\Marked \HasChildren) "." "INBOX"
¤ LIST (\HasNoChildren) "." "INBOX.virus"
2 OK LIST completed

  • On accès au dossier des message reçus dans le dossier INBOX avec la commande SELECT <nom_dossier> :
ICON Terminal.png

3 SELECT INBOX
¤ FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
¤ OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
¤ 4 EXISTS
¤ 4 RECENT
¤ OK [UIDVALIDITY 1391044096] Ok
¤ OK [MYRIGHTS "acdilrsw"] ACL
3 OK [READ-WRITE] Ok

  • On liste les message reçus dans le dossier INBOX avec la commande SELECT <nom_dossier> :
ICON Terminal.png

4 UID FETCH 1:* RFC822.SIZE
¤ 1 FETCH (UID 1 RFC822.SIZE 280)
4 OK FETCH completed.

  • On consulte le message avec l'UID 1 en saisisant la commande UID FETCH <UID_message> BODY[] :
ICON Terminal.png

5 UID FETCH 4 BODY[]
¤ 4 FETCH (UID 4 BODY[] {310}
Return-Path: <root@mail.glx>
X-Original-To: alice@mail.glx
Delivered-To: alice@mail.glx
Received: from pfalk.net.ncad.fr (pfalk.net.ncad.fr [10.0.0.48])
___by alice.lan (Postfix) with SMTP id 511AB628A2
___for <alice@mail.glx>; Thu, 30 Jan 2014 01:56:23 +0100 (CET)

test d'envoi / réception
Merci ;)
)
¤ 4 FETCH (FLAGS (\Seen \Recent))
5 OK FETCH completed.

  • On ferme la connexion avec la commande LOGOUT :
ICON Terminal.png

6 logout
¤ BYE Courier-IMAP server shutting down
6 OK LOGOUT completed
Connection closed by foreign host.

Autres méthodes

On peut également vérifier que le mail est bien été acheminé.

  • Via les logs stockés dans /var/log/mail.log :
Jan 30 02:29:40 alice postfix/local[13772]: C01187F9FA: to=<alice@mail.glx>, relay=local, delay=50, delays=49/0.17/0/0.14, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")
Jan 30 02:29:40 alice postfix/qmgr[13254]: C01187F9FA: removed
  • En interrogeant la file d'attente :
ICON Terminal.png

/usr/bin/mailq

Authentification SMTP Postfix

SMTP en Open Relay

Jusqu'à présent Postfix accepte de délivrer les messages de n'importe quel utilisateur. La raison est simple : aucune demande de mot de passe pour se connecter.

Cette section va justement permettre d'initier une phase d'authentification pour toute tentative d'envoi de messages via Postfix. Ceci permettra d'éviter que le serveur soit utiliser à tord par des personnes mal intentionnées pour diffuser du spam.

Contrairement aux serveurs pop (courier-pop) et imap (courier-imap), la connexion au serveur SMTP s'effectue sans demande de mot de passe. Pour remédier à cette faille de sécurité propre à la configuration par défaut de Postfix, nous installeront le paquet sasl2-bin qui permettra l'authentification des utilisateurs avec le module pam (Pluggable Authentication Modules, utilisé par Linux).

ICON Terminal.png

sudo apt-get install sasl2-bin

Activation du module

  • Editer le fichier de configuration /etc/default/saslauthd, puis remplacer :
START=no
  • par :
START=yes

Par défaut, le mécanisme d'authentification utilisé est pam (paramètre MECHANISMS) ce qui nous conviens pour le moment (authentification via les comptes UNIX existants).

  • Remplacer aussi la ligne :
OPTIONS="-c -m /var/run/saslauthd"
  • Par :
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
  • On crée le répertoire /var/spool/postfix/var/run/saslauthd avec les permissions adéquates :
ICON Terminal.png

mkdir -p /var/spool/postfix/var/run/saslauthd
chown -R root:sasl /var/spool/postfix/var/run/saslauthd
chmod 710 /var/spool/postfix/var/run/saslauthd

  • On ajoute l'utilisateur Postfix au groupe sasl :
ICON Terminal.png

adduser postfix sasl

  • On crée le fichier /etc/pam.d/smtp et on y insère les éléments suivants :
@include common-auth
@include common-account
@include common-password
@include common-session
  • On démarre le daemon saslauthd :
ICON Terminal.png

service saslauthd start

Intégration dans Postfix

  • Ajouter la ligne suivante dans le fichier /etc/postfix/main.cf :
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = cyrus
cyrus_sasl_config_path = /etc/postfix/sasl
  • Créer le fichier /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
  • On redémarre Postfix pour appliquer les nouveaux paramètres :
ICON Terminal.png

service postfix restart

Vérification

La commande ehlo

La commande ehlo permet de s'annoncer au serveur. Certains serveur SMTP la requiert avant toute autre action. Dans notre cas elle nous permet de voir les méthodes d'authentification acceptés par le serveur SMTP.

  • Résultat de la commande ehlo sans le module sasl d'activé :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo alice.lan
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

  • Résultat de la commande ehlo avec le module sasl d'activé :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 NTLM PLAIN LOGIN
250-AUTH=DIGEST-MD5 CRAM-MD5 NTLM PLAIN LOGIN

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Envoi sans authentification

  • Tentative d'envoi sans authentification :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
mail from:<root@mail.glx>
250 2.1.0 Ok
rcpt to:<nicolas@cachelou.fr>
554 5.7.1 <nicolas@cachelou.fr>: Relay access denied
221 2.7.0 Error: I can break rules, too. Goodbye.
Connection closed by foreign host.

  • Trace laissée dans /var/mail/mail.log :
Jan 30 13:17:32 alice postfix/smtpd[20759]: NOQUEUE: reject: RCPT from pfalk.net.ncad.fr[10.0.0.48]: 554 5.7.1 <nicolas@cachelou.fr>: Relay access denied; from=<root@mail.glx> to=<nicolas@cachelou.fr> proto=SMTP

Le serveur refuse le destinataire avec pour motif : Relay access denied.

ICON Light.png
Le serveur autorise de transmettre les mails sans authentification pour tous les domaines renseignés dans le paramètre mydestination du fichier /etc/postfix/main.cf.

Envoi avec authentification

  • Tentative d'envoi avec authentification :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
auth login YWxpY2U=
334 UGFzc3dvcmQ6
YWxpY2U=
235 2.7.0 Authentication successful
mail from:<root@mail.glx>
250 2.1.0 Ok
rcpt to:<nicolas@cachelou.fr>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test
.
250 2.0.0 Ok: queued as 8EDAD62881


ICON Information.png

Le nom d'utilisateur et le mot de passe sont encodés en Base64. Plus d'informations ici

  • Trace laissée dans /var/mail/mail.log :
Jan 30 14:48:59 alice postfix/smtpd[24312]: CD53F62881: client=pfalk.net.ncad.fr[10.0.0.48], sasl_method=login, sasl_username=alice@alice.lan
Jan 30 14:49:05 alice postfix/cleanup[24315]: CD53F62881: message-id=<>
Jan 30 14:49:05 alice postfix/qmgr[24195]: CD53F62881: from=<root@mail.glx>, size=190, nrcpt=1 (queue active)
Jan 30 14:49:07 alice postfix/smtp[24316]: CD53F62881: to=<nicolas@cachelou.fr>, relay=aspmx.l.google.com[173.194.78.27]:25, delay=16, delays=14/0.13/1.2/0.56, dsn=5.7.1, status=bounced (host aspmx.l.google.com[173.194.78.27] said: 550-5.7.1 [109.190.9.125      11] Our system has detected that this message is 550-5.7.1 not RFC 2822 compliant. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please review 550 5.7.1 RFC 2822 specifications for more information. dq1si3286812wib.75 - gsmtp (in reply to end of DATA command))
Jan 30 14:49:07 alice postfix/cleanup[24315]: 31F5F63799: message-id=<20140130134907.31F5F63799@alice.lan>
Jan 30 14:49:07 alice postfix/qmgr[24195]: 31F5F63799: from=<>, size=2576, nrcpt=1 (queue active)
Jan 30 14:49:07 alice postfix/bounce[24317]: CD53F62881: sender non-delivery notification: 31F5F63799
Jan 30 14:49:07 alice postfix/qmgr[24195]: CD53F62881: removed
Jan 30 14:49:07 alice postfix/local[24318]: 31F5F63799: to=<root@mail.glx>, relay=local, delay=0.3, delays=0.05/0.12/0/0.13, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")
Jan 30 14:49:07 alice postfix/qmgr[24195]: 31F5F63799: removed

D'après les logs l'authentification bien réussi. Cependant, l'envoi du mail vers nicolas@cachelou.fr a échoué car le fournisseur du service de messagerie GMail a refusé le message. GMail n'accepte pas les messages sans objet.

Sécuriser les échanges SMTP

Avertissement

Cette section à deux objectifs : vous montrer des méthodes de sécurisation pour votre serveur mail, mais aussi vous sensibiliser sur la sécurité en général des applications.

Vous observerez qu'à défaut d'une connexion sécurisée, toutes les données transitent en claires sur le réseau. Il est dès lors facile pour des personnes mal intentionnées de les récupérer et d'en faire mauvaise usage.

Défaut des échanges en clairs

Par défaut, tous les échanges s'effectuent en clair aussi bien la phase d'authentification que l'envoie du message. Voici, ci-dessous, une capture d'un analyseur de trame (Wireshark) lors de l'envoi d'un couriel depuis le client de messagerie Thundirbird.

Trame d'échanges SMTP entre Thundirbird et Postfix

On remarquera surtout les login et mot de passe ainsi que l'émetteur et le destinataire du message. Il est facile pour des logiciels espions installés sur le PC ou le réseau de récupérer ces données afin de réutiliser le compte mail pour diffuser du SPAM.

Dans ces cas beaucoup plus grave, les données du comptes permettent de récupérer une copie des messages stockés sur le serveur de mail.

Activer TLS

  • Ajouter les lignes suivantes dans le fichier de configuration de postfix /etc/postfix/main.cf :
smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.cert
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key
smtpd_use_tls=yes
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_ask_ccert = yes
smtpd_tls_security_level = may

smtp_tls_loglevel = 1
smtp_tls_cert_file=/etc/postfix/ssl/smtpd.cert
smtp_tls_key_file=/etc/postfix/ssl/smtpd.key

Les deux premières lignes concernent respectivement le certificat et la clé privée. La troisième permet d'activer le module tls sur le serveur. Les lignes 4 à 6 permettent de tracer l'usage du certificat dans les logs (pour le debuggage). La ligne 7 spécifie le niveau de tolérance en matière de sécurité du serveur. Elle sera étudié plus en détail par la suite.

Enfin le deuxième bloc concerne les informations de chiffrement pour la connexion du client (même certificat aussi bien pour le serveur que le client).

  • Créer le certificat ssl dans le répertoire /etc/postfix/ssl :
ICON Terminal.png

mkdir /etc/postfix/ssl
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
Generating a 2048 bit RSA private key
.................................................................................+++
..........................................................................+++
writing new private key to 'imap.key'
- - - - -
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]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NCad Network
Organizational Unit Name (eg, section) []:Intranet Goulouxiou
Common Name (e.g. server FQDN or YOUR name) []:10.0.0.44
Email Address []:tech@ncad.fr



ICON Information.png

Pour un serveur en production on prendra son IP publique ou son nom de machine (champ Common Name).

  • Redémarrer le service Postfix pour appliquer la configuration
ICON Terminal.png

service postfix restart

Vérification

  • Se connecter au serveur Postfix depuis le port smtp 25 :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

On remarquera l'apparition de la ligne StartTLS qui indique que le serveur peut crypter les échanges si le client le souhaite.

  • Effectuer un test d'envoi en configurant le compte mail sur un client de messagerie en utilisant pour le serveur SMTP le port 25 et comme securité pour la connexion STARTTLS. L'adresse des serveurs POP/IMAP et SMTP correspond à l'adresse IP du serveur Postfix.
  • Lors de l'envoi d'un message on observe ceci dans les logs Postfix dans le fichier /var/log/mail.log :
Jan 30 20:17:54 alice postfix/smtpd[28407]: connect from oxtrode.net.ncad.fr[10.0.0.51]
Jan 30 20:17:54 alice postfix/smtpd[28407]: Anonymous TLS connection established from oxtrode.net.ncad.fr[10.0.0.51]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)
Jan 30 20:17:54 alice postfix/smtpd[28407]: 98A4163777: client=oxtrode.net.ncad.fr[10.0.0.51], sasl_method=PLAIN, sasl_username=alice@alice.lan
Jan 30 20:17:54 alice postfix/cleanup[28410]: 98A4163777: message-id=<52EAA55B.7090404@mail.glx>
Jan 30 20:17:54 alice postfix/smtpd[28407]: disconnect from oxtrode.net.ncad.fr[10.0.0.51]
Jan 30 20:17:54 alice postfix/qmgr[28182]: 98A4163777: from=<alice@mail.glx>, size=726, nrcpt=1 (queue active)
Jan 30 20:17:55 alice postfix/smtp[28411]: Untrusted TLS connection established to aspmx.l.google.com[173.194.78.27]:25: TLSv1.1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)
  • On peut également remarquer avec l'analyseur de trame que le dialogue entre le client de messagerie et le serveur SMTP est chiffré (cipher ECDHE-RSA-AES256-SHA):
Trame d'échanges SMTP entre Thundirbird et Postfix chiffrée

Forcer l'authentification chiffrée en StartTLS

  • Dans ce mode de configuration, deux types d'échanges cohabitent : sécurisés et non sécurisés. Ceci se vérifie facilement en accédant au serveur :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

  • On remarque que le serveur nous informe sur deux choses :
    • Il accepte l'authentification en clair dont il nous énonce les méthodes : PLAIN LOGIN.
    • Il accepte les échanges chiffrés en nous indiquant StartTLS.
  • Il est possible de forcer Postfix à n'accepter que les connexions chiffrées. Cependant, avec STARTTLS le serveur débutera sa conversation en clair jusqu'à ce que le client accepte STARTTLS (c.f Capture d'écran Vérification ligne 1 à 5). Pour cela, dans le fichier /etc/postfix/main.cf on va remplacer :
smtpd_tls_security_level = may
  • Par :
smtpd_tls_security_level = encrypt
  • On redémarre le service Postfix :
ICON Terminal.png

sudo service postfix restart

  • Puis on se connecter de nouveau au serveur :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo ncad.fr
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

On remarque la disparition des lignes AUTH.

  • Cette fois, si on tente d'envoyer un message en connexion non chiffrée, le serveur nous refuse la requête dès le mail from: :
ICON Terminal.png

telnet 10.0.0.44 25
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
mail from:<alice@mail.glx>
530 5.7.0 Must issue a STARTTLS command first

Sécuriser les échanges IMAP

Avertissement

Cette section à deux objectifs : vous montrer des méthodes de sécurisation pour votre serveur mail, mais aussi vous sensibiliser sur la sécurité en général des applications.

Vous observerez qu'à défaut d'une connexion sécurisée, toutes les données transitent en claires sur le réseau. Il est dès lors facile pour des personnes mal intentionnées de les récupérer et d'en faire mauvaise usage.

Défaut des échanges en clair

Tout comme pour le SMTP, tous les échanges s'effectuent en clair aussi bien la phase d'authentification que la consultation des différents dossiers. Voici, ci-dessous, une capture de trame lorsqu'on navigue dans les différents dossiers de son client de messagerie Imap.

Trame d'échanges Imap entre Thundirbird et Postfix

Il est important de constater que sur cette trame le login (alice) et le mot de passe (alice) sont visibles en clair sur la capture (à la 5ème ligne). Il est toujours plus facile pour des logiciels espions installés sur le PC ou le réseau de récupérer ces données afin de consulter les messages reçus et sauvegardés sur le serveur Imap.

ICON boxWarning.png

Les données transitent en clair de la machine ou est installé le client de messagerie jusqu'au serveur mail du fournisseur du service

Activer SSL

  • Installation du service courier-imap-ssl :
ICON Terminal.png

sudo apt-get install courier-imap-ssl

Le service courier-imap-ssl écoute sur le port 993. Bien que le certificat soit généré automatiquement, il est nécessaire de le recréer. Pour la génération du certificat on prendra l'IP privée du serveur.

ICON Information.png

Pour un serveur en production on prendra son IP publique ou son nom de machine (champ Common Name).

  • Génération du certificat :
ICON Terminal.png

cd /etc/courier/
openssl req -new -outform PEM -out imapd.cert -newkey rsa:2048 -nodes -keyout imap.key -keyform PEM -days 365 -x509
Generating a 2048 bit RSA private key
.................................................................................+++
..........................................................................+++
writing new private key to 'imap.key'
- - - - -
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]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NCad Network
Organizational Unit Name (eg, section) []:Intranet Goulouxiou
Common Name (e.g. server FQDN or YOUR name) []:10.0.0.44
Email Address []:tech@ncad.fr

  • Création du fichier imapd.pem. Ce fichier est une fusion de imapd.cert et imapd.key :
ICON Terminal.png

cd /etc/courier
touch imapd.pem
cat imapd.cert > imapd.pem
cat imapd.key >> imapd.pem


  • Modification de la configuration de courier-imap-ssl. Pour cela, vérifier les paramètres suivants dans le fichier de configuration /etc/courier/imapd-ssl :
TLS_PROTOCOL="TLS1_1:TLS1:SSL3"
TLS_CERTFILE=/etc/courier/imap.pem
TLS_TRUSTCERTS=/etc/courier/imap.pem
TLS_VERIFYPEER=NONE
  • On redémarre le service pour prendre en compte les nouveaux paramètres :
ICON Terminal.png

service courier-imap-ssl restart

Vérification

  • Se connecter au serveur Postfix depuis le port smtp 25 :
ICON Terminal.png

telnet 10.0.0.44 993
Trying 10.0.0.44... Connected to 10.0.0.44. Escape character is '^]'.

Le serveur répond sur le port 993.

  • On peut remarquer avec l'analyseur de trames que le dialogue entre le client de messagerie et le serveur IMAP est chiffré :
Trame d'échanges IMAP entre Thundirbird et Courier-Imap-SSL chiffrée

Sécuriser les échanges POP

Avertissement

Cette section à deux objectifs : vous montrer des méthodes de sécurisation pour votre serveur mail, mais aussi vous sensibiliser sur la sécurité en général des applications.

Vous observerez qu'à défaut d'une connexion sécurisée, toutes les données transitent en claires sur le réseau. Il est dès lors facile pour des personnes mal intentionnées de les récupérer et d'en faire mauvaise usage.

Défaut des échanges en clair

À l'image de SMTP et IMAP vus précédemment, tous les échanges s'effectuent en clair quelques soit le type d'échange (signalisation, authentification, données). Voici, ci-dessous, une capture de trame lorsqu'on effectue une relève POP avec son client de messagerie.

Trame d'échanges POP entre Thundirbird et Postfix

Il est important de constater que sur cette trame le login (ligne 10 : USER alice) et le mot de passe (ligne 12 : PASS alice) sont visibles en clair sur la capture. Il est toujours plus facile pour des logiciels espions installés sur le PC ou le réseau de récupérer ces données afin de consulter les messages reçus et sauvegardés sur le serveur POP.

ICON boxWarning.png

Les données transitent en clair de la machine ou est installé le client de messagerie jusqu'au serveur mail du fournisseur du service

Activer SSL

  • Installation du service courier-pop-ssl :
ICON Terminal.png

sudo apt-get install courier-pop-ssl

Le service courier-pop-ssl écoute sur le port 995. Bien que le certificat soit généré automatiquement, il est nécessaire de le recréer. Pour la génération du certificat on prendra l'IP privée du serveur.

ICON Information.png

Pour un serveur en production on prendra son IP publique ou son nom de machine (champ Common Name).

  • Génération du certificat :
ICON Terminal.png

cd /etc/courier/
openssl req -new -outform PEM -out popd.cert -newkey rsa:2048 -nodes -keyout popd.key -keyform PEM -days 365 -x509
Generating a 2048 bit RSA private key
.................................................................................+++
..........................................................................+++
writing new private key to 'popd.key'
- - - - -
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]:Paris
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NCad Network
Organizational Unit Name (eg, section) []:Intranet Goulouxiou
Common Name (e.g. server FQDN or YOUR name) []:10.0.0.44
Email Address []:tech@ncad.fr

  • Création du fichier .pem. Ce fichier est une fusion de popd.cert et popd.key :
ICON Terminal.png

cd /etc/courier
touch imapd.pem
cat popd.cert > popd.pem
cat popd.key >> popd.pem


  • Modification de la configuration de courier-pop-ssl. Pour cela, vérifier les paramètres suivants dans le fichier de configuration /etc/courier/imapd-ssl :
TLS_PROTOCOL="TLS1_1:TLS1:SSL3"
TLS_CERTFILE=/etc/courier/imap.pem
TLS_TRUSTCERTS=/etc/courier/imap.pem
TLS_VERIFYPEER=NONE
  • On redémarre le service pour prendre en compte les nouveaux paramètres :
ICON Terminal.png

service courier-pop-ssl restart

Vérification

  • Se connecter au serveur Postfix depuis le port smtp 25 :
ICON Terminal.png

telnet 10.0.0.44 995
Trying 10.0.0.44... Connected to 10.0.0.44. Escape character is '^]'.

Le serveur répond sur le port 995.

  • On peut remarquer avec l'analyseur de trames que le dialogue entre le client de messagerie et le serveur POPs est chiffré :
Trame d'échanges POP entre Thundirbird et Courier-pop-SSL chiffrée

Lutte contre le Spam

Commande ehlo

  • La commande ehlo permet de s'annoncer au serveur avec un nom de domaine. Les spammeurs utilisent souvent des noms inexistants ou encore des adresses IP sans reverse DNS valide.
smtpd_helo_required = yes
smtpd_helo_restrictions =
  reject_unknown_helo_hostname
  • On applique les paramètres :
ICON Terminal.png

service postfix restart

  • Maintenant on tente d'envoyer un mail sans commande ehlo au démarrage de la connexion :
ICON Terminal.png

telnet 10.0.0.44 587
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
mail from:<alice@mail.glx>
503 5.5.1 Error: send HELO/EHLO first

  • On essaye cette fois-ci en utilisant un nom de domaine fictif (filtre reject_unknown_helo_hostname):
ICON Terminal.png

telnet 10.0.0.44 587
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
ehlo quoi.tld
250-alice.lan
250-PIPELINING
250-SIZE 5120000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:<root@mail.glx>
250 2.1.0 Ok
rcpt to:<alice@mail.glx>
450 4.7.1 <quoi.tld>: Helo command rejected: Host not found

Restriction émetteur

Contrôler l'adresse mail de l'émetteur

ICON boxWarning.png

Compatible uniquement avec les serveur smtp Postfix dont l'authentification est activée.

  • Par défaut les utilisateur peuvent envoyer des messages en utilisant n'importe quel adresse mail. Voici un exemple :
  • Tous d'abord, on va ajouter une base de correspondance logins utilisateurs et adresses mails. Pour cela il faudra ajouter le paramètre smtpd_sender_login_maps suivi du fichier contenant la table de correspondance. Ce paramètre devra être renseigné juste avant la ligne smtpd_recipient_restrictions dans le fichier /etc/postfix/main.cf.
smtpd_sender_login_maps = hash:/etc/postfix/sender_login
  • Juste en dessous de ce paramètre, nous allons indiquer à Postfix de vérifier systématiquement la correspondance entre l'adresse de l'émetteur et le login du compte mail utilisé via la table de correspondance sender_login :
smtpd_sender_restrictions =
  reject_sender_login_mismatch
  • Nous allons renseigner dans le fichier sender_login les informations du compte alice comme ceci :
alice@mail.glx alice
  • Nous générons la base à l'aide de la commande postmap :
ICON Terminal.png

sudo postmap sender_login

  • Nous redémarrons Postfix pour appliquer les paramètres :
ICON Terminal.png

sudo service postfix restart

  • Maintenant, voici le même test avec les restrictions d'activées :
ICON Terminal.png

telnet 10.0.0.44 587
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 alice.lan ESMTP Postfix
AUTH LOGIN YWxpY2U=
334 UGFzc3dvcmQ6
YWxpY2U=
235 2.7.0 Authentication successful
mail from:<cache@fictif.tld>
250 2.1.0 Ok
rcpt to:<nicolas@cachelou.fr>
553 5.7.1 <cache@fictif.tld>: Sender address rejected: not owned by user alice@mail.glx</code>

Ecoute sur le port 587

  • Par défaut le protocole smtp utilise le port 25. Cependant, il se peut que l'usage de ce port soit bloquer par le fournisseur d'accès à Internet. Dès lors, il faudra utiliser le port smtp 587. Pour cela, il suffit de rajouter la ligne suivante dans le fichier /etc/postfix/main.cf (juste en dessous de la 1er ligne smtp inet - - - - smtpd ...) :
587     inet    n       -       y       -       -       smtpd
  • Il faut redémarrer le service Postfix pour que les modifications soient prises en compte :
ICON Terminal.png

<code>sudo service postfix restart</code>


ICON Information.png

Pour désactiver l'écoute sur le port 25, il suffit de commenter la ligne :

#smtp      inet  n       -       -       -       -       smtpd

Liens