Modifications des règles de filtrage

Ce document reprend la liste des modifications visibles par l'utilisateur effectuées sur le système de filtres.

Modifications du vendredi 21 novembre 2003

Nouvelles fonctionnalités

Commande stop

Cette commande arrete l'exetution du filtre et utilise la méthode de livraison par défaut. Mis à part qu'elle est plus propre, cette commande est équivalente à un skiptovers une étiquette inexistante.

Interface avec SpamAssassin

SpamAssassin est un filtre de courrier pour identifer un spam. Sa base de règles reprend de nombreux tests heuristiques sur les en-têtes et le texte du message pour identifier un "spam" (courrier commercial non sollicité).

L'interface envoie le courrier à SpamAssassin, récupère le résultat et les tests effectués, puis elle les présente afin que vous puissiez déterminer l'action appropriée. Les tests recourant au réseau (DNS, RAZOR, PYZOR, DCC, etc.) sont désactivés.

  • Une commande spamassassin qui ajoute les entêtes X-Spam-Status et X-Spam-Level
  • Un scalaire « a » qui donne nombre de points de SpamAssassin pour ce message. Le nombre de points est plus important pour les spams.

Exemples

Rejeter un message dont le nombre de points est supérieur à 5 :


  $a>5 bounce

Rejeter un message que SpamAssassin voit comme un spam :


  : spamassassin
  X-Spam-Status: /^yes/   bounce

Décompte d'en-têtes

Le scalaire « h » indique le nombre d'entête présente dans le message. Si « h » est suivi d'une liste d'en-têtes, séparés par « : », le nombre des en-têtes de cette liste est indiqué.

Exemples


  $h>20   bounce plus de 20 en-tetes

  $hCc:To>20   bounce plus de en-tetes 20 To et Cc

Modifications du lundi 10 novembre 2003

Nouvelles fonctionnalités

Commande debug

La commande debug génère un courrier reprenant la liste des lignes du filtre qui ont déclanché une action à partir de la ligne où a été activée cette commande.

Vous pouvez déclancher le débugage selon l'expediteur, le sujet, etc. Par exemple :


  Return-Path: /toto@example.com/a    debug
  #
  # suite du filtre ...

Modifications du lundi 20 octobre 2003

Changements incompatibles avec la version précédente

Antivirus par défaut

Lorsque l'anvivirus a détécté un virus dans le courrier et le courrier n'a pas été explicitement délivré par une commande du filtre (deliver, forward, drop, etc.), alors une notification est déposée et le courrier est jeté.

Cette notification reprend le nom du virus détecté et les entêtes du courrier.

Si vous voulez

* Ne plus recevoir de virus ni de notification
Mettez une ligne comme ceci au début
$v>0 drop virus
* Recevoir les virus sans les notification
Il faut que vous demandiez explicitement à les recevoir. Par exemple :
$v>0 deliver
* Recevoir les notifications tout en filtrant.
Il faut brancher le filtre sur la fin, en l'envoyant sur une étiquette inexistante.
$v>0 skipto fin

Remarquez que la notification est envoyée à l'emplacement indiqué par la commande default.

Modifications du lundi 13 octobre 2003

Changements incompatibles avec la version précédente

Les caractères accentués ne sont plus supportés en direct dans les filtres

Aucune restriction n'est pour l'instant mise en œuvre, tout continue de fonctionner comme avant mais ceux qui utilisent des caractères non ascii dans leurs filtres doivent faire autrement.

Par exemple, pour vérifier qu'un en-tête contient des plus de cinq caratères sur 8 bits de suite, n'écrivez pas /[¡-ÿ]{5}/ mais /[^ -~]{5}/.

Bien que n'ayant jamais été officiellement supportés, les caratères non ASCII ont été tolérés. Leur désuétude dans les filtres a pour but de remplacer à moyen terme leur système de codage par un système plus universel.

Nouvelles fonctionnalités

Décodage RFC 2047 des en-têtes.

Il est possible de décoder des en-têtes comporant des séquences codées selon la RFC 2047. Ses séquence ont la forme suivante :


  =?XXX?Y?ZZZZZZZZZZZZ?=

Pour celà, il faut faire précéder le nom de l'en-tête que l'on veut décoder par un tilde « ~ » :


  ~Subject: /test/
Vérifiera un courrier dont le sujet est =?us-ascii?b?dGVzdA==?= sous sa forme codée.

