M1. Outils de l'internet, année 2006/2007

TP 4 - OpenLDAP + Dovecot + Yocto = Webmail authentifié

V. Poupet, A. Ballier

D'après le TP de 2007 par N. Ollinger, E. Jeandel et V. Bernardi

Dans cette fiche, on notera en gras coloré les parties des commandes et fichiers de configurations qui doivent être modifiés pour être adaptés à votre environnement de travail : ne les recopiez pas ! modifiez-les !

Le but de ce TP est de mettre en place un serveur LDAP, OpenLDAP un serveur POP3/IMAP simple, dovecot, un serveur SMTP local, yocto, et surtout de fournir par l'intermédiaire d'un site Web écrit en python une interface de Webmail gérant les sessions et se connectant aux serveurs POP et SMTP en utilisant l'authentification LDAP. Les indications de bases nécessaires à lancer les divers serveurs vous sont fournies, ainsi que des liens vers la documentation idoine. Le reste est laissé à votre initiative.

1. OpenLDAP

OpenLDAP fournit une implémentation libre et complète du standard LDAP. La distribution OpenLDAP inclut le serveur LDAP slapd, le serveur de réplication slurpd, que nous n'utiliserons pas, et divers utilitaires pour interagir avec les serveurs en question. Voir la documentation complète du serveur slapd.

Pour fonctionner, le serveur slapd a besoin de l'existence (dans votre civet) des répertoires suivants:

var/run/
var/db/openldap

De plus, nous allons créer notre base de donnée LDAP en l'enracinant ici:dc=example,dc=com. Créons donc un répertoire pour stocker la base de donnée LDAP:

var/db/openldap/example-com

Enfin, créons dans etc/ le fichier slapd.conf de configuration du serveur slapd:

include         /home/monnomamoi/outils/etc/schema/core.schema
include         /home/monnomamoi/outils/etc/schema/cosine.schema
include         /home/monnomamoi/outils/etc/schema/inetorgperson.schema
include         /home/monnomamoi/outils/etc/schema/nis.schema
pidfile /home/monnomamoi/outils/var/run/slapd.pid
password-hash {MD5}
loglevel        -1
moduleload /usr/lib/ldap/back_bdb.so
database bdb
suffix "dc=example, dc=com"
rootdn "cn=jimbob, dc=example, dc=com"
rootpw dirtysecret
directory       /home/monnomamoi/outils/var/db/openldap/example-com
index   uid     eq
index   cn,gn,mail eq,sub
index sn eq,sub
index ou eq
index default eq,sub
index telephonenumber
cachesize 10000
checkpoint 128 15
Ajoutez slapd aux services lancés par votre civet et testez le grace aux commandes ldapadd et ldapsearch. Vous pouvez pour vous aider utiliser le fichier LDIF nommé ExampleCompany.ldif et utiliser des commandes du genre ldapadd -x -W -D "cn=jimbob,dc=example,dc=com" -f ExampleCompany.ldif -H ldap://127.0.0.1:9119.

2. Dovecot (et yocto)

Dovecot est une implémentation libre des protocoles POP3 et IMAP servant à lire son mail à distance. Dovecot lit les mails stockés sur le disque dur dans un des formats standards Mbox ou Maildir et les sert par-dessus POP ou IMAP.

Yocto est un petit utilitaire qui implémente un serveur SMTP de base mais qui ne sait distribuer que les couriers destinés à des utilisateurs locaux.

Nous allons utiliser le serveur LDAP et les mots de passe qu'il peut stocker pour chaque posixAccount pour authentifier l'utilisateur qui veut se connecter à notre serveur POP. Pour pouvoir faire ce genre de traffic, le mot de passe doit être envoyé du client POP vers dovecot en clair. Pour assurer la sécurité, il nous faudrait donc utiliser une couche de communication sécurisée (POPS). Dans le cas que nous allons voir ensuite où le client POP est un serveur Apache, il faut que la communication entre l'utilisateur et le serveur Apache soit également sécurisée (HTTPS). Le but de ce TP n'étant pas de se concentrer sur les aspects de sécurité, nous ne nous occuperons pas d'utiliser des communications sécurisées et nous passerons les mot de passe en clair.

Pour fonctionner, le serveur dovecot a besoin de l'existence (dans votre civet) des répertoires suivants:

var/mail
var/run/dovecot
var/log

De plus, nous allons créer un répertoire alfred_lice pour stocker les mails de l'utilisateur alfred_lice: var/mail/alfred_lice et le fichier var/mail/alfred_lice/inbox avec le contenu minimal suivant:

From test@ici.la-bas Sat Nov  4 23:15:58 CET 2006
From: test@ici.la-bas
To: lapinou@la-haut

This is a stupid test mailbox

On pourra effectuer le même travail pour l'utilisateur bernard_ob.

Enfin, créons dans etc/ le fichier dovecot.conf de configuration du serveur dovecot:

mmap_disable=yes
login_chroot = no
base_dir = /home/monnomamoi/outils/var/run/dovecot
login_user = monlogin
auth_user = monlogin
default_mail_env = mbox:/home/monnomamoi/outils/var/mail/%u
ssl_disable = yes
protocols = pop3
protocol pop3 {
   listen = 127.0.0.1:9110
}
protocol lda {
   postmaster_address = postmaster
   hostname = localhost
   auth_socket_path = /home/monnomamoi/outils/var/run/dovecot/auth-master
}
pop3_uidl_format = %08Xu%08Xv
log_path = /home/monnomamoi/outils/var/log/dovecot.log
log_timestamp = "%b %d %H:%M:%S "
auth_executable = /home/monnomamoi/outils/bin/dovecot-auth
auth default {
  passdb ldap { 
    args=/home/monnomamoi/outils/etc/dovecot-ldap.conf
  }
  userdb ldap {
    args=/home/monnomamoi/outils/etc/dovecot-ldap.conf
}
  socket listen {
   master {
     path = /home/monnomamoi/outils/var/run/dovecot/auth-master
   }
  }
}
et le fichier dovecot-ldap.conf de liaison entre dovecot et notre serveur LDAP:
hosts=localhost:9119
ldap_version=3
deref= never
scope= subtree
auth_bind= yes
auth_bind_userdn = uid=%u,ou=accounts,dc=example,dc=com
base= uid=%u,ou=accounts,dc=example,dc=com
user_filter = (&(objectClass=posixAccount)(uid=%u))
user_attrs = homeDirectory=home
user_global_uid=11450
user_global_gid=102
Ajoutez dovecot et yocto aux services lancés par votre civet, ajoutez dans le serveur LDAP (grâce à la commandced ldappasswd) des mots de passes pour vos deux utilisateurs, et vérifiez que vous pouvez maintenant lire et envoyer des mails entre vos utilisateurs. Vous pouvez vous servir des scripts python poptest.py et smtptest.py présents dans le répertoire test de la distribution complète de civet (dans les salles de TP, ~ballier/civet/test/), pour vos essais.

3. SimpleTal

SimpleTAL est une implémentation python d'un standard permettant de faire des templates de pages Web.

Aprenez à vous servir de SimpleTAL en parcourant les exemples du site, faites le marcher par exemple en CGI.

4. Et maintenant au travail !

Écrivez un site Web de webmail capable de créer une session, d'afficher le contenu de la boite mail de l'utilisateur (authentifié auprès du serveur LDAP), de lire les mails un par un, et d'envoyer un mail en parlant au serveur SMTP yocto (qui, rappelons le, ne peut envoyer de mails qu'en local). Les pages Web de ce site doivent être réalisées en utilisant SimpleTAL.