<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://uname.pingveno.net/blog/index.php/feed/rss2/xslt" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title># uname -a - Mot-clé - serie-mail-postfix-spam</title>
    <link>https://uname.pingveno.net/blog/index.php/</link>
    <atom:link href="https://uname.pingveno.net/blog/index.php/feed/tag/serie-mail-postfix-spam/rss2" rel="self" type="application/rss+xml" />
    <description>Le blog de uname.pingveno.net</description>
    <language>fr</language>
    <pubDate>Tue, 18 Aug 2026 13:46:21 +0200</pubDate>
    <copyright>Mathieu Pellegrin</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Dotclear</generator>
          <item>
        <title>C'est l'histoire d'un spam Partie 1: petit cours d'anatomie</title>
        <link>https://uname.pingveno.net/blog/index.php/post/2016/04/28/C-est-l-histoire-d-un-spam-Partie-1</link>
        <guid isPermaLink="false">urn:md5:06779a5b5e416b7931e49ff3f692ba7f</guid>
        <pubDate>Mon, 02 May 2016 15:48:00 +0200</pubDate>
        <dc:creator>Mathieu</dc:creator>
                  <category>Informatique</category>
                          <category>mail</category>
                  <category>postfix</category>
                  <category>serie-mail-postfix-spam</category>
                  <category>spam</category>
                <description>&lt;p&gt;Le SPAM par mail, c'est pénible. C'est du travail à temps plein si on veut s'en débarrasser en gênant le moins les utilisateurs. De la stricte application des RFC aux paramètres secrets de spamassassin, je vais essayer dans cette nouvelle série d'articles essayer de vous en faire mieux comprendre les techniques, et proposer à mon échelle les quelques solutions &quot;qui marchent&quot;, du moins pour moi.&lt;/p&gt;

&lt;p&gt;Voici donc pour cette première partie un cours d'autopsie. Le SPAM que nous décortiquer aujourd'hui est un mail est est resté coincé en &lt;em&gt;queue&lt;/em&gt; sur le serveur mail. Bien que tous les mails en queue ne soient pas du SPAM, il est important de surveiller la taille de cette liste de mails &quot;en transit&quot; ; un grand nombre de mails dans cette liste indiquant souvent un problème d'envoi ou de réception.&lt;/p&gt;

&lt;p&gt;Affichons donc la queue :&lt;/p&gt;

&lt;pre&gt;
# mailq
1430281C33     8589 Thu Apr 28 14:51:58  MAILER-DAEMON
             (connect to serveurspamserveur.net.ae[86.96.xxx.xxx]:25: Connection refused)
                                         spammeur@serveurspamserveur.net.ae
&lt;/pre&gt;

&lt;p&gt;Première constatation : l'adresse source ne correspond pas à une adresse gérée par le serveur, ce n'est donc pas un mail envoyé par un des utilisateurs du serveur. Mais alors comment ça se fait que je route des mails qui ne viennent pas de chez moi, et qui ne vont pas chez moi ? Mon serveur serait configuré en &lt;a href=&quot;https://en.wikipedia.org/wiki/Open_mail_relay&quot;&gt;OpenRelay&lt;/a&gt; (ça serait inquiétant) ?&lt;/p&gt;

&lt;p&gt;Examinons le contenu brut du mail à partir de son ID. La commande postcat permet de le faire pour Postfix, à adapter selon votre MTA.&lt;/p&gt;

&lt;pre&gt;
# postcat -q 1430281C33&lt;/pre&gt;          &lt;p&gt;Ci-dessous la sortie de la commande postcat que j'ai colorisée :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;*** ENVELOPE RECORDS deferred/1/1430281C33 ***&lt;/span&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;message_size:            8589             234               1               0            8589
message_arrival_time: Thu Apr 28 14:51:58 2016
create_time: Thu Apr 28 14:51:58 2016
named_attribute: log_message_origin=local
named_attribute: trace_flags=0
sender:
original_recipient: spammeur@spamserveur.net.ae
recipient: spammeur@spamserveur.net.ae&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;*** MESSAGE CONTENTS deferred/1/1430281C33 ***
Received: by monserveur.com (Postfix)
    id 1430281C33; Thu, 28 Apr 2016 14:51:58 +0200 (CEST)
