====== Maildrop ====== **Maildrop** est un **MDA** (//Mail Delivry Agent//) pouvant se subtituer à [[informatique:reseau:messagerie:postfix|Postfix]] au moment de délivrer les mails. [[informatique:reseau:messagerie:postfix|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. ===== Configuration de Postfix ===== * 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 [[informatique:reseau:messagerie:postfix|Postfix]] pour appliquer ces modifications ===== Configuration de Maildrop ===== ==== Configuration LDAP ==== * /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 ===== Configuration du filtrage ===== 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//. ===== Configuration de Courier ===== Maildrop utilise les librairies de [[informatique:reseau:messagerie:courier|Courier]] pour l'authentification des utilisateurs. Il utilise plus précisément **authdeamon**, le serveur d'authentification de [[informatique:reseau:messagerie:courier|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 [[informatique:reseau:messagerie:postfix|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 [[informatique:reseau:messagerie:postfix|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). ===== Tests ===== Avant de configurer [[informatique:reseau:messagerie:postfix|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. ==== Problèmes possibles ==== 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.