Sujets abordés dans ce document :
Lorsque les spammers ou les vers envoient du courrier avec des adresses d'expédition forgées, les sites innocents sont envahits par des avis de non remise. C'est ce qu'on appelle les notifications indésirables (backscatter mail).
Si votre machine reçoit des notifications indésirables à destination d'adresses aléatoires, configurez Postfix pour rejeter le courrier des utilisateurs inexistants comme décrit dans les pages LOCAL_RECIPIENT_README (destinataires locaux) et STANDARD_CONFIGURATION_README (configuration standard).
Si vous utilisez une version 2.0 de Postfix ou antérieure, désactivez la fonctionnalité "attendre avant rejet" ("pause before reject") du serveur SMTP. Si vous système est soumis à une forte charge, il ne doit pas perdre de temps.
/etc/postfix/main.cf: # Pas nécessaire avec Postfix versions 2.1 et supérieures. smtpd_error_sleep_time = 0
Lorsque les notifications passent la barrière "destinataire inconnu", il ne faut pas desespérer. Beaucoup de systèmes insèrent les en-têtes du message d'origine dans la notification. Ces en-têtes de message contiennent des informations que vous pouvez utiliser pour reconnaître et bloquer les indésirables.
Bien que mon adresse mail soit "wietse@porcupine.org", tous mes systèmes de messagerie s'annoncent comme "machine.porcupine.org" dans la commande SMTP HELO. Ainsi si un message retourné contient un en-tête Received: tel que suit :
Received: from porcupine.org ...
Alors je sais que qu'il s'agit d'un message forgé. Les messages réellements envoyés par mes systèmes ressemblent à :
Received: from machine.porcupine.org ...
Pour les mêmes raisons, les en-têtes suivants semblent être le résultat d'un message forgé :
Received: from host.example.com ([1.2.3.4] helo=porcupine.org) ... Received: from [1.2.3.4] (port=12345 helo=porcupine.org) ... Received: from host.example.com (HELO porcupine.org) ... Received: from host.example.com (EHLO porcupine.org) ...
Un autre signe fréquent de forgeage est l'en-tête Message-ID:. Mon système produitk un Message-ID: du style <stuff@hostname.porcupine.org>. Les suivants sont forgés, en particulier le premier
Message-ID: <1cb479435d8eb9.2beb1.qmail@porcupine.org> Message-ID: <yulszqocfzsficvzzju@porcupine.org>
Pour bloquer de telles notifications, j'utilise les paramètres header_checks et body_checks comme suit :
/etc/postfix/main.cf: header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks /etc/postfix/header_checks: /^Received: +from +(porcupine\.org) +/ reject forged client name in Received: header: $1 /^Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/ reject forged client name in Received: header: $2 /^Message-ID:.*@(porcupine\.org)/ reject forged domain name in Message-ID: header: $1 /etc/postfix/body_checks: /^[> ]*Received: +from +(porcupine\.org) / reject forged client name in Received: header: $1 /^[> ]*Received: +from +[^ ]+ +\(([^ ]+ +[he]+lo=|[he]+lo +)(porcupine\.org)\)/ reject forged client name in Received: header: $2 /^[> ]*Message-ID:.*@(porcupine\.org)/ reject forged domain name in Message-ID: header: $1
Notes :
L'exemple est simplifié dans un but pédagogique. En réalité, mes correspondances listent de multiples domaines : "(domaine1|domaine2|...)".
Les "\." correspondent à de véritables ".". Sans le "\", le "." correspond à n'importe quel caractère.
Les "\(" et "\)" correspondent à de véritables parenthèses "(" et ")". Sans le "\", les parenthèses "(" et ")" groupent les opérateurs.
Les clients de messagerie Netscape (and par conséquent Mozilla) envoient un nom de domaine identique à celui de l'expéditeur dans le HELO. Si vous utilisez de tels clients, alors les correspondances précédentes bloqueront le courrier légitime.
Je n'ai qu'une telle machine sur mon réseau et pour éviter que son courrier soit bloqué, je l'ai configuré pour envoyer le courrier avec une adresse utilisateur@machine.porcupine.org. Sur le serveur Postfix, une correspondance canonique traduit cette adresse temporaire en utilisateur@porcupine.org.
/etc/postfix/main.cf: canonical_maps = hash:/etc/postfix/canonical /etc/postfix/canonical: @hostname.porcupine.org @porcupine.org
C'est pratique si vous avez peu de systèmes qui envoient de telles commandes HELO et que vous n'avez jamais besoin d'envoyer du courrier à ces machines.
Une alternative consiste à supprimer le nom de machine avec le masquage d'adresse comme décrit à la page ADDRESS_REWRITING_README.
/etc/postfix/main.cf: header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks /etc/postfix/header_checks: /^(From|Return-Path):.*[[:<:]](user@domain\.tld)[[:>:]]/ reject forged sender address in $1: message header: $2 /etc/postfix/body_checks: /^[> ]*(From|Return-Path):.*[[:<:]](user@domain\.tld)[[:>:]]/ reject forged sender address in $1: message header: $2
Notes :
Cet exemple est simplifié pour des raisons pédagogiques. En réalité, mes correspondances listent plusieurs adresses email : "(user1@domain1\.tld|user2@domain2\.tld)".
Le "[[:<:]]" correspond au début d'un mot et le "[[:>:]]" à la fin. Sur certains systèmes vous devez indiquer "\<" et "\>" à la place. Pour plus de détails, reportez-vous à la documentation correspondant à votre système.
Les "\." correspondent à de véritables ".". Sans le "\", le "." correspond à n'importe quel caractère.
Un autre signe de forgeage peut être détecté dans les adresses IP enregistrées dans l'en-tête Received: suivant votre nom de machine ou domaine HELO. Ces informations doivent être utilisées avec précaution. Certains serveurs sont derrière un traducteur d'adresses et ne voient jamais l'adresse IP réelle du client.
Après l'élimination des messages forgés reconnus, il reste une catégorie de notification à éliminer : les notifications des logiciels anti-virus. Malheureusement, certains ne savent pas que les virus forgent les adresses d'expédition. Pour ne rien arranger, ces logiciels ne savent pas non plus rapporter le problème de livraison, nous devons donc utiliser d'autres techniques.
Reconnaître les antivirus est un processus enclin d'erreurs car il y a beaucoup de formats de rapports différents. La suite est seulement un petit exemple de reconnaissance d'en-têtes de messages. Pour obtenir une liste plus grande d'expression caractérisant les notifications des antivirus, consultez la page http://www.dkuug.dk/keld/virus/ ou http://www.t29.dk/antiantivirus.txt.
/etc/postfix/header_checks: /^Subject: *Your email contains VIRUSES/ DISCARD virus notification /^Content-Disposition:.*VIRUS1_DETECTED_AND_REMOVED/ DISCARD virus notification /^Content-Disposition:.*VirusWarning.txt/ DISCARD virus notification
Reclamation auprès des opérateurs : s'il vous plait, n'aggavez pas le problème en retournant les messages forgés. Vous n'harcelez que des innocents. Si vous devez retourner le message au supposé expéditeur, renvoyez tous les en-têtes pour qu'il puisse se défendre des messages forgés.
traduction par Xavier Guimard - Retour au menu