Introduction aux règles check_*
Ces règles ont été introduites à partir de la version 8.9 dans le but de contrôler les adresses expéditeurs et destinataires et éviter tout type d'abus (relaying). Si vous souhaitez installer Sendmail, il est recommandé de passer au moins à la version 8.9.3 qui possède des niveaux de contrôle assez élevés pour éviter le relai.
Ces règles de contrôle sont au nombre de 4:
check_mail
contrôle de la commande MAIL FROM:
La règle contrôle les adresses emails des expéditeurs. A ce niveau vous pouvez par exemple bloqué une adresse email ou un domaine qui tenterait tout type d'abus.
Comme par exemple:
Créez le fichier /etc/mail/blockusers et ajoutez:
spamming.com REJECT
Regénérer la base: makemap dbm blockusers < blockusers.
Rajouter dans votre Sendmail.cf:
Kblockusers dbm /etc/mail/blockusers
Scheck_mail
R$* $: $>3 $1 passage de l'adresse a la regle 3
R$* $: $(blockusers 2 $) Inspection de la base blockusers
RREJECT $#error $@ 5.7.2 $: Domaine bloque.
Vous pouvez tester cette règle ensuite:
/usr/sbin/sendmail -bt -d21.4
> check_mail test@spamming.com
> check_mail test@spamming.com check_mail input: test @ spamming . com
-----callsubr 3 (3) canonify input: test @ spamming . com
rewritten as: test @ spamming . com < @ >
rewritten as: test @ spamming . com
rewritten as: < test @ spamming . com >
rewritten as: test @ spamming . com
rewritten as: test < @ spamming . com >
-----callsubr Canonify2 (96) Canonify2 input: test < @ spamming . com >
rewrite: RHS $&daemon_flags => "(NULL)"
rewritten as: $| test < @ spamming . com > spamming.com: Name server timeout
rewritten as: test < @ spamming . com > Canonify2 returns: test < @ spamming . com >
rewritten as: test < @ spamming . com > canonify
returns: test < @ spamming . com >
rewritten as: test < @ spamming . com > rewritten as: REJECT
rewritten as: $# error $@ 5 . 7 . 2 $: Domain reject
check_mail returns: $# error $@ 5 . 7 . 2 $: Domain reject
== Ruleset check_mail (189) status 75
>
check_relay
Cette règle ne permet pas la mise en place de l'anti-relaying. Elle permet le contrôle du nom d'hôte et de l'adresse séparé par l'opérateur $| (ce méta symbole sépare les adresses expéditeur et destinataire dans la LHS) mais le ma. Cette règle s'applique dès qu'un client se connecte au serveur Sendmail. Exemple: créez les macros:
F{DeniedIP} /etc/mail/DeniedIP
F{DeniedNames} /etc/mail/DeniedNames
Et un peu plus bas la la section des règles:
Scheck_relay
R$+ $| $={DeniedIP}$* $#error $@ 5.7.1 $: "no access from your IP address"
R$*$={DeniedNames} $| $* $#error $@ 5.7.1 $: "no access from your host"
check_compat
La règle vérifie l'expéditeur et le destinataire (séparé par $| ) mais vous ne pouvez pas utiliser cette règle pour prévenir de l'anti-relai car à ce niveau le mail est déjà rentré sur la machine.
Scheck_compat
R$+ $| $+ $: $1 $| $>3 $1 canonicalize sender (on recupere le nom de domaine exp)
R$+ $| $+ $: $2 $| $>3 $1 canonicalize recipient (on recupere le nom de domaine dest)
R$- $| $+ $@ok c'est du sender local ca c'est ok
R$+ $| $- $@ok c'est un destinataire local ok
R$+<@$=w.> $| $+ $@ok c'est du sender local ca c'est ok ($=w est le domaine gere par sendmail)
R$+ $| $*<@$=w.> $@ok c'est un destinataire local ok
R$* $#error $@ 5.7.1 $: "550 relai refuse" le reste refuse
check_rcpt
Vérification du destinataire du mail.
Cette règle intervient également pour les protections contre le relai (grâce à l'utilisation des macros ${client_name}, ${client_addr} et ${client_port}). Voiçi un exemple pour comprendre la protection à mettre en place:
Scheck_rcpt
R$+ $: $(dequote "" $&{client_addr} $) $| $1 #on recupere l'adresse IP expeditrice
#on effectue des tests sur l'adresse IP récupérée
R0 $| $* $@ok #pas d'adresse IP (directement invoquée en mode debugg)
R$={LocalIP}$* $| $* $@ok #Lecture dans le fichier des adresses autorisees au relay
R$* $| $* $: $3 $2 # remove local part, maybe repeatedly
R$+ $:$remove_local $1 # still something left?
R$*$* $#error $@ 5.7.1 $: 550 we do not relay
Vous ne pouvez pas utiliser cette règle pour vous protéger contre le relai si vous vous connectez via un provider (adresse IP dynamique). Si vous envisagez d'envoyer des mails via un un poste itinérant, vous avez la possibilité d'utiliser l'authentification ESMTP (SASL).