Date: Thu, 28 Apr 2016 14:51:58 +0200 (CEST)
From: MAILER-DAEMON@monserveur.com (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: spammeur@spamserveur.net.ae
Auto-Submitted: auto-replied
MIME-Version: 1.0&lt;/span&gt;
&lt;span style=&quot;color:#FF0000;&quot;&gt;Content-Type: multipart/report; report-type=delivery-status;
    boundary=&quot;B25FA81C32.1461847918/monserveur.com&quot;&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Transfer-Encoding: 8bit
Message-Id: &amp;lt;20160428125158.1430281C33@monserveur.com&amp;gt;&lt;/span&gt;

&lt;strong&gt;This is a MIME-encapsulated message.&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Notification
Content-Type: text/plain; charset=us-ascii&lt;/span&gt;

&lt;strong&gt;This is the mail system at host monserveur.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

&amp;lt;monclient@gmail.com&amp;gt;: host
    gmail-smtp-in.l.google.com[2a00:1450:400c:xxxx::xxxx] said: 552-5.7.0 This
    message was blocked because its content presents a potential 552-5.7.0
    security issue. Please visit 552-5.7.0
    https://support.google.com/mail/answer/6590 to review our message 552 5.7.0
    content and attachment content guidelines. cw9si10769736wjb.20 - gsmtp (in
    reply to end of DATA command)&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; monserveur.com
X-Postfix-Queue-ID: B25FA81C32
X-Postfix-Sender: rfc822; spammeur@spamserveur.net.ae
Arrival-Date: Thu, 28 Apr 2016 14:51:57 +0200 (CEST)

Final-Recipient: rfc822; monclient@gmail.com
Original-Recipient: rfc822;monclient@gmail.com
Action: failed
Status: 5.7.0
Remote-MTA: dns; gmail-smtp-in.l.google.com
Diagnostic-Code: smtp; 552-5.7.0 This message was blocked because its content
    presents a potential 552-5.7.0 security issue. Please visit 552-5.7.0
    https://support.google.com/mail/answer/6590 to review our message 552 5.7.0
    content and attachment content guidelines. cw9si10769736wjb.20 - gsmtp&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit

Return-Path: &amp;lt;spammeur@spamserveur.net.ae&amp;gt;
Received: from localhost (localhost [127.0.0.1])
    by monserveur.com (Postfix) with ESMTP id B25FA81C32
    for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:57 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1])
    by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id vn_xZRLJ3EKq for &amp;lt;monclient@gmail.com&amp;gt;;
    Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
Received: by monserveur.com (Postfix, from userid 5000)
    id BE51181C31; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
X-Sieve: Pigeonhole Sieve 0.4.2
X-Sieve-Redirected-From: contact@monclient.com
Delivered-To: contact@monclient.com
Received: from localhost (localhost [127.0.0.1])
    by monserveur.com (Postfix) with ESMTP id 95E2581C33
    for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1])
    by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024)
    with ESMTP id 8agkFLPzF_vy for &amp;lt;contact@monclient.com&amp;gt;;
    Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from bba148580.serveurspam.net.ae (bba148580.serveurspam.net.ae [217.165.xxx.xxx])
    by monserveur.com (Postfix) with ESMTP id 774C481C27
    for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from www.serveurspam.net.ae ([127.0.0.1]) by AMAZONA-F00CA66 with Microsoft SMTPSVC(7.5.7601.17514);
     Thu, 28 Apr 2016 16:51:42 +0400
Date: Thu, 28 Apr 2016 16:51:42 +0400
To: &quot;contact@monclient.com&quot; &amp;lt;contact@monclient.com&amp;gt;
From: xxxx xxxx &amp;lt;spammeur@spamserveur.net.ae&amp;gt;
Subject: [SPAM] FW: Invoice
Message-ID: &amp;lt;be0fa65c2e77bf81d3fd1b0216e8e742@www.serveurspam.net.ae&amp;gt;
X-Priority: 3
X-Mailer: PHPMailer [version 1.73]
MIME-Version: 1.0&lt;/span&gt;
&lt;span style=&quot;color:#FF0000;&quot;&gt;Content-Type: multipart/mixed;
    boundary=&quot;b1_be0fa65c2e77bf81d3fd1b0216e8e742&quot;&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;X-OriginalArrivalTime: 28 Apr 2016 16:51:42.0538 (UTC) FILETIME=[40C0DFC0:01D1A068]&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b1_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: multipart/alternative;
    boundary=&quot;b2_be0fa65c2e77bf81d3fd1b0216e8e742&quot;&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: text/plain; charset = &quot;iso-8859-1&quot;
