Postfix, smtpd_recipient_restrictions, hash pris en compte que pour un domaine ?!

Hello, je viens de me rendre compte d’un problème plutôt embêtant.

Avec postfix, j’utilise depuis des mois des restrictions au niveau de smtpd_reciptiont_restrictions et en essayant un peu d’optimiser la chose, je me suis aperçu d’un comportement complètement surréaliste.

Avec mon postfix, je gère 3 domaines, le principal domaine1.fr, et 2 autres, domaine2.fr et domaine3.fr.

La conf est la suivante : https://pastebin.com/TCtfrTBY

J’ai fait un essai en partant d’une règle chez free : je veux whitelister le domaine free.fr pour éviter les faux positifs avec les RBL, mais je veux également blacklister directement certaines adresses.

J’ai donc dans mon sender_checks mis :

monadressedetest@free.fr REJECT

et dans mon client_checks :

free.fr OK

Lorsque j’envoie ça en test sur test@domaine1.fr, j’ai l’impression que les restrictions ne sont pas prises en compte, par contre, quand j’envoie ça sur mon test@domaine2.fr, là j’ai bien mon adresse free qui est REJECT…
Et pour mon test@domaine3.fr, idem que pour le premier, ce n’est pas pris en compte…

Du coup, là, il y a vraiment un truc qui m’échappe. Pourquoi les restrictions sont prises en compte pour un domaine (domaine2.fr dont je ne me sers uniquement pour l’envoi des alertes et du monitoring) et pas sur les 2 autres ??

Qu’est-ce qui pourrait expliquer que les checks soient appliqués sur un domaine (qui n’est même pas le domaine principal) et pas les autres ??

 check_recipient_access hash:/etc/postfix/client_checks,
 check_sender_access hash:/etc/postfix/sender_checks,

Quand on ne nomme pas les choses de manière logique cela ne facilite pas la compréhension…
En fait tu rejettes les courriels à destination (RCPT TO) de monadressedetest@free.fr, puis si cette règle n’est pas vérifiée tu acceptes les courriels dont l’expéditeur (FROM) est en de type @free.fr.

Et j’avoue que je ne comprends pas grand chose :

  • ton serveur n’est pas censé accepter des courriels avec un FROM toto@free.fr de toute façon (ou alors tu es un relais pour les clients Free)
  • tu ne peux tester la première règle qu’en envoyant un courriel à monadressedetest@free.fr, et quel que soit le compte utilisé (l’expéditeur, soit FROM) il devrait être rejeté.

Je vais reformuler ce que j’essaye, visiblement maladroitement, de faire.

J’utilise donc les RBL pour bloquer un maximum de serveurs/domaines reconnus par les RBL. Ca, ça marche super bien. Le problème, c’est qu’avec certains d’entres eux, lorsque, par exemple, un utilisateur free.fr se met à émettre du sale n’importe comment, ce sont les adresses ip utilisés pour émettre ça qui se retrouvent blacklistés sur les RBL. En conséquence… les mails envoyés de @free.fr vers mes domaines sont bloqués temporairement, car un ou plusieurs serveurs SMTP de free se retrouve dans une ou plusieurs de ces blacklists, que j’utilise.

Et moi j’ai besoin de recevoir les mails de free ! Comme de tous les gros fournisseurs. Mais j’ai aussi besoin de ne pas recevoir tout le spam de la planète…

Le contournement que j’ai trouvé, c’est de considérer free.fr, orange.fr, etc… etc… comme des émetteurs de confiance (c’est là que j’ajoute les domaines avec un OK), en considérant que ce qu’ils émettent sera traité ensuite au cas par cas par mon antispam.

Pour le reste du monde, je considère que si c’est listé dans une RBL, tant pis, je ne peux pas faire des exceptions pour tout le monde…

Une fois que ce premier tri est fait, j’ai tout de même quelques adresses chez free.fr & cie que je connais pour émettre du contenu non sollicité. Par conséquent, je cherche à bloquer spécifiquement certaines adresses, de free.fr, orange ou autres.

Une fois que tout ça est fait, il reste les vérifications d’usages (que chaque émetteur ait bien un reverse ip, qu’il existe un domaine rattaché à l’ip, pas d’open relay, etc…etc…), et tout ça, je le vérifie pour tout le monde.

Quand ce dernier tri est fait, tout ce qui reste est ensuite traité par l’antispam et finit par arriver dans ma boîte.

Du coup, à te lire, et en tenant compte de mon problème initial, il y a deux soucis :

  • Une démarche illogique ==> même question, par rapport à ce que je veux faire, comment verrais-tu les choses ?
  • Le problème de fond ==> ces règles qui s’appliquent pour un domaine et pas pour les autres.

Merci de m’expliquer plus en détails ce qui te parait faux dans ma démarche, je suis loin d’être à l’abri d’une erreur ou plusieurs erreurs…

Je crois que je comprends mieux le sens de ce que tu dis, et après une relecture bien plus attentive de ma conf, il y a effectivement des choses qui ne vont pas :

  • J’utilise mal les whitelist, du moins, pas dans le sens où je voudrais qu’elles soient utilisées, car en mettant OK tel quel, il semblerait que je devienne un openrelay pour free… ce qui n’est pas du tout ce que je veux.
  • Le fait d’utiliser reject_rbl_client aussi dans smtpd_recipient_restrictions fait double emploi alors que j’ai déjà un check de fait dans postscreen.
  • Je vais virer donc les domaines en OK sauf des cas très spécifiques (uniquement sur les domaines que j’admin), et utiliser des whitelist publiques dans postscreen, comme :
    swl.spamhaus.org*-4,
    list.dnswl.org=127.[0…255].[0…255].0*-2,
    list.dnswl.org=127.[0…255].[0…255].1*-4,
    list.dnswl.org=127.[0…255].[0…255].[2…3]*-6

Ce qui donne cette conf, épurée : https://pastebin.com/mdf28kBu

/edit : touche finale apportée au fichier. J’ai réordonné les restrictions, renommé ce qu’il fallait renommer, épuré beaucoup de choses, viré les rbl inutiles, rajouté les whitelist pour postscreen.

Maintenant une question me taraude : J’ai trouvé les whitelist vachement utile pour postscreen (ce qui m’évite de faire des OK explicites pour free.fr & cie, ce qui au final m’évitait des problèmes mais ouvrait des portes, c’était assez crado), mais comment je peux utiliser ces whitelist dans la partie smtpd_recipient_restrictions ?

/edit2 : réponse de moi à moi, les whitelist ne peuvent être gérées à ce niveau.

Finalement, j’ai résolu tous mes problèmes, mon fichier de conf est totalement réorganisé, si @anon70622873 tu passes par là, aurais-tu la gentillesse d’éventuellement commenter mes modifs, du moins si tu vois des optimisations/corrections pour toute la partie restrictions. Merci !