Postfix – différentes vérifications d'en-tête pour le courrier entrant et sortant

Comment puis-je appliquer différents header_checks d'en- header_checks pour l'entrée et l'expulsion du courrier à l'aide de Postfix?

Par défaut, tous les header_checks sont appliqués aux entrées et aux sorties.

header_checks se fait par cleanup donc je ne pense pas pouvoir l'appliquer uniquement pour les header_checks ou les header_checks .

smtp_header_checks est appliqué uniquement pour le courrier sortant (client smtp)

S'il y a un en-tête de courrier que vous pouvez utiliser pour identifier ce qui est entrant et qui est un courrier sortant, avec postfix 3.2 ou plus récent, vous pouvez court-circuiter les chevauchements d'en – tête , comme:

 /^Received: .*detect_outgoing_mails/ PASS /^X-Something: this rule will only match on incoming mails/ HOLD 

(Mais il ne vous donne encore que l'option de combiner TOUT (comme précédemment) ou de faire correspondre uniquement le courrier entrant ou le courrier sortant, et nécessite une version relativement récente de postfix)

En tant que meilleure alternative, si vous pouvez toujours recevoir un courrier "sortant" (courrier de clients pour lesquels vous agissez en tant que serveur de relais de messagerie) sur un port (soumission: tcp / 587) et courrier entrant sur tcp / 25, vous devriez pouvoir Utilisez master.cf pour remplacer header_checks pour chacun d'entre eux, comme ceci:

 submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o header_checks=pcre:/etc/postfix/header_checks.relay smtp inet n - - - 200 smtpd -o strict_rfc821_envelopes=yes -o header_checks=pcre:/etc/postfix/header_checks.mx 

Mais cela ne fonctionnera pas si vos clients pour lesquels vous reliez utilisent également tcp / 25 comme reste du monde. S'ils le font, vous pourriez configurer un autre port pour eux et cela fonctionnerait, mais la faisabilité de cela dépend de votre capacité à persuader tous vos utilisateurs de modifier leurs paramètres.

Si vous disposez d'une adresse IP supplémentaire, vous pourriez également la rendre plus transparente pour les utilisateurs: disons que vous avez eu smtp.example.org en tant que serveur de relais pour les utilisateurs et que votre MX avec IP aaaa , vous pouvez modifier le MX du domaine vers IP bbbb , Puis utilisez un serveur smtpd à aaaa avec un ensemble de vérifications d'en-tête, et un autre serveur smtpd à bbbb avec un autre ensemble de vérifications d'en-tête. Ceci est encore plus facile si vous ne relisez que les utilisateurs de 192.168.xx / 24 lorsque vous pouvez même conserver le même nom DNS et utiliser les vues DNS pour présenter une IP interne pour les clients internes et une IP externe pour le reste du monde.

Et la troisième façon est donc d'utiliser la fonction de header_check postfix au lieu de header_check – au lieu d'une correspondance de regexp simple, elle transmettra un message entier à votre script personnalisé pour le traitement, ce qui peut facilement distinguer les courriers entrants et sortants en inspectant les en-têtes, puis en faire Après le traitement souhaité.

Si je comprends correctement votre question, vous devriez pouvoir le faire via le fichier /etc/postfix/header_checks , quelque chose comme ceci pour le courrier sortant /^From: "spammer/ REJECT /^To: bob@here.com/ REDIRECT bob@there.com

Je l'ai fait depuis longtemps, alors ne vous souvenez pas de tous les détails, mais vous pouvez obtenir plus d'informations à partir de DOC

Cela vous permettrait de définir une action selon que le courrier soit entrant ou sortant, j'espère que cela répond à votre question.