Content-Transfer-Encoding: 8bit&lt;/span&gt;

&lt;strong&gt;Please find attached invoice #726990

Have a nice day

Rowena Pittman
Executive Director Sales Account Management Training Performance Support&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: text/html; charset = &quot;iso-8859-1&quot;
Content-Transfer-Encoding: 8bit&lt;/span&gt;

&lt;strong&gt;&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p&amp;gt;Please find attached invoice #726990&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Have a nice day&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Rowena Pittman&amp;lt;br&amp;gt;
Executive Director Sales Account Management Training Performance Support&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b2_be0fa65c2e77bf81d3fd1b0216e8e742--
--b1_be0fa65c2e77bf81d3fd1b0216e8e742&lt;/span&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Content-Type: application/zip; name=&quot;B1095_scan-invoice_0B0C3F.zip&quot;
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=&quot;B1095_scan-invoice_0B0C3F.zip&quot;&lt;/span&gt;

&lt;strong&gt;UEsDBBQAAAAIAIRenEiR5N/wYgcAAHQTAAAKAAAAMTk0MGMwOS5qc9VYaW/TMBj+DBL/IUQC
ElYGLacoCNJr7Wh6LKVrixBKHCdxDid17oz9d+ys45IzBN+YtmWLX7/v4+c93Uwnwgha4xSe

...&lt;/strong&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--b1_be0fa65c2e77bf81d3fd1b0216e8e742--&lt;/span&gt;

&lt;span style=&quot;color:#FF0000;&quot;&gt;--B25FA81C32.1461847918/monserveur.com--&lt;/span&gt;
&lt;span style=&quot;color:#696969;&quot;&gt;*** HEADER EXTRACTED deferred/1/1430281C33 ***
named_attribute: encoding=8bit
*** MESSAGE FILE END deferred/1/1430281C33 ***&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Les lignes que j'ai mises en &lt;span style=&quot;color:#696969;&quot;&gt;gris&lt;/span&gt; ne sont pas très intéressantes : il s'agit de l'enveloppe et des informations fournies par le système qui gère la queue, intéressons-nous plutôt au reste.&lt;/p&gt;

&lt;p&gt;Les lignes en &lt;span style=&quot;color:#0000FF;&quot;&gt;bleu&lt;/span&gt; sont les en-têtes, ce sont elles qui retracent à la fois le format du message, mais aussi leur trajet à travers les différents serveurs mails qui l'ont manipulé. Comme une liste de tampons sur un passeport. Ce sont en particulier les lignes commençant par &lt;span style=&quot;color:#0000FF;&quot;&gt;Received&lt;/span&gt;, qui tracent le trajet des mails à travers les échanges entre les serveurs. La première ligne Received correspondant au dernier échange réalisé, et la dernière ligne &lt;span style=&quot;color:#0000FF;&quot;&gt;Received&lt;/span&gt; au premier échange réalisé.&lt;/p&gt;

&lt;p&gt;Dans l'en-tête on retrouve aussi l'ID du message, &lt;strong&gt;1430281C33&lt;/strong&gt;, et son parcours entre les seveurs mail. Chaque serveur par lequel le mail passe va rajouter une ligne, la première ligne correspondant au dernier serveur ayant reçu le message.&lt;/p&gt;

&lt;p&gt;Les lignes en &lt;span style=&quot;color:#FF0000;&quot;&gt;rouge&lt;/span&gt; sont ce que l'on appelle les boundaries (et leurs déclarations). Ce sont des lignes de séparation permettant de dissocier les pièces jointes du reste du message. Ici on en a plusieurs, parce qu'en fait à chaque échange, le mail s'est fait attacher à un autre mail. Ce n'est pas courant, à moins que le mail n'ai été enrichi d'informations supplémentaire après un &quot;rejet&quot; du serveur de destination. Ici, il s'est donc probablement fait &quot;jeter&quot; plusieurs fois !&lt;/p&gt;

&lt;p&gt;Commençons notre analyse par la fin du message. Le mail original contenait visiblement lui aussi une pièce jointe, et à en juger par le texte invitant à ouvrir la pièce jointe, il est fort possible que ça soit un SCAM. Un message vous invitant à ouvrir un faux fichier PDF qui va infecter l'ordinateur. Heureusement donc que ce mail n'est pas arrivé jusqu'à sa destination.&lt;/p&gt;

&lt;p&gt;Remontons un peu, on constate que le mail a été envoyé avec PHPMailer, et qu'il a été marqué en [SPAM] dans le sujet par mon filtre antispam. La première trace de l'arrivée du mail est la suivante :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from bba148580.serveurspam.net.ae (bba148580.serveurspam.net.ae [217.165.xxx.xxx]) by monserveur.com (Postfix) with ESMTP id 774C481C27 for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)
Received: from www.serveurspam.net.ae ([127.0.0.1]) by AMAZONA-F00CA66 with Microsoft SMTPSVC(7.5.7601.17514); Thu, 28 Apr 2016 16:51:42 +0400&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;La ligne au-dessus, c'est la trace du passage à l'antispam et à l'antivirus :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from localhost (localhost [127.0.0.1]) by monserveur.com (Postfix) with ESMTP id 95E2581C33 for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at monserveur.com
Received: from monserveur.com ([127.0.0.1]) by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8agkFLPzF_vy for &amp;lt;contact@monclient.com&amp;gt;; Thu, 28 Apr 2016 14:51:44 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Rien de spécial, l'antivirus et l'antispam sont installés en local et ont fait leur job dès que le message a été reçu. Continuons.&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;X-Sieve: Pigeonhole Sieve 0.4.2
X-Sieve-Redirected-From: contact@monclient.com&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ça c'est le mécanisme qui gère les alias de mon serveur. &lt;a href=&quot;https://fr.wikipedia.org/wiki/Sieve&quot;&gt;Sieve&lt;/a&gt; va rediriger l'adresse contact@monclient.com vers la bonne adresse de destination, l'adresse contact@monclient.com étant un alias.&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from monserveur.com ([127.0.0.1]) by localhost (monserveur.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vn_xZRLJ3EKq for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)
Received: by monserveur.com (Postfix, from userid 5000) id BE51181C31; Thu, 28 Apr 2016 14:51:51 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;On transfère tout ça au MTA local pour envoi à la destination finale :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: from localhost (localhost [127.0.0.1]) by monserveur.com (Postfix) with ESMTP id B25FA81C32 for &amp;lt;monclient@gmail.com&amp;gt;; Thu, 28 Apr 2016 14:51:57 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Fin du premier message, on traverse la boundary pour voir ce qu'il s'est passé ensuite :&lt;/p&gt;

&lt;pre&gt;
&lt;strong&gt;&amp;lt;monclient@gmail.com&amp;gt;: host gmail-smtp-in.l.google.com[2a00:1450:400c:xxxx::xxxx] said: 552-5.7.0 This message was blocked because its content presents a potential 552-5.7.0 security issue.&lt;/strong&gt;&lt;/pre&gt;

&lt;p&gt;Ça c'est moins cool. En gros, gmail a jeté le message, parce que la pièce jointe était sans doute contaminée. Mon antivirus n'a rien vu, il va falloir chercher pourquoi (plus tard).&lt;/p&gt;

&lt;p&gt;On continue de remonter, et au-dessus de la dernière boundary, on a :&lt;/p&gt;

&lt;pre&gt;
&lt;span style=&quot;color:#00FFFF;&quot;&gt;Received: by monserveur.com (Postfix) id 1430281C33; Thu, 28 Apr 2016 14:51:58 +0200 (CEST)&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Ok, gmail m'a renvoyé le message plus ou moins gentiement en m'expliquant qu'il n'en voulait pas, et mon serveur essaie de le transférer au spammeur original qui nous a fermé sa porte. Le mail reste donc en queue jusqu'à son expiration... Voilà pourquoi il traîne dans la queue des mails et qu'il n'a été envoyé ni par moi ni pour moi...&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;J'espère que cette courte plongée dans les en-têtes d'un mail vous a permis de vous familiariser avec le &quot;vrai&quot; contenu d'un mail.&lt;/p&gt;

&lt;p&gt;Ici je ne peux plus faire grand chose avec ce mail à part le supprimer de la queue mail, le spammeur ayant certainement déjà été bloqué par son hébergeur ou changé d'adresse IP pour continuer à envoyer sans se faire prendre par les blacklists.&lt;/p&gt;

&lt;p&gt;À bientôt pour un nouvel article. &lt;img src=&quot;/blog/themes/mathedit_material3/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot;&gt;&lt;/p&gt;</description>
        
              </item>
      </channel>
</rss>