L'en-tête sera transformé en un jeu de caractère universel et codé UTF-8 sur lequel on peut faire passer des filtres.

Voir la documentation pour plus de détails.

Type d'expression compatibles avec perl et supportant UTF-8

Les expressions de forme //pu et //Pu reconnaissent les caractères en UTF-8. Les autres types d'expressions doivent être réservés à des séquences simples ou ne comprennant que des caractères ASCII.

Voir la documentation pour plus de détails.

Décompte des en-têtes

Le scalaire « h » indique le nombre d'en-têtes présents dans le courrier. Il peut être suivi d'une liste de noms d'en-têtes, séparés par deux points (« : ») pour restreindre ce compte aux en-têtes de cette liste. Exemple :

$hTo:Cc>10   bounce  Too many To and Cc

Modifications du lundi 8 septembre 2003

Changements incompatibles avec la version précédente

Changement d'Antivirus

L'antivirus interne des filtres a été remplacé par ClamAV.

Nouvelles fonctionnalités

Commande « moved »

Cette commande renvoie le courrier avec une notification indiquant que l'adresse a changé. Une nouvelle adresse peut être précisée en argument et l'on peut rédiger son propre message d'erreur. Consultez la documentation pour les détails.

Modifications du mercredi 27 août 2003

Changements incompatibles avec la version précédente

Suppression de liste noire

La liste OSIRUSOFT n'est plus en état de marche.

Modifications du mercredi 9 avril 2003

Nouvelles fonctionnalités

Test de domaine

Les listes d'adresses (expressions //a et //A) peuvent vérifier toutes les adresses d'un domaine.

La syntaxe est la suivante :


  To: /@example.com/a    deliver
Tous les courriers dont l'entête To contient une adresse du domaine example.com seront délivrés.

Ensembles d'entête

Il y a 26 groupes d'entêtes, une par lettre de l'alphabet, définissables par l'utilisateur à l'aide de la commande header_set. Par exemple :


: header_set t To Cc Delivered-To
: header_set f From Sender X-Sender Return-Path
Défini deux ensembles « t » et « f » contenant les entêtes To, Cc et Delivered-To pour le premier et From, Sender, X-Sender et Return-Path pour le second. Il est alors possible des les utiliser pour filtrer des entêtes en les préfixant par « % » :


%t:    /@example.net/a  drop
%f:    /@example.com/a  deliver
Ce qui évite d'écrire


To:Cc:Delivered-To:                 /@example.net/a  drop
From:Sender:X-Sender:Return-Path    /@example.com/a  deliver

Notez que seul la première lettre du nom de l'ensemble est prise en compte. Les deux lignes suivantes sont équivalentes :


: header_set f
: header_set from
ainsi que les deux lignes ci dessous :


%f:       /@example.com/a  deliver
%from:    /@example.com/a  deliver

Modifications du vendredi 14 mars 2003

Changements incompatibles avec la version précédente

Suppression de liste noire

La liste VISI n'est plus en état de marche.

Modifications du mercredi 12 février 2003

Changements incompatibles avec la version précédente

Format des logs

Désormais, lorsqu'un courrier subit plusieurs actions de livraisons (en raison de duplicateurs comme deliver2 ou forward2, sa trace n'est mise dans les logs qu'une fois et plusieurs lignes "Action:" sont insérées. L'ordre correspond à l'ordre d'exécution de ces actions, l'action finale (deliver, bounce, etc.) est toujours exécutée la première et apparait donc en tête de liste. Le délai affiché est celui de l'exécution complète et le score est le score final.

Les logs sont écrites intégralement si un des évènements de livraison est actif à l'endroit où l'action est définie.

Nouvelles fonctionnalités

Tests de scalaires

Il est possible de comparer des variables entières (scalaires) sans avoir à affecter le score.

$x<y         action
$x<=y        action
$x>y         action
$x>=y        action
$x=y         action
$x<>y        action
Exécute "action" si le scalaire x est respectivement strictement inférieur, inférieur ou égal, strictement supérieur, supérieur ou égal, égal ou différent du scalaire y.

Pour tester si un scalaire x est non nul, on procède ainsi

$x           action

Les variables scalaires sont les variables utilisées pour affecter le score (s pour la taille, l pour le nombre de ligne, etc.) Si un scalaire est omis, c'est le score qui est comparé. Les lignes ci dessous regarde toutes si le score est inférieur à 10 :

<10            action
$<10           action
$10>           action

Par exemple, si on voulait déposer dans le dossier petit les courriers de taille inférieurs à 10 Ko, il fallait procéder ainsi :


:             score =s
<10k          deliver petit

On peut maintenant avoir le même résultat en une ligne sans affecter le score :


$s<10k          deliver petit

Nouvelle liste noire

La liste noire SPAMCOP a été ajoutée. Elle vérifie les adresses de manière assez aggressive.

Modifications du vendredi 10 janvier 2002

Changements incompatibles avec la version précédente

Ajout du délai de traitement dans les logs utilateurs

Le champ Status dans les logs indique désormais le délai de traitement, dans l'exemple ci dessous, il est de 13 centièmes de seconde. Par exemple :


Status: score=0, size=189419, lines=2486, rcpts=1, delay=0.13s
Une valeur importante régulièrement (une seconde de traitement est une valeur importante) indique que vos filtres, demande de RBL, antivirus, sont trop gourmands. Si ce n'est pas le cas, contactez l'administrateur.

Nouvelles fonctionnalités

Antivirus

L'agent de livraison est relié de manière experimentale à un antivirus. Il y a deux moyens d'accès en ajoutant un entête, soit en affectant le score.

Commande antivirus

Cette commande permet d'ajouter une entête indiquant le résultat de l'analyse. Elle prend l'entête à ajouter en argument.

La règle


: antivirus X-Antivirus
ajoute l'entête X-Antivirus avec une description de l'analyse (le nom de l'antivirus utilisé ainsi que les éventuels virus détectés)

La règle


: antivirus -X-Antivirus
avec un signe « - » précedant l'entête, n'ajoute ces information que si un virus que lorsqu'un virus est détecté.

Si un entête est ajouté, celui ci n'est ajouté aux logs que lorsqu'un virus est détecté. Pour l'avoir en permanence, coupler la commande avec une commande trace :


: antivirus X-Antivirus
: trace -X-Antivirus

Variable de score « v »

Cette variable indique le nombre de virus trouvés par l'antivirus. 0 s'il n'en a pas detecté ou -1 si une erreur est survenue lors de l'analyse. Exemple :


:  score =v
>0 bounce mail containts virus

Notes

L'antrivirus actuellement utilisé est Dr.Web (disponible aussi en russe) dans sa version d'évaluation. Ce n'est pas nessesairement le plus fiable mais il a les avantages d'être facilement interfaçable avec l'agent et de tourner sur FreeBSD.

Étant donné qu'il s'agit de logiciels exterieurs sur lequel nous n'avons pas le contrôle, l'antivirus peut être interrompu si des problèmes surviennent. Les commandes de vérification resteront alors valides mais indiqueront systematiquement qu'il n'y a pas de virus détecté.

Modifications du mercredi 18 décembre 2002

Nouvelles fonctionnalités

Score maximal

Le score peut aller jusque 9223372036854775807 (précision de 18 chiffres) à la place de 2147483647 précédement.

Tri aléatoire

Le score peut être muliplié par un nombre aléatoire entre 0 (inclus) et 1 (exclus) suivant une loi uniforme. Celà permet par exemple de ranger équitablement des courriers dans des dossiers :


: score =6?
=0 deliver zero
=1 deliver un
=2 deliver deux
=3 deliver trois
=4 deliver quatre
=5 deliver cinq

On peut aussi rejeter 10% des courriers ainsi :


: score =100?
<10 bounce unlucky
: deliver

Modifications du lundi 9 septembre 2002

Nouvelles fonctionnalités

Commande default

default défini le traitement par défaut des courriers passant le filtre sans action finale et continue l'analyse du filtre. Si l'argument est une adresse éléctronique (avec un @), ces courriers seront renvoyés à cette adresse. Sinon, l'argument est pris comme le nom du dossier où seront déposés ses courrier. S'il n'y a pas d'argument, ils seront déposés dans la boîte principale. Dans la mesure du possible, les messages émis par le système de livraison locale (comme les comptes rendus de log) suivent cette directive.

Dans l'exemple suivant, le courrier qui est passé ) travers le filtre des entêtes est redirigé vers postmaster@example.com car il n'y a pas de commande de livraison finale (deliver, forward, bounce, drop, trash ...) :


 : default postmaster@example.com
 From:   /toto/   drop
 Subject: /foobar/ drop

Modifications du mardi 13 août 2002

Changements incompatibles avec la version précédente

Disparition de listes noires

Les listes noires ORBZ et ORBL ayant cessé de fonctionner, celles ci sont désactivées.

Nouvelles fonctionnalités

Tri en fonction du retour d'une liste noire

Pour les listes qui retourne une adresse parmi plusieures, il est possible de n'activer la commande que lors d'un retour bien précis. Par exemple :


  : blacklist osirusoft=127.0.0.2  X-Blacklist: relai ouvert %q
  : blacklist osirusoft*=127.0.0.2 X-Blacklist: relai ouvert %q

Le premier n'ajoute l'en-tête que si "osirusoft" renvoie 127.0.0.2 dans le premier relai. Le second fait de même pour tous les relais.

Consultez la documentation pour les détails d'implémentation ou sur les retours connus des listes.

Nouvelles listes noires

De nouvelles listes noire SPAMHAUS, VISI, SSFABEL et IPWHOIS sont activées.

Également un nouveau type de listes, vérifiant le domaine de l'émeteur, est disponible. Les listes de ce type sont BADWHOIS DSN, NOABUSE, NOPOSTMASTER et DNS-BL.

Consultez la documentation pour connaitre leurs fonctionnalités

Type d'expression « liste d'adresses »

Les expressions //a et //A sont des listes d'adresses. Elles sont composée d'une liste d'éléments (des mailbox au sens de la RFC 2822) séparés par des virgules. Lors du passage du filtre, si l'un de ces éléments est égal à l'un de ceux des en-têtes testés, l'action en enclenchée. Par exemple, le filtre suivant


  To:Cc: /toto@example.com, titi@example.org/a

Est vérifié par l'entête To: M. TOTO <TOTO@example (juste un test).com(mercial)>

Une liste peut être composée d'une seule adresse


  To: /toto@example.com/a deliver

L'analyse de l'en-tête est plutôt laxiste, afin de retomber sur ses pieds en cas d'invalidité de l'en-tête.

Expression spéciale « mailinglists »

L'expression spéciale $mailinglists est une liste d'adresse construite à partir des mailing listes paramétrées dans les préférences du webmail.

Dans l'exemple suivant, le message signalant les vacances (vacation) est envoyé à tous sauf les mailing listes déclarées :


To:Cc: $mailinglists  skipto novacation
: vacation   je suis en vacances
: vacation   jusqu'à plus tard
:novacation

Ci dessous, les courriers des mailing listes déclarées n'apparaissent plus dans les logs :


To:Cc: $mailinglists   log off

Commande deliver2

La commande deliver2 fonctionne comme deliver à la différence qu'elle ne termine pas le filtre. Par exemple :


 : deliver2 toto
 : deliver

Délivre le courrier dans la boîte toto et dans la boîte principale.

Modifications du jeudi 25 juillet 2002

Nouvelles fonctionnalités

Log des commandes bounce et trash

Les commandes bounce et trash peuvent prendre un arguemnt sous la forme d'un mot commençant par « - ». Cet argument est uniquement loggué et n'influe pas sur le fonctionnement de la commande.

Exemples


 # envoie l'erreur "beurk" mais loggue "-toto beurk"
 : bounce -toto beurk

 # envoie le message d'erreur par défaut (Permission Denied)
 # mais loggue "-toto"
 : bounce -toto

 # délivre silencieusement le courrier dans la poubelle et loggue "-toto"
 : trash -toto

 # délivre le courrier dans la poubelle, loggue "-toto beurk" et renvoie
 # le message d'erreur "beurk"
 : trash -toto beurk

Expressions spéciales

Les expressions commençant par le caractère « $ » et suivies d'un mot sont générées dynamiquement. Le seul mot reconnu pour l'instant est return-path qui crée une expression vérifiant l'adresse de l'emeteur dans l'enveloppe (présenté dans l'en-tête Return-Path) ou la chaîne fixe arbitraire MAILER-DAEMON si cette adresse est vide. Utilisez avec précaution, après avoir filtré les mailing listes auquelles vous êtes abonnés ainsi que les Return-Path vides (qui correspondent normalement à des retours d'erreur)

Exemple


 # jette le message si l'adresse de l'émeteur dans l'enveloppe
 # n'est pas inclus dans l'en-tête Sender ou From
 !Sender:From: $return-path  drop

Modifications du mardi 18 décembre 2001

Nouvelles fonctionnalités

Ranger un courrier en fonction de l'extension destinataire

Une extension destinataire est la chaîne de caractère qui suit le signe « + » dans la partie locale de l'adresse de livraison. Par exemple, si votre boîte est postmaster@mondomaine.fr et que vous recevez du courrier à l'adresse postmaster+toto@mondomaine.fr l'extension est toto. La boîte d'une adresse avec une extension est la même que celle sans cette extension et donc les filtres appliqués sont les mêmes.

La nouvelle commande stow permet de ranger le courrier dans un dossier existant du nom de l'extension (réécrit en minuscule). Avec un argument, stow recherche le dossier dans le répertoire en argument.

Si le courrier n'a pas d'extension ou si le dossier n'existe pas, stow ne fait rien. Si le courrier a pu être délivré, le filtre est arrété.

Exemple


  : stow foo
  : stow
  : deliver

Un courrier envoyé à postmaster+toto@mondomaine.fr sera délivré dans le dossier foo.toto s'il existe, sinon dans toto s'il existe, sinon dans le dossier par défaut (Inbox). Les courriers sans extensions seront simplement délivrés.

Normalement, l'extension est prise sur l'adresse du destinataire mais vous pouvez la changer avec la commande extension.

Exemple


  Subject:  titi   extension toto
  : stow
  : deliver

Délivre les courriers avec l'extension toto et ceux dont le sujet contient titi dans le dossier toto.

Log optionnels par message

Avec la commande « log », il est possible de suspendre ou de réactiver les logs durant le parcours du filtres.

À chaque log correspond un ou plusieurs évenements :

deliver
Le courrier a été délivré quelque part dans la boîte (éventuellement dans la poubelle)
forward
Le courrier a été renvoyé à l'exterieur
drop
Le courrier a été jeté
bounce
Le courrier a engendré une erreur visible par l'expéditeur
error
Il y a eu une erreur lors du traitement (erreur de syntaxe, boucle de courrier, )
La commande « trash » sans arguments range le courrier dans la poubelle et donc génère un log correspondant à l'evenement « deliver ». Avec un argument, elle envoie en plus une erreur à l'expéditeur et le log aura les événements « deliver » et « bounce ».
log +evenement1,evenements2
ajoute evenement1 et evenement2 à la liste des évenements qui génèrent des logs
log -evenement1,evenements2
retire evenement1 et evenement2 de la liste des évenements.
log evenement1,evenements2
définie la liste des évenements avec evenement1 et evenement2
log evenement1,-evenements2,evenements3
la liste des évenements contient ceux d'evenement1 moins ceux d'evenement2 et d'evenement3
etc...
Par commodité, on peut aussi utiliser un des mots clefs suivants :
all
on
yes
Tous les évenements
none
off
no
Aucun evenements
Le log sera activé si un des évenements qui l'a généré est dans la liste.

Notez que les évenements « error » sont toujours loggés sauf si on précise explicitement « -error ».

Exemple:


  # désactive les logs en cas de bounce simple
  : log -bounce
  Subject:   foo    bounce

  # réactive les logs de bounce mais désactive les logs de livraison
  : log +bounce,-deliver

  # réactive tous les logs
  : log all

  # désactive tout (mais il restera les erreurs)
  : log off

  # plusieures méthodes pour retirer réélement tous les logs
  : log none,-error
  : log -all,-error     


Recevoir des logs en temps réél par syslog

Si vous avez une adresse IP fixe, vous pouvez recevoir une notification en temps réél des messages reçu par syslog.

Exemple:


  # activer les logs par syslog
  : syslog ma.machine.mondomaine.fr
  
  # désactiver les logs par syslog
  : syslog

Sur les logs de ma.machine.mondomaine.fr, il y aura des messages comme celui ci :


Dec 17 19:15:06 pop.server.net lwa@teaser.fr: from=<lwa@teaser.fr>, size=524, action=delivered

La date et l'heure sont locales à votre machine. pop.serveur.net est le nom de la machine qui a envoyé la notification, lwa@teaser.fr est la boîte au lettre concernée (celle où vous avez défini le filtre). from=<lwa@teaser.fr> l'expediteur du courrier. size=524 indique la taille en octet du message et action=delivered indique ce qui est advenu du message.

La notification est envoyée au niveau LOG_INFO avec la facilité LOG_MAIL

Pour la recevoir, vous devez avoir un démon syslog qui accepte des messages depuis les serveurs de filtre. Sur Unix, syslogd est fourni en standard et il existe des démons syslog pour d'autres architectures (Windows, Machintosh, VMS...). Si vous avez un firewall il vous faudra laisser passer les paquets UDP du réseau du serveur de filtre vers le port 514 de votre machine.

Attention: si vous n'avez pas d'adresse IP fixe publique, abstenez vous d'utiliser cette commande. Il n'y a aucune garantie de livraison de la notification. Si votre ordinateur n'est pas connecté, elle disparait. Si vous avez une IP fixe et une liaison non permante (ISDN, RTC, etc.), les notifications peuvent empecher votre lien de tomber au bout d'un certain temps.

Modifications du mardi 30 octobre 2001

Changements incompatibles avec la version précédente

Premier caractère des expressions rationnelles

Comme il est possible de choisir quelle type d'expression on veut utiliser en les entourant de certains caractères, les caractères en question, à savoir « / », « " » et « ' », au début d'une expression, doivent être précédé par un « \ » pour leur faire perdre leur sens particulier.

Par exemple, à la place de:


    Subject:  "foo    deliver
    Subject:  /foo    deliver

Il faut écrire

    Subject:  \"foo   deliver
    Subject:  \/foo   deliver

Vérification dans « RBL » et « RSS »

Les listes de RBL et RSS étant désormais restreintes, il n'est plus possible de les consulter. La variable de score « i » renvoie systématiquement zéro. Vos êtes encouragés à retirer de vos filtres les règles associées à la consultation de ces listes.

Nouvelles fonctionnalités

Choix des expressions rationnelles

On peut choisir le type d'expression en entourant des caractères « / », « " » ou « ' ». Les expressions entourés par « / » peuvent être suivies d'une lettre d'option :
SyntaxeType d'expressionsensible à la casse
expression expressions rationnelles étenduesnon
/expression/ expressions rationnelles étenduesnon
/expression/e expressions rationnelles étenduesnon
/expression/E expressions rationnelles étenduesoui
/expression/b expressions rationnelles basiquesnon
/expression/B expressions rationnelles basiquesoui
/expression/p expressions rationnelles compatibles avec perlnon
/expression/P expressions rationnelles compatibles avec perloui
/expression/f expressions du shellnon
"expression" expressions du shellnon
'expression' expressions du shellnon
/expression/F expressions du shelloui

Notez qu'il n'est plus nessessaire d'utiliser le caractère d'échapement « \ » pour signifier un espace lorsque l'expression est délimité par « / », « " » ou « ' ». Par exemple, on peut désormais écrire


   Subject: /1 2 3/       deliver

à la place de

   Subject: 1\ 2\ 3       deliver

bien que cette dernière expression reste valable. Par contre il est nessesaire de d'échapper le caractère délimiteur. Pour rechercher la séquence « 1/2/3 », vous pouvez procéder d'une des deux façon suivantes :

   Subject: 1/2/3         deliver
   Subject: /1\/2\/3/     deliver

Les expressions du shell sont moins puissantes mais peuvent être plus simples à manier que les expression rationnelles. Elles n'ont, comme caractères spéciaux que

  • « * » qui indique une séquence de caractères quelquonque
  • « ? » qui indique un caractère quelquonque
  • « [d-f] » qui indique un caractère entre « d » et « f »
Également, elle vérifient toute la chaîne, alors que les expressions rationnelles ne vérifient que le motif. L'exemple ci dessous indique comment chercher un sujet contenant le mot « cassoulet » dans le champ « Subject » avec une expression rationnelle ou une expression du shell

   Subject: /cassoulet/
   Subject: "*cassoulet*"

Ajout d'en-tête

Vous pouvez ajouter n'importe quelle en-tête au début de vos courriers arrivant avec la commande « add ». L'exemple ci dessous ajoute une en-tête « X-Cuisine »

   Subject: /cassoulet/  add X-Cuisine: cassoulet

Notez que les en-tête dont le nom commence par « X- » sont réservés, dans les courrier Internet (RFC 2822), à une utilisation privée. Une fois que l'en-tête est mise, vous pouvez vous en servir ulterieurement pour filtrer. Les en-têtes personnelles apparaissent, par défaut, dans le fichier de log.

Vérification des adresses de relai dans une liste noire publique (blacklist)

Il est possible de vérifier si le courrier a transité par une des adresses présente dans une ou plusieures des listes ci dessous :
  • ORBL (Open Relay Black List)
  • ORBZ-I (Open Relay Block Zone, liste « input »)
  • ORBZ-O (Open Relay Block Zone, liste « output »)
  • ORDB (Open Relay Database)
  • OSIRUSOFT (Osirusoft)
  • WSFF (will spam for food)
  • INVALID est une pseudo liste noire interne qui vérifie que les adresses indiquées dans les relais sont des adresses IP valides.

Les serveurs de listes noires sont gérés par des entités exterieures. Nous ne pouvont garantir ni leur serieux, ni leur pertinence ni leur bon fonctionnement.

Ils fonctionnent par des requetes DNS, si un relai est présent dans une liste noire, le serveur DNS renvoie une addresse IP (un enregistrement « A ») et eventuelement un comentaire dans un enregistrement « TXT ».

La vérification se fait avec la commande « blacklist ». Cette commande est capable de vérifier si le courrier est passé par un relai suspect et d'ajouter un en-tête au courrier pour le signaler.

Par exemple :


   :  blacklist  wsff,invalid*  X-Blacklist: %q bloqué par %r -- %t

La commande prend comme premier argument l'énumération, avec les éléments séparés par des virgules, de listes à vérifier (vous pouvez les saisir en minuscules ou en majuscule). Quand un des élément se termine par une étoile (« * »), tous les relais seront vérifier, sinon, seul le relai par lequel le serveur de filtrage a reçu le courrier sera vérifié.

Les arguments suivants correspondent à un en-tête qui sera rajouté au courrier. Dans ces arguments,

  • « %q » l'adrese IP vérifiée dans la liste
  • « %r » le nom de la liste
  • « %d » le domaine utilisé pour la vérification
  • « %p » le rang de l'en-tête « Received » (1 pour le relai ayant envoyé un courrier au serveur de filtrage, 2 pour le relai ayant envoyé un courrier au précedent, etc.)
  • « %a » l'adresse retournée par la liste (en « A »)
  • « %t » le commentaire eventuelement retourné (en « TXT ») par la liste
  • « %% » le signe « % »
Cet en-tête sera logué (par défaut) et pourra être utilisé par des filtres ultérieurs.

Arithmétique sur le score

En des additions et des soustractions sur le score, on peut désormais faire des multiplications, des divisions et un calcul de modulo. L'exemple suivant multipliplie le score par 2, le divise par 2 et calcule sont résidu modulo 2.


  :  score *2
  :  score /2
  :  score %2

Filtre sur le corp du message

On peut désormais filtrer sur le début ou la fin d'un courrier. L'agent de livraison récupère un bloc de données d'une taille paramétrable (mais limitée à 1024 octets) au début ou a la fin du corps du message.

L'exemple si dessous délivre le courrier si la chaîne bonjour est présente dans les 200 premiers octets :


   +200  /bonjour/    deliver

Dans cet exemple, par contre, on délivre le courrier si la chaine au revoir est présente dans les 200 derniers octets du message :


   -200 /au revoir/   deliver

Il est possile de nier l'expression :


   +200 !/bonjour/    bounce les gens polis disent bonjour

Le corps du message débute toujours par une première ligne vide.

Retour chariot et tabulation dans les expressions

Les expressions rationnelles (hormis les expressions compatibles avec perl) et les expressions du shell ne contiennent normalement pas de moyen élégant de vérifier une tabulation ou un retour chariot. Ces expressions sont pré-interprétée par le système de filtre pour remplacer les séquences de caractères suivants :
  • « \n » est interprété comme un passage à la ligne
  • « \t » est interprété comme un caractère de tabulation
L'exemple ci dessous délivre le courrier s'il contient, dans ses 200 premiers octets, une ligne commençant par bonjour, enventuelement précédé par des blancs :

  +200   /\n[\t ]*bonjour/   deliver

Casse du nom d'un en-tête

La recherche selon un en-tête était et reste insensible à la casse. Par exemple, les quatre lignes ci dessous vérifient la même chose :

  Subject: /toto/
  subject: /toto/
  SuBjEcT: /toto/
  SUBJECT: /toto/

Il est désormais possible de rechercher dans les en-tête écrits avec une certaine casse en précédant le nom de l'en-tête avec sa casse par le signe « \ ». L'exemple ci dessous regarde s'il y a un en-tête « date » écrit en minuscule.


  \date:   "*"           bounce courrier probablement infecte par w32.sircam