AIX : utilisation de mailertable dans sendmail

La fonctionnalité mailertable permet de spécifier vers quel serveur MX envoyés les mails en se basant sur le nom de domaine du destinataire. Par exemple, on peut utiliser cette fonction pour éviter de faire transiter des mails jugé sensibles par internet en spécifiant un serveur mail interne par exemple. Voici la configuration sous AIX.

configuration de la table



Pour créer la table, il faut déjà créer un fichier texte avec les correspondances que l'on souhaite. Par exemple, si on veut que tout les mails en direction de mailinterne.com soit envoyé au serveur smtp.passerelle.com on ajouterait une ligne de ce type dans le fichier /etc/mail/mailertable :
mailinterne.com    smtp:[smtp.passerelle.com]
Une fois le fichier créé, il faut générer un fichier database à partir de celui-ci. Cela permet un accès plus rapide pour sendmail et cela ne marche pas sans ;-).

On utilise la commande makemap pour créer le fichier. On peut choisir entre 3 format différents de fichier(hash, dbm et btree). Ici j'utilise le format hash.
makemap hash /etc/mail/mailertable  
Cela va générer le fichier/etc/mail/mailertable.db.


le fichier /etc/sendmail.cf


Voici les modifications à effectuer : Il faut décommenter la ligne Kmailertable dans le fichier :
# Mailer table (overriding domains)
Kmailertable hash /etc/mail/mailertable
Il faut ajuster cette ligne si on a choisi un nom différent de fichier ou un format différent.
Jusque là rien de surprenant. Par contre, il faut aussi aller décommenter les règles suivantes dans le fichier, pour obtenir ceci :
 
# not local -- try mailer table lookup
R$* <@ $+ > $* $: < $2 > $1 < @ $2 > $3 extract host name
R< $+ . > $* $: < $1 > $2 strip trailing dot
R< $+ > $* $: < $(mailertable $1 $) > $2 lookup
R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 check -- resolved?
R< $+ > $* $: $>Mailertable <$1> $2 try domain
Il y a aussi l'ensemble de règles 90 qui interviennent dans la configuration mais normalement elles ne sont pas commentés.
Voici tout de même l'entrée dans le fichier :
###################################################################
### Ruleset 90 -- try domain part of mailertable entry ###
###################################################################

SMailertable=90
R$* <$- . $+ > $* $: $1$2 < $(mailertable .$3 $@ $1$2 $@ $2 $) > $4
R$* <$~[ : $* > $* $>MailerToTriple < $2 : $3 > $4 check -- resolved?
R$* < . $+ > $* $@ $>Mailertable $1 . <$2> $3 no -- strip & try again
R$* < $* > $* $: < $(mailertable . $@ $1$2 $) > $3 try "."
R< $~[ : $* > $* $>MailerToTriple < $1 : $2 > $3 "." found?
R< $* > $* $@ $2 no mailertable match


redémarrage de sendmail



On arrête le service sendmail :
stopsrc -s sendmail
On redémarre le service en précisant bien les paramètres :
startsrc -s sendmail -a "-bd -q30m"

Remarque : il n'est pas nécessaire que sendmail soit démarré pour que la configuration fonctionne. Par contre, on ne disposera des fonctionnalités avancées d'un serveur mail.

test de fonctionnement



On peut l'option -v de mail pour avoir une sortie verbeuse de la commande :
# echo test|mail  -v adejoux@mailinterne.com  
Warning: .cf file is out of date: sendmail AIX5.3/8.13.4 supports version 10, .cf file is version 9
adejoux@krystalia.fr... Connecting to smtp.passerelle.com. via smtp...
220 smtp.passerelle.com ESMTP Service (mail server) ready at Mon, 23 Jun 2008 19:25:48 +0200
>>> EHLO monserver.com
250-smtp.passerelle.com Hello monserver.com ([192.168.1.6]), pleased to meet you
250-HELP
250-SIZE 51200000
250 PIPELINING
>>> MAIL From: SIZE=26
250 adejoux@krystalia.net... Sender OK
>>> RCPT To:
>>> DATA
250 adejoux@mailinterne.com... Recipient OK
354 Enter message, end with "." on a line by itself
>>> .
250 Message accepted for delivery
adejoux@mailinterne.com... Sent (Message accepted for delivery)
Closing connection to smtp.passerelle.com.
>>> QUIT
221 smtp.passerelle.com SMTP Service closing transmission channel

Cela permet de voir que l'on communique bien avec le bon serveur (ici smtp.passerelle.com).

conclusion



La configuration de cette fonction n'est pas spécialement compliqué mais le fait de devoir dé-commenter la règle dans le fichier de configuration m'a fait cherché un peu quand même :-).