Authentification UNIX

Cette procédure décrit l’envoi de mail en local d’un compte UNIX à un autre. À terme, le serveur de mail doit être configuré avec le LDAP de Picasoft et ne plus nécessiter la création d’un utilisateur UNIX.

:!: Puisque plusieurs conversations par telnet sont reportées ici, et afin de simplifier la lecture, nous avons adopté la convention du chevron > pour spécifier les lignes entrées par l’utilisateur. Mais en réalité, il n’est pas requis ! Du reste, c’est la convention bash qui est adoptée (# pour root et $ sinon).

Après la construction des images Docker, deux méthodes sont proposées pour lancer les conteneurs.

:!: Nous sommes ici sur une branche à part du projet (“branche” au sens projet, et non au sens git), les conteneurs sont donc sensiblement différents en terme de fichiers de configuration. Il faut penser à construire les bonnes images des conteneurs puis les lancer.

Normalement, il existe déjà deux images étiquetées pour le MTA et le MDA qui se nomment respectivement pica-mail-mta:1 et pica-mail-mda:1. Cependant, il se peut qu’avec le temps elles aient été supprimées (nous sommes sur un serveur de test). Si elles existent toujours, vous pouvez directement passer à la section suivante.

Sinon, il est important de :

  1. se placer sur la bonne branche du dépôt git de Picasoft : mail
  2. se placer dans le bon répertoire :
    • $(USERDIRECTORY)/dockerfiles/pica-mail-mta/test-authlocaluser/ pour le MTA * $(USERDIRECTORY)/dockerfiles/pica-mail-mda/auth_plaintext/ pour le MDA
  3. et suivre la procédure suivante.

Pour le MTA

docker build -t pica-mail-mta:1 .

Pour le MDA

docker build -t pica-mail-mda:1 .

:!: On suppose que le volume mail-mda-maildir est créé (procédure à suivre), ainsi que le réseau picamail (procédure à suivre). Par la suite, on propose deux méthodes différentes pour lancer les conteneurs : * la première mobilise docker-compose : un outil de Docker pour concentrer dans un seul fichier les commandes (parfois lourdes) nécessaires au lancement de plusieurs conteneurs et potentiellement reliés entre eux. * la seconde en mobilisant la commande run de Docker avec les différentes options. === Docker-compose === On se place : - sur la branche mail du dépôt git de Picasoft. - dans le répertoire $(USERDIRECTORY)/dockerfiles/docker-compose

Puis on entre :

docker-compose -f mail_unix.yml up -d

Docker run

MTA

Pour lancer le conteneur :

docker run -d --name pica-mail-mta \
  --network pica_mail \
  pica-mail-mta:1
MDA

Pour lancer le conteneur :

docker run -d --name pica-mail-mda \
  --network pica_mail \
  --hostname pica-mail-mda \
  --mount source=mail-mda-maildir,target=/home/ \
  pica-mail-mda:1

Une fois les conteneurs lancés, nous allons pouvoir envoyer un mail d’un utilisateur UNIX mail1 à un utilisateur UNIX mail2. Tous deux ont été créés dans le conteneur du MDA au moment du lancement du conteneur (voir le fichier entrypoint.sh). Concernant le MTA (Postfix) un simple fichier de configuration a été édité pour autoriser le transit des adresses mail1@picasoft.net et mail2@picasoft.net.

Pour cela, il faut rentrer à l’intérieur du conteneur du MTA1):

docker exec -it pica-mail-mta /bin/bash

On peut maintenant envoyer un mail à l’aide de la commande telnet :

#telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 pica01-test.test.picasoft.net ESMTP Postfix (Debian/GNU)
>helo pica01-test.test.picasoft.net
250 pica01-test.test.picasoft.net
>MAIL FROM:<mail1@picasoft.net>
250 2.1.0 Ok
>RCPT TO:<mail2@picasoft.net>
250 2.1.5 Ok
>DATA
354 End data with <CR><LF>.<CR><LF>
>Subject: First mail!
>Hello Pica-world!
>.
250 2.0.0 Ok: queued as 09C197F5F6
>quit
221 2.0.0 Bye
Connection closed by foreign host.

Il convient enfin de vérifier que le mail a été reçu par le MDA.

On rentre à l’intérieur du conteneur:

docker exec -it pica-mail-mda /bin/bash

On interroge donc le serveur à l’aide de telnet2)3) :

#telnet localhost 143
Trying 91.224.148.59...
Connected to pica-mail-mda.pica01-test.test.picasoft.net.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.
>1 LOGIN mail2 mail2pwd
1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in  // Authentification réussie !
>2 SELECT INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1540735176] UIDs valid
* OK [UIDNEXT 2] Predicted next UID
2 OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
>3 UID FETCH 1 BODY[HEADER]
* 1 FETCH (UID 1 FLAGS (\Seen \Recent) BODY[HEADER] {626}
Return-Path: <mail1@picasoft.net>
Delivered-To: mail2@picasoft.net
Received: from pica01-test.test.picasoft.net ([172.19.0.3])
	by pica-mail-mda (Dovecot) with LMTP id c6FIIsjA1VtKAAAATq6bHg
	for <mail2@picasoft.net>; Sun, 28 Oct 2018 13:59:36 +0000
Received: from pica01-test.test.picasoft.net (localhost [127.0.0.1])
	by pica01-test.test.picasoft.net (Postfix) with SMTP id 09C197F5F6
	for <mail2@picasoft.net>; Sun, 28 Oct 2018 13:58:22 +0000 (UTC)
Subject: First mail!
Message-Id: <20181028135844.09C197F5F6@pica01-test.test.picasoft.net>
Date: Sun, 28 Oct 2018 13:58:22 +0000 (UTC)
From: mail1@picasoft.net

)
3 OK Fetch completed (0.001 + 0.000 secs).
>4 UID FETCH 1 BODY[TEXT]
* 1 FETCH (UID 1 BODY[TEXT] {19}
Hello Pica-world!
)
4 OK Fetch completed (0.001 + 0.000 secs).
>5 LOGOUT
* BYE Logging out
5 OK Logout completed (0.000 + 0.000 secs).
Connection closed by foreign host.

On peut également vérifier la présence du mail en physique sur la machine pica01-test (l’architecture du répertoire Maildir est détaillée sur cette page) :

#ls -l /var/lib/docker/volumes/mail-mda-maildir/_data/mail2/Maildir
total 28
drwx------ 2 mail2 mail2 4096 Oct 28 14:01 cur
-rw------- 1 mail2 mail2  102 Oct 28 13:59 dovecot-uidlist
-rw------- 1 mail2 mail2    8 Oct 28 13:59 dovecot-uidvalidity
-r--r--r-- 1 mail2 mail2    0 Oct 28 13:59 dovecot-uidvalidity.5bd5c0c8
-rw------- 1 mail2 mail2  688 Oct 28 14:01 dovecot.index.cache
-rw------- 1 mail2 mail2  764 Oct 28 14:02 dovecot.index.log
drwx------ 2 mail2 mail2 4096 Oct 28 14:01 new
drwx------ 2 mail2 mail2 4096 Oct 28 13:59 tmp
#ls -l /var/lib/docker/volumes/mail-maildir/_data/mail2/Maildir/cur/
total 4
-rw------- 1 mail2 mail2 631 Oct 28 14:01 1540735176.M617719P74.pica-mail-mda,S=631,W=645:2,S
#cat /var/lib/docker/volumes/mail-maildir/_data/mail2/Maildir/cur/1540735176.M617719P74.pica-mail-mda\,S\=631\,W\=645\:2\,S
Return-Path: <mail1@picasoft.net>
Delivered-To: mail2@picasoft.net
Received: from pica01-test.test.picasoft.net ([172.19.0.3])
	by pica-mail-mda (Dovecot) with LMTP id c6FIIsjA1VtKAAAATq6bHg
	for <mail2@picasoft.net>; Sun, 28 Oct 2018 13:59:36 +0000
Received: from pica01-test.test.picasoft.net (localhost [127.0.0.1])
	by pica01-test.test.picasoft.net (Postfix) with SMTP id 09C197F5F6
	for <mail2@picasoft.net>; Sun, 28 Oct 2018 13:58:22 +0000 (UTC)
Subject: First mail!
Message-Id: <20181028135844.09C197F5F6@pica01-test.test.picasoft.net>
Date: Sun, 28 Oct 2018 13:58:22 +0000 (UTC)
From: mail1@picasoft.net

Hello Pica-world!

1)
En effet, par mesure de sécurité, la connexion au serveur n’est acceptée que pour l’adresse 127.0.0.1, donc l’envoi de mail ne peut s’effectuer que depuis le serveur lui-même.
2)
Une explication simple et rapide des règles de conversation avec un serveur IMAP est consultable sur cette page. Une description plus complète et plus utile (pour comprendre ce qu’on fait) est disponible sur cette autre page.
3)
Il est intéressant de noter que l’authentification est confirmée à partir de la ligne n°7 du bloc suivant.
  • technique/adminsys/mail/tests/mail_local/plaintext.1611097189.txt.gz
  • de qduchemi