Forum Linux.général Comment en laissant passer le spammy en local, bloquer le spam forward via "virtual_alias_maps" ?

Posté par  . Licence CC By‑SA.
3
1
août
2016

Bonjour,

Ma question porte sur l'ajustement de ma configuration mail.

J'utilise entre autre : Postfix, Amavis, SpamAssassin, Dovecot et Sieve.

Lorsqu'un mail reçu est détecté en tant que SPAM par SpamAssassin, Amavis vas soit le supprimer si le score est trop important (déterminé par "spam_kill_level_maps" dans sa config), soit taguer le sujet du mail et ajouter un flag SPAM dans l'entête (via "spam_tag2_level_maps").

Si l'adresse de destination du mail est une boite en local, le mail vas aller sur Dovecot qui à l'aide de Sieve, vas le mettre directement dans le dossier des indésirables.

Mon problème est que si le mail est une redirection ou une boite qui redirige (via "virtual_alias_maps" de Postfix) vers une adresse externe (genre Google Mail par exemple), le spam non supprimé ne va pas passer par Dovecot/Sieve vu qu'il n'y a de dossier mais une redirection sortante. Du coup le serveur distant voit passer un mail et même si dans l'entête j'ai dis que c'était un SPAM, il gueule un peu. Pire, le SMTP des adresses @free.fr bloque l'IP de mon serveur mail pendant 8 heures.

J'aimerai alors laisser le "petit" spam dans le dossier des indésirables en local pour mes utilisateurs leur permettant de corriger le tir sans les faire transiter à l'extérieur.

J'ai essayé de mettre un "smtp_header_checks" dans postfix (vu que ca ne s'applique que pour le sortant, à l'inverse de "header_checks") avec une règle "/X-Spam-Flag:.*\YES/ DISCARD spam" mais le petit SPAM continue à être envoyé à l'extérieur et ce n'est pas bon.

Si je mets cette règle dans "header_checks" le petit spam n'est plus du tout présent dans le dossier des indésirables en local donc pas bon non plus.

Je ne vois pas comment faire …

PS. virtual_alias_maps fonctionne avec une requête SQL qui vérifie seulement si l'adresse "To:" vas autre part et si cette redirection est active.

Auriez-vous une idée s'il vous plait ?

Merci d'avance pour vos retours.

  • # c'est normal

    Posté par  . Évalué à 3.

    Du coup le serveur distant voit passer un mail et même si dans l'entête j'ai dis que c'était un SPAM, il gueule un peu. Pire, le SMTP des adresses @free.fr bloque l'IP de mon serveur mail pendant 8 heures.

    pour moi ce n'est pas choquant,

    car tu veux quand meme envoyer du SPAM à des FAIs,

    il est normal qu'ils ralent voire meme qu'ils blacklistent ton SMTP, sinon, ou irait le monde si les FAI laissaient entrer tous les SPAMS de la terre, sous pretexte que, peut-etre, c'est un email qui a été filtré par le client avant d'arriver dans la boite email finale…

    • [^] # Re: c'est normal

      Posté par  . Évalué à 1. Dernière modification le 01 août 2016 à 19:07.

      Merci pour ta réponse NeoX mais non justement, je ne veux pas envoyer de SPAM :) Ma question justement c'est comment éviter ça :) Mais je ne pense pas que vous avez compris la situation.

      Je suis une professionnelle à mon compte d'une entreprise d'hébergement sur Internet avec un petit millier de clients et tout comme d'autres prestataires mails, je souhaiterai laisser à mes clients la possibilités de continuer de consulter leurs dossiers des indésirables pour remonter les éventuels faux positifs lorsque le score est "limite", mais tout en court-circuitant les redirections mails qui ne passent pas par Sieve en local.

      Je pourrai très bien tout bloquer, ça fonctionne mais j'aime la transparence pour mes clients et leur laisser la main sur leurs données. Puis lorsque j'ai dis "pire", c'est que seul Free (sur une trentaine de prestataires mails) peuvent retarder les mails de mes clients.

      Alors voilà, ma précédente question est toujours d'actualité ;)

      • [^] # Re: c'est normal

        Posté par  . Évalué à 3.

        ok donc je reformules la question pour etre sur de bien comprendre :

        Vous recevez des emails, faites une qualification (clean, spam leger, spam lourd)
        et ensuite vous souhaitez avoir 2 comportements suivants que la livraison se fait localement ou à distance (free).

        Localement => on bloque le spam lourd, on laisse passer le spam leger
        Distant => on bloque tous les spams.

        dans ce cas, vous pouvez tres bien monter 2 instances SMTP avec 2 spamassasins, regler differemment (ecoutant sur 2 ports distincts)

        votre libraison local se faisant par l'un,
        votre livraison distante passant par l'autre.

        vous pouvez alors dire de ne pas faire sortir les spams leger.

        • [^] # Re: c'est normal

          Posté par  . Évalué à 1. Dernière modification le 04 août 2016 à 11:19.

          Bonjour de nouveau,

          Merci à nouveau pour la réponse, vous avez compris la situation mais en mettant 2 spamassasins différents ça ne résoudra pas le soucis car ce n'est pas chez moi spamassasins qui bloque les mails (il ne fait que taguer) mais amavis, ce qui veut dire qu'il me faudrait un second amavis.

          Le gros soucis est que je ne vois pas où mettre ce second filter dans postfix vu que la directive "content_filter" contrôle à la fois le local et le distant.

          Voilà ma directive "content_filter" :
          content_filter = smtp-amavis:[127.0.0.1]:10024

          Par contre autre idée : je pourrai mettre dans le postfix un "relayhost" vers un (ou plusieurs) autres postfix satellites qui ne serviraient qu'à envoyer les mails à l'extérieur (en imaginant que postfix n'essaye pas de relayer les mails qui devraient rester en local et qu'il passe l'antispam/antivirus + autres rules avant de relayer le mail …).

          Ces postfix satellites ne s’occuperait qu'à bloquer le SPAM déjà tagué en amont via un "/X-Spam-Flag:.*\YES/ DISCARD spam" dans le "smtp_header_checks".

          Peut être que ça fonctionne …

          • [^] # Re: c'est normal

            Posté par  . Évalué à 2.

            Par contre autre idée : je pourrai mettre dans le postfix un "relayhost"

            oui, c'est un peu l'idée,
            en fait un seul postifx peut faire l'affaire car dans un cas, c'est SMTPD (qui recoit les emails), dans l'autre c'est SMTP (qui les envois)

            il doit etre possible de parametrer postfix (fichier master.cf)
            pour dire à smtp d'utiliser un content_filter.

            à vous ensuite d'implementer 2 instances amavis ou spamassassin pour filter aussi les emails sortants (et donc bloquer ceux qui sont du spams.

            noter que cela peut etre une infra interessante, car si un compte interne à votre infra se fait pirater et envoie des campagnes de spams, il sera alors bloquer avant de sortir de chez vous.

  • # Résolu ! :)

    Posté par  . Évalué à 1. Dernière modification le 24 août 2016 à 22:30.

    J'ai réussie à faire ce que je voulais ! :)

    Pas besoin d'ajouter des instances amavis/clamav en double, j'utilise une double instance à Postfix comme recommandé par eux mêmes : http://www.postfix.org/MULTI_INSTANCE_README.html

    Voilà une petite explication en français : https://placenet.fr/2010/10/17/deux-instances-pour-postfix/

    Je cite : "Postfix dispose d’aucune capacité inhérente de distinguer le courrier entrant du courrier sortant. Cependant, avec quelques modifications il est possible de le faire." et en anglais la suite : "Why multiple Postfix instances ? Outbound mail relay for a corporate network."

    De ce fait, je crée une seconde instance à Postfix ainsi :

    postmulti -e init
    postmulti -I postfix-out -G mta -e create
    postmulti -i postfix-out -e enable
    postmulti -i postfix-out -e start

    Puis je remplace le port smtp 25 dans le second /etc/postfix-out/master.cf par un port autre :

    127.0.0.1:10026 inet n - n - - smtpd

    Je demande à la première instance de Postfix à relayer les mails sortants à la seconde instance en modifiant /etc/postfix/main.cf par :

    relayhost = [127.0.0.1]:10026

    j'ajoute à la seconde instance /etc/postfix-out/main.cf ceci :

    inet_interfaces = loopback-only
    header_checks = regexp:/etc/postfix-out/header_checks

    et dans /etc/postfix-out/header_checks ceci :

    /X-Spam-Flag:.Yes/ DISCARD SPAM blocked for postfix-out

    Je relance le tout et tout fonctionne ! :)

    J'en ai profité pour revoir intégralement mon serveur mail en réinstallant un nouveau en remplaçant spamassassin/amavis par rspamd/rmilter.

    La finalité :

    Lorsque qu'un utilisateur reçoit un mail et si c'est un SPAM, rspamd le tag et sieve le place dans le dossier des indésirables. Si le SPAM reçu redirige vers une autre adresse à l'extérieur de mes services (sur Internet), celui-ci passe par le relay-host interne et comme il a été tagué dans la première instance par X-Spam-Flag à Yes il sera DISCARD et non envoyé à l'extérieur.

    Voilà :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.