LDAP, Dovecot, fetchmail, procmail

Le but ici est de mettre en place un serveur imap avec une identification par serveur LDAP qui pourra éventuellement servir de carnet d’adresse partagé.
Le point de départ est un ensemble de compte mails hébergés sur un serveur qui ne propose malheureusement qu’un accès pop3.
Ça permet entre autre d’avoir un double des mails par rapport aux clients que peuvent avoir les utilisateurs ainsi que d’avoir une politique de sauvegarde (ça peut toujours servir), de partager un carnet d’adresses et même un ou des répertoires de mails.

Vu que je ne décris que la configuration minimum pour que ça fonctionne, il ne faut pas hésiter à pousser la recherche, notamment pour une définition plus poussée des droits d’accès à l’annuaire LDAP, je laisse celle par défaut ici.

Serveur d’authentification: LDAP
Serveur IMAP: Dovecot
Utilitaires de rapatriement des mails: fetchmail, procmail.

Commençons par installer et configurer openLDAP:

pacman -S openldap

Générons d’abord un mot de passe:

$ slappasswd 
New password: 
Re-enter new password: 
{SSHA}/lzUz+0mTGl9DGnG5XJQBdKxwaWNUSic

Configuration de /etc/slapd.conf:

include		/etc/openldap/schema/core.schema
include		/etc/openldap/schema/cosine.schema
include		/etc/openldap/schema/inetorgperson.schema
include		/etc/openldap/schema/misc.schema
include		/etc/openldap/schema/nis.schema
pidfile   	/var/run/slapd.pid
argsfile  	/var/run/slapd.args
database	bdb
suffix		"dc=home,dc=lan"
rootdn		"cn=admin,dc=home,dc=lan"
rootpw		{SSHA}/lzUz+0mTGl9DGnG5XJQBdKxwaWNUSic
directory	/var/lib/openldap/openldap-data
index	objectClass	eq

Peuplons un peu la base, test.ldif:

dn: dc=home,dc=lan
objectClass: domain
dc: home


dn: ou=people,dc=home,dc=lan
ou: people
objectClass: top
objectClass: organizationalUnit


dn: ou=group,dc=home,dc=lan
ou: group
objectClass: top
objectClass: organizationalUnit


dn: cn=dovecot, dc=home, dc=lan
objectClass: top
objectClass: person
objectClass: organizationalPerson
cn: dovecot
sn: dovecot


dn: uid=tuxce,ou=people,dc=home,dc=lan
uid: tuxce
cn: tuxce last name
givenName: tuxce
sn: tuxce
mail: tuxce@home.lan
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
displayName: tuxce
ldapadd -D 'cn=admin,dc=home,dc=lan' -x -W -f test.ldif

Définissons un mot de passe pour dovecot:

ldappasswd -D 'cn=admin,dc=home,dc=lan' -x -W -S 'cn=dovecot,dc=home,dc=lan'

On devrait déjà avoir un serveur utilisable, à chacun de configurer les droits d’accès selon son schéma.

Installation et configuration de Dovecot:
Sous archlinux, comme d’habitude:

pacman -S dovecot

Le serveur imap accueillera des comptes n’ayant pas forcément d’équivalent en terme de compte utilisateur sur le serveur, il nous faut donc utiliser des utilisateurs virtuels.

Dovecot devra utiliser un seul utilisateur que l’on va nommer vmail et les boîtes au lettres seront stockées dans son répertoire personnel:

useradd -s /bin/nologin -m -d /home/vmail -c 'Virtual Mail User' vmail

Modification de /etc/dovecot.conf (je n’indique ici que ce que j’ai modifié):

mail_location=maildir:/home/vmail/%u
mail_uid = vmail
mail_gid = vmail
auth default {
  mechanisms = plain
  passdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
  userdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
}

Modification de /etc/dovecot/dovecot-ldap.conf:

hosts = localhost
dn = cn=dovecot,dc=home,dc=lan
dnpass = test
auth_bind = yes
auth_bind_userdn = uid=%u,ou=people,dc=home,dc=lan
ldap_version = 3
base = ou=people, dc=home, dc=lan
scope = subtree

user_filter = (&(objectClass=organizationalPerson)(uid=%u))

pass_attrs = uid=user,userPassword=password
pass_filter = (&(objectClass=organizationalPerson)(uid=%u))

Passons maintenant à la configuration de fetchmail et procmail:

pacman -S fetchmail procmail

Pour accéder au compte vmail vu que je l’ai crée avec le shell /sbin/nologin:

su - -s /bin/bash vmail

Création de .procmailrc:

PMDIR=/home/vmail
MAILDIR="$PMDIR/$1/"
LOGFILE=$PMDIR/procmail.log
VERBOSE=on

:0
"$MAILDIR"

Création de .fetchmailrc:

set daemon 1200 # 20 mn
set logfile fetchmail.log
set invisible
set bouncemail

poll "pop.exemple.org" protocol pop3 
user "tuxce@exemple.org" password "toto" mda "/usr/bin/procmail -a tuxce"
# Pour tester, je vous conseille d'utiliser la ligne suivante:
#user "tuxce@exemple.org" password "toto" keep mda "/usr/bin/procmail -a tuxce"
# Histoire de pas de se retrouver avec des mails perdus

Démarrage des serveurs et test:

/etc/rc.d/slapd start
/etc/rc.d/dovecot start
su - vmail -c "fetchmail"

Il ne reste plus qu’à configurer un client imap et à rafraîchir l’arborescence.