informatique:reseau:messagerie:maildrop

Maildrop

Maildrop est un MDA (Mail Delivry Agent) pouvant se subtituer à Postfix au moment de délivrer les mails.

Postfix lui passera le mail en lui passant en paramètre le nom ou le mail de l'utilisateur pour que celui-ci aille le déposer dans sa boite mail.

  • main.cf
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1
  • master.cf
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:daemon argv=/usr/bin/maildrop -d **${recipient}**

Remarques :

  • utiliser ${user} à la place ${recipient} pour lui passer le nom de l'utilisateur plutôt que l'adresse mail.
  • Penser à redémarrer Postfix pour appliquer ces modifications
  • /etc/maildropldap.config
# hostname - host name of your ldap server
hostname        ldap1 ldap2

# basedn - base DN by which to search for LDAP entries
basedn          ou=people,o=example

# binddn, bindpw - optional, binddn and password if your ldap server
# requires you to authenticate before searching
binddn cn=mail,ou=softwareaccounts,o=example
bindpw mailpassword

# timeout - specifies maximum time ( in seconds ) to wait for a response
# from the LDAP server
timeout         10

# search_method - used to specify whether to search on the users id, or
# email address, and may be either 'mail' or 'uid'
#
# if set to 'mail' (default) then to deliver mail to a user you must
# specify the entire email address:
#   ie.   maildrop -d joeuser@domain.com
#
# if set to 'uid' then to deliver mail to a user you need only specify
# the users id (username)
#   ie.   maildrop -d joeuser
#
search_method           mail

# default_uid - default uid (number only) to use incase uidnumber attribute not
# found in users ldap entry
default_uidnumber       1000

# default_gid - default gid (number only) to use incase gidnumber attribute not
# found in users ldap entry
default_gidnumber       1000

# MAIL_ATTR - LDAP attribute which contains the users complete email address
mail_attr               maildrop

# UID_ATTR - LDAP attribute which contains the users name (w/o domain)
uid_attr                uid

# MAILDIR_ATTR - LDAP attribute which contains the path to the users
# custom maildir
maildir_attr            mailbox

# HOMEDIRECTORY_ATTR - LDAP attribute which contains the path to the users
# home directory
homedirectory_attr      mailbox

# QUOTA_ATTR - LDAP attribute which contains the users quota
quota_attr              mailQuota

Le fichier /etc/maildroprc contient les actions effectuées par maildrop pour délivrer le mail (un peu comme ~/procmailrc).

  • /etc/maildroprc
# Global maildrop filter file
DEFAULT="$HOME"

`test -d $DEFAULT`

if ( $RETURNCODE == 1 )
{
        `maildirmake $DEFAULT`
}

if (/^X-Spam-Status: Yes/)
{
        `test -d $DEFAULT/.Junk`
        if ( $RETURNCODE == 1 )
                {
                        `maildirmake $DEFAULT/.Junk`
                }

        to "$DEFAULT/.Junk/"
}

`test -r $HOME/.mailfilter`
if( $RETURNCODE == 0 )
{
   log "(==)  Including $HOME/.mailfilter"
   exception {
     include $HOME/.mailfilter
   }
}

Explication : Ici Maildrop testera d'abord si la boite mail (la Maildir) existe et le créera sinon. Puis si le mail est reconnu comme un spam (via le header du mail X-Spam-Status: Yes), il le délivrera dans le dossier Junk de la boite mail (si le dossier n'existe pas, il le créera). Puis enfin, si le fichier .mailfilter dans le home de l'utilisateur, il inclura dans son traitement. Si le mail n'est pas délivré pendant le traitement (directive to), le mail sera délivré à la racine de la boite mail (dans la Boite de réception) dont le chemin est contenu dans la variable $DEFAULT.

Maildrop utilise les librairies de Courier pour l'authentification des utilisateurs. Il utilise plus précisément authdeamon, le serveur d'authentification de Courier. Pour communiquer avec ce service, Maildrop utilise la socket de celui-ci : /var/run/courier/authdeamon/socket. L'utilisateur exécutant Maildrop doit donc y avoir accès. Pour cela le plus simple est de placer l'utilisateur dans le groupe daemon (dans le fichier /etc/group) pour vos tests manuels et de configurer Postfix pour qu'il exécute Maildrop avec les droits du groupe daemon.

Extrait du fichier master.cf

 maildrop  unix  -       n       n       -       -       pipe
   flags=DRhu **user=vmail:daemon** argv=/usr/bin/maildrop -d ${recipient}

Remarque : man 8 pipe pour plus d'informations à ce sujet

Dans son mécanisme, Maildrop tente un login auprès de authdeamon pour vérifier que l'utilisateur destinataire existe bien, il faut donc que l'information passer par Postfix par le paramètre -d soit reconnu comme nom d'utilisateur de connexion par authdeamon. Par défaut, celui-ci attend le nom d'utilisateur (Exemple : toto) mais pas le mail (Exemple : toto@domain.com). Si vous utiliser la reconnaissance de l'utilisateur par son adresse mail, il faut donc configurer authdeamon pour qu'il accepte l'authentification par l'adresse mail.

  • /etc/courier/authldaprc
LDAP_EMAILMAP           (mail=**@user@**@**@realm@**)
LDAP_EMAILMAP_ATTRIBUTE uid
LDAP_EMAILMAP_MAIL      uid

Remarque : La composition de LDAP_EMAILMAP se fait à partir des mots clefs @user@ et @realm@ correspondant respectivement au nom d'utilisateur et au domaine du mail (tout se qu'il y a avant et après le @ dans l'adresse mail passé en paramètre).

Avant de configurer Postfix pour délivrer les mails via Maildrop, mieux vaut tester que tout fonctionne correctement. Pour cela :

  • Changer d'utilisateur pour celui utilisé par Postfix pour lancer Maildrop
su - vmail
  • Préparer vous un fichier contenant un mail avec ces headers. Pour cela écrivez en un à la main ou récupérez en un dans la Maildir de votre utilisateur

Exemple :

From: test@example.com
To: toto@domain.com
Subject: test

test
  • Excuter Maildrop
maildrop -d toto < /tmp/mail.test

ou

maildrop -d toto@domain.com < /tmp/mail.test

en fonction de comment vous avez configuré Maildrop.

La commande devrai rien retourner et le mail devrai se trouvé dans la Maildir de l'utilisateur.

ERR: authdaemon: s_connect() failed: Permission denied

C'est un problème de droits d'accès à la socket de authdeamon. Vérifier vos droits.

Invalid user specified

L'utilisateur ou le mail passé en paramètre n'a pas été reconnu.

  • informatique/reseau/messagerie/maildrop.txt
  • Dernière modification : 2012/02/03 14:40
  • de bn8