Puncte:0

How to add a single header for any incoming mail with Postfix?

drapel id

I have Postfix running with a number of smtpd processes configured in master.cf like this:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

Now, I'd like to add a single header, with static name and value, to incoming mail depending on which smtpd it was received on.

Example:

X-Gert-Postfix-Received-From: the evil internet

My options considered:

  1. Add the header_checks option and use the PREPEND action in the file.

    Nearly there, but:

    • It requires to match an existing header and will then add one more on subsequent matches.
    • I don't always have a certain header present already, perhaps even a From is missing, for example.
    • In case you have existing header_checks, there's no easy way to stack two header_check files, I think.
  2. Build a custom app that uses the Milter protocol and hook that up to Postfix with smtpd_milters.

    Of course, this will work. I can inspect the mail in my own app, then inject the header there. Seems over-engineering for a simple task like adding a header. Additionally, it requires extra maintenance with the need to run another daemon app, quite some boilerplate code, etc.

  3. As suggested in a comment, use check_recipient_access (related Q).

    Same downsides as header_checks (see 1).

I feel like I'm missing something simple. Anyone got a better idea?

drapel in
Răspunde asta la întrebarea ta? [Adăugați un antet personalizat la Postfix cu domeniul retransmis](https://serverfault.com/questions/693904/add-a-custom-header-to-postfix-with-the-relayed-domain)
drapel id
@GeraldSchneider Nu chiar, check_recipient_access are același dezavantaj ca header_checks, mă tem.
anx avatar
drapel fr
anx
Parametrii Postfix care specifică tabelele de căutare sunt doar liste separate prin virgulă/spații de referințe `tip:nume`, deci există *o modalitate ușoară de a le stivui. Aveam de gând să sugerez folosirea acestuia împreună cu `always_add_missing_headers=yes`, dar nu sunt sigur dacă acesta este un răspuns complet (deoarece documentația în unele locuri sună ca `cleanup` adaugă anteturi lipsă o singură dată *după* procesarea `header_checks` )
Puncte:0
drapel in

În cazul în care aveți header_check existente, nu există o modalitate ușoară de a stivui două fișiere header_check, cred.

Există de fapt o modalitate de a avea mai multe fișiere independente header_checks per demon.

fiecare -o opțiunea din master.cf suprascrie o valoare implicită sau orice parametru de configurare postfix din main.cf. Pentru a avea un header_checks diferit pentru fiecare demon (de exemplu /etc/postfix/header_checks1 și /etc/postfix/header_checks2), trebuie să le înlocuiți pe fiecare header_checks parametru:

# Internetul se confruntă cu unul
1.2.3.4:25 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Fața internă unul
10.0.0.1:10026 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

Astfel vei avea complet independenta header_checks fișiere per daemon smtpd. De acolo puteți adăuga reguli care precedă eticheta despre care vorbeai.

drapel id
M-am gândit la asta, dar așa cum am spus: 1) suprascrie header_checks-ul meu obișnuit. 2) toate dezavantajele header_checks în general. Am e-mailuri care sosesc din surse nesigure, cum ar fi internetul din întreaga lume. Nu sunt sigur cum este acesta un răspuns la întrebarea mea, având în vedere că acesta este deja în întrebarea mea.
drapel id
A fi clar; dacă aveți o logică comună existentă în `header_checks` lui `main.cf`, atunci înlocuirea din `master.cf` o maschează. Aceasta este o caracteristică, dar un dezavantaj/o problemă în acest caz.
FatRabbit avatar
drapel in
dacă aveți nevoie de un header_checks comun pentru ambii demoni, doar adăugați-l înapoi în ambele „override”, puteți avea câte header_checks doriți, doar enumerați-le. master.cf nu acceptă spații, așa că trebuie să stocați lista fișierelor header_checks într-o variabilă.
Puncte:0
drapel fr
anx

Pentru a rezolva limitările de smtpd_*_restricții:

Un mesaj – chiar și unul cu expeditor „null” – are exact un expeditor plic. Deci folosește check_sender_access în loc de verifica_accesul_destinatarului. Tipul de căutare utilizat poate fi static: pentru că nu ne pasă de specificul căii de întoarcere. Adăugați-l în lista dvs. de smtpd_sender_restrictions înainte de generarea oricăror verificări ACCEPT rezultate (postfixul nu ar interoga căutări suplimentare dincolo).

# în principal.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# în master.cf
192.0.2.0:25 inet n - y - - smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026 inet n - y - - smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions
drapel id
Sună foarte interesant și îngrijit. Lasă-mă să încerc asta mai târziu!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.