Postfix et une fonctionnalité ‘vacation’ pour les utilisateurs virtuels

Dans un précédent article (Variations autour de Postfix (part.1 ) : serveurs virtuels et bases de données), je présentais une méthode de gestion de domaines et utilisateurs virtuels stockés dans une base de données. Ce nouvel article y fait suite en ajoutant la fonctionnalité ‘vacation’ pour les utilisateurs virtuels, qui consiste en l’envoi d’une réponse automatique lors de la réception d’un message informant l’émetteur de l’absence de l’utilisateur virtuel..La fonctionnalité ‘vacation’ est à disposition des utilisateurs de systèmes Unix* depuis la nuit des temps (apt-get install vacation pour une Debian ou dérivée …), il ne reste plus à notre utilisateur qu’à invoquer cette commande et créer un fichier .vacation-msg dans son répertoire home pour l’activer …
Pour ce qui est d’utilisateurs virtuels, n’ayant donc pas de compte sur la machine, il n’est pas possible d’implémenter cette méthode.

Le principe que je décris ici est dérivé du projet Postfix Admin, et se base sur un script perl chargé d’effectuer l’envoi de l’e-mail de réponse, et appelé par Postfix lors de la réception d’un message pour un compte configuré pour la vacation.
Afin de lancer la mécanique, le compte se verra attribué un alias supplémentaire sur un domaine fictif tel que ‘autoreply.mydomain.com’ ; lors de l’arrivée d’un message, Postfix le distribuera normalement et le retransmettra également vers une BAL de ce domaine fictif : c’est donc cette retransmission qui servira à appeler le script Perl générant la réponse.

Afin de minimiser l’impact sur la sécurité du système, Postfix lancera le script Perl sous l’identité d’un utilisateur dédié, dépourvu de mot de passe et de réel répertoire home, et en outre affublé d’un faux shell :

#cat /etc/passwd
vacation:*:1002:1002:,,,:/nonexistent:/bin/false

#cat /etc/group
vacation:x:1002:

On crée ensuite un répertoire dans lequel sera installé le script Perl vacation.pl :

#mkdir /var/spool/vacation && cp vacation.pl /var/spool/vacation/ && chown -R vacation.vacation /var/spool/vacation && chmod 700 /var/spool/vacation/vacation.pl

Reste maintenant à configurer Postfix en rajoutant le service de transport vacation dans le fichier master.cf :

#
# vacation mecanism (ref. /var/spool/vacation/vacation.pl )
#
vacation   unix  -      n       n       -       -       pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}

et en créant la mécanique de transport vers le service vacation pour tout mail arrivant sur notre domaine fictif :

#cat /etc/postfix/transport
autoreply.mydomain.eu    vacation:

et au besoin rajouter cet hôte dans le fichier /etc/hosts, sans oublier de générer le fichier db correspondant :

#postmap /etc/postfix/transport

enfin, de relire la configuration :

#/etc/init.d/postfix reload

A partir de maintenant tout mail arrivant sur @autoreply.mydomain.eu sera donc retransmis au script vacation.pl pour générer la réponse :

#cat /var/log/mail.log :

Aug  7 15:42:10 ns214567 postfix/cleanup[12974]: BA6CD6E929: messageid=<20120807_134210_060444.francois@xxxxx.fr>
Aug  7 15:42:10 ns214567 postfix/smtpd[13131]: disconnect from localhost.localdomain[127.0.0.1]
Aug  7 15:42:10 ns214567 postfix/qmgr[21907]: BA6CD6E929: from=<francois@xxxxx.fr>, size=625, nrcpt=1 (queue active)
Aug  7 15:42:10 ns214567 postfix/pipe[12978]: 563956E6B3: to=<francois#xxxxx.fr@autoreply.mydomain.eu>, orig_to=<francois@xxxxx.fr>, relay=vacation, delay=0.47, delays=0.26/0/0/0.2, dsn=2.0.0, status=sent (delivered via vacation service)
Aug  7 15:42:10 ns214567 postfix/qmgr[21907]: 563956E6B3: removed
Aug  7 15:42:11 ns214567 postfix/smtp[13135]: BA6CD6E929: to=<francois.figarola@yyyyy.fr>, relay=ASPMX.L.GOOGLE.C
OM[173.194.66.26]:25, delay=0.53, delays=0.04/0/0.09/0.38, dsn=2.0.0, status=sent (250 2.0.0 OK 1344346931 o3si23030871wiz.4)

Dès lors, la configuration d’un compte pour l’auto-réponse ‘vacation’ va consister à créer un alias pour ce compte qui va servir le compte lui-même et son alter-égo sur le domaine fictif dans la table alias créée lors du précédent article, par exemple :

la vacation pour le compte jean@exemple.com devra générer l’alias : jean@exemple.com,jean#exemple.com@autoreply.mydomain.eu

Afin que les utilisateurs virtuels puissent basculer eux-même leur compte, j’ai utilisé le plugin vacation du webmail RoundCube qui permet d’effectuer cette manipulation et de spécifier le message d’absence. via l’onglet ‘répondeur’ des préférences utilisateur :

Configuration de la vacation via le webmail RoundCube

Configuration de la vacation via le webmail RoundCube

… Et bonnes vacances !

posté le 7. août 2012 à 4:01 pm par info · Permalink
Catégories : Administration système · Mots-clés: ,

Ajoutez un commentaire