1 votes

Échec du développement de la chaîne de caractères dans manualroute

J'ai essayé d'ajouter une route avec une redirection basée sur l'enregistrement mx.

Mais mes regexp ne fonctionnent jamais.

Exim 4.90, os ubontu 18.04.

Ma configuration :

non_mydom_mx:
  driver     = manualroute
  #condition = ${lookup dnsdb{mxh=^mx\d\.mydom\.net}{true}fail}
  condition  = ${lookup dnsdb{mxh=^.*\$}{true}fail}
  transport  = non_mydom
  route_list = * 192.168.0.11

Le test de routage a échoué :

mk@mydom.net
    <-- mk@mydom.net
  router = dnslookup, transport = remote_smtp
  host mx1.mydom.net [xxxx] MX=10
  host mx2.mydom.net [xxxx] MX=20

1voto

Ted Points 51

Il y a quelques problèmes à ce niveau. Le plus important est que le $ à la fin de l'expression rationnelle n'est pas échappé, exim pense donc qu'il s'agit du début d'une variable. L'expression ne peut donc pas être développée.

Le plus gros problème est que la dnsdb lookup effectue une simple requête DNS, et c'est tout. Donner une regexp dans la recherche n'a pas de sens, puisque de cette façon, la requête serait ambiguë. Dans votre cas, la recherche est quelque chose comme "donnez-moi une adresse MX, je ne me soucie pas de laquelle", et cela ne fonctionne manifestement pas. Même si vous échappez le $ exim ne développe même pas l'expression rationnelle donnée, mais tente de rechercher l'enregistrement MX pour l'hôte nommé ^.*$ .

Le routage basé sur l'enregistrement MX peut être effectué de cette manière :

non_mydom_mx:
   driver     = manualroute
   condition = ${if match {${lookup dnsdb{>: mxh=$domain}}}{[^:]\d\.mydom\.net}{yes}{no} }
   transport  = non_mydom
   route_list = * 192.168.0.11

Ici, vous demandez le nom d'hôte MX pour le domaine du destinataire. Puisqu'un domaine a tendance à avoir plus d'enregistrements MX, la recherche concatène les résultats, séparés par des caractères : (ceci est spécifié par l'option >: au début de la valeur de recherche). La valeur donnée par le dnsdb est utilisée dans un match qui compare le résultat à une expression rationnelle (qui prend en compte les éléments suivants : comme début d'une nouvelle ligne). Si le résultat correspond, la condition se traduit par un yes sinon, a no Dans ce cas, le routeur décline.

Il convient de mentionner qu'exim dispose d'une excellente sortie de débogage, donc si vous êtes bloqué, lancez simplement exim en mode débogage comme ceci :

exim4 -d+all -bd -oX 25252 2>&1|tee exim-debuglog.txt

Ensuite, la connexion au port donné ( 25252 ) et en essayant d'envoyer un simple message, exim écrira toutes les informations relatives au traitement du message, y compris les ACL, les routeurs et les étapes d'expansion des variables. Cela peut s'avérer utile si vous essayez de comprendre pourquoi une certaine règle ne fonctionne pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X