Je m’étais aussi fait suer pour y parvenir avec exim3 et je n’étais pas chaud pour tout refaire avec exim4 sachant que la configuration avait pas mal changé, c’est pourquoi j’ai retardé le plus longtemps possible la migration vers exim4…
Ma difficulté est que j’utilise le type “envoi par smarthost, réception par SMTP”, qui a la particularité de rendre inefficace la vérification des domaines non locaux puisque tout ce qui n’est pas local est routé vers le smarthost au lieu de faire une requête DNS de type MX pour le domaine. En mode “site internet” avec envoi direct par SMTP on n’a pas ce souci.
J’ai donc ajouté un transport spécifique pour la vérification avant le transport principal.
### router/170_exim4-config_verify
#################################
# This file contains the router for verifying sender/recipient only
.ifdef DCconfig_internet DCconfig_smarthost DCconfig_satellite
# configtype=internet or configtype=smarthost or configtype=satellite
# router for verifying non-local sender/recipient only
dnslookup_verify:
verify_only
address_data = verify_remote_domain
debug_print = "R: dnslookup_verify for $local_part@$domain"
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
same_domain_copy_routing = yes
# ignore private rfc1918 and APIPA addresses
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 : 192.168.0.0/16 :\
172.16.0.0/12 : 10.0.0.0/8 : 169.254.0.0/16 :\
255.255.255.255
no_more
.endif
Ensuite j’ai dû modifier l’ACL acl_check_rcpt qui fait les vérifications après la réception d’une commande SMTP RCPT. Pour ne pas toucher au fichier originel et que mon fichier ne soit pas écrasé lors d’une mise à jour d’exim4, j’ai créé un fichier .rul qui est pris en compte à sa place lors de la création de la configuration.
Voici le diff entre les deux fichiers.
--- acl/30_exim4-config_check_rcpt 2008-03-01 10:01:34.000000000 +0100
+++ acl/30_exim4-config_check_rcpt.rul 2010-09-13 10:38:45.000000000 +0200
@@ -1,5 +1,5 @@
-### acl/30_exim4-config_check_rcpt
+### acl/30_exim4-config_check_rcpt.rul
#################################
# This access control list is used for every RCPT command in an incoming
@@ -12,6 +12,9 @@
# testing for an empty sending host field.
accept
hosts = :
+ # debut ajout
+ verify = recipient/defer_ok
+ # fin ajout
# The following section of the ACL is concerned with local parts that contain
@@ -83,6 +86,17 @@
.endif
+ # debut ajout
+ require
+ verify = recipient
+
+ deny
+ message = Sender verification failed for remote domain
+ condition = ${if eq {$address_data} {verify_remote_domain}}
+ ! verify = sender
+ # fin ajout
+
+
# Accept mail to postmaster in any local domain, regardless of the source,
# and without verifying the sender.
#