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.
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 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 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).
Tests
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.
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.