Score:0

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

ธง 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?

in flag
สิ่งนี้ตอบคำถามของคุณหรือไม่ [เพิ่มส่วนหัวที่กำหนดเองใน Postfix ด้วยโดเมนรีเลย์](https://serverfault.com/questions/693904/add-a-custom-header-to-postfix-with-the-relayed-domain)
id flag
@GeraldSchneider ไม่จริง check_recipient_access มีข้อเสียเหมือนกับ header_checks ฉันเกรงว่า
anx avatar
fr flag
anx
พารามิเตอร์ Postfix ที่ระบุตารางการค้นหาเป็นเพียงรายการที่คั่นด้วยเครื่องหมายจุลภาค/ช่องว่างของการอ้างอิง `type:name` ดังนั้นจึง *เป็นวิธีที่ง่ายในการเรียงซ้อนกัน ฉันจะแนะนำให้ใช้สิ่งนั้นร่วมกับ `always_add_missing_headers=yes` แต่ฉันไม่แน่ใจว่านั่นเป็นคำตอบที่สมบูรณ์หรือไม่ (เนื่องจากเอกสารประกอบในบางแห่งดูเหมือนว่า 'การล้างข้อมูล' กำลังเพิ่มส่วนหัวที่ขาดหายไปเพียงครั้งเดียว *หลังจาก* การประมวลผล 'header_checks' )
Score:0
ธง fr
anx

เพื่อแก้ไขข้อจำกัดของ smtpd_*_restrictions:

ข้อความ - แม้แต่ข้อความที่มีผู้ส่ง "null" - ก็มีผู้ส่งซองเดียว ดังนั้นใช้ check_sender_access แทน check_recipient_access. ประเภทการค้นหาที่ใช้สามารถเป็นได้ คงที่: เพราะเราไม่สนใจเส้นทางขากลับโดยเฉพาะ เพิ่มลงในรายการ smtpd_sender_restrictions ของคุณก่อนที่จะสร้างการตรวจสอบใดๆ ยอมรับ ผลลัพธ์ (postfix จะไม่ค้นหาการค้นหาเพิ่มเติมนอกเหนือจากนั้น)

# ใน main.cf
common_sender_restrictions =
  ปฏิเสธ_non_fqdn_sender
  ปฏิเสธ_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access คงที่:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# ใน 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
id flag
ฟังดูน่าสนใจและเรียบร้อยมาก ให้ฉันลองทำสิ่งนี้ในภายหลัง!
Score:0
ธง in

ในกรณีที่คุณมี header_checks อยู่แล้ว ฉันคิดว่ามันไม่มีวิธีง่ายๆ ในการซ้อนไฟล์ header_check สองไฟล์

มีวิธีที่จะมีไฟล์ header_checks อิสระหลายไฟล์ต่อ daemon

แต่ละ -o ตัวเลือกใน master.cf ของคุณแทนที่ค่าเริ่มต้นหรือพารามิเตอร์การกำหนดค่า postfix ใน main.cf หากต้องการมี header_checks ที่แตกต่างกันต่อ daemon (เช่น /etc/postfix/header_checks1 และ /etc/postfix/header_checks2) คุณต้องลบล้างแต่ละรายการ header_checks พารามิเตอร์:

#เน็ตหน้าเดียว
1.2.3.4:25 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

#หันหน้าเข้าหากัน
10.0.0.1:10026 inet n - y - - smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

ด้วยวิธีนี้คุณจะมีอิสระอย่างสมบูรณ์ header_checks ไฟล์ต่อ smtpd daemon จากที่นั่น คุณสามารถเพิ่มกฎที่เติมแท็กที่คุณกำลังพูดถึง

id flag
ฉันได้พิจารณาสิ่งนี้แล้ว แต่อย่างที่ฉันระบุไว้: 1) มันแทนที่ header_checks ทั่วไปของฉัน 2) ข้อเสียทั้งหมดของ header_checks โดยทั่วไป ฉันมีอีเมลที่มาจากแหล่งที่ไม่น่าเชื่อถือ เช่น อินเทอร์เน็ตทั่วโลก ไม่แน่ใจว่านี่เป็นคำตอบสำหรับคำถามของฉันอย่างไรเนื่องจากเป็นคำถามของฉันอยู่แล้ว
id flag
ต้องมีความชัดเจน; หากคุณมีตรรกะทั่วไปใน `header_checks` ของ `main.cf` การแทนที่ใน `master.cf` จะปกปิดมัน นี่เป็นคุณสมบัติ แต่เป็นข้อเสีย/ปัญหาในกรณีนี้
FatRabbit avatar
in flag
หากคุณต้องการ header_checks ทั่วไปสำหรับ daemons ทั้งสอง เพียงเพิ่มกลับเข้าไปใน 'override' ทั้งสองรายการ คุณสามารถมี header_checks ได้มากเท่าที่คุณต้องการ เพียงระบุรายการ master.cf ไม่รองรับช่องว่าง ดังนั้นคุณต้องเก็บรายการไฟล์ header_checks ไว้ในตัวแปร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา