วิธีการบังคับใช้ที่อยู่ผู้ส่งให้เป็น“ log-in-user@example.org” ใน Postfix ได้อย่างไร


15

ฉันตั้งค่าเซิร์ฟเวอร์ Postfix ด้วย SMTP AUTH (STARTTLS บนพอร์ต 587) ผู้ใช้ของฉันทั้งหมดอยู่ในโดเมน "example.org" ฉันต้องการบังคับให้ที่อยู่ผู้ส่งเป็น "log-in-user@example.org"

ฉันได้เรียนรู้ว่าสิ่งนี้สามารถทำได้ด้วยตัวเลือก main.cf

smtpd_sender_restrictions = reject_sender_login_mismatch, ...
smtpd_sender_login_maps = hash:/etc/postfix/smtpd_sender_login_maps

ด้วยไฟล์ login_maps เช่น:

a@example.org a
b@example.org b
c@example.org c
...

(ดูที่การบล็อกที่อยู่ผู้ส่งการปลอมแปลงด้วย SMPT AUTH ) แต่นี่หมายความว่าฉันจะต้องแก้ไขไฟล์ login_maps ทุกครั้งที่มีผู้ใช้ใหม่ ฉันไม่ต้องการการจับคู่ที่ยืดหยุ่นเช่นนี้: ควรเป็น "log-in-user@example.org" เสมอ มีตัวเลือกง่ายขึ้นไหม

คำตอบ:


14

ก่อนอื่นให้ตรวจสอบว่าการติดตั้ง Postfix ของคุณรองรับ pcre หรือไม่โดยป้อนคำสั่งpostconf -mและค้นหาบรรทัดที่มีpcreอยู่ เมื่อคุณได้รับการตรวจสอบว่าคุณได้รับการสนับสนุน pcre แล้วคุณสามารถทำได้ดังนี้:

/etc/postfix/login_maps.pcre:

/^(.*)@example\.org$/   ${1}

ในmain.cf:

smtpd_sender_login_maps = pcre:/etc/postfix/login_maps.pcre

ควรทำงานได้ดี


มันสมบูรณ์แบบ สิ่งที่ฉันกำลังมองหา!
Chris Lercher

3
สำหรับผู้ใช้ Ubuntu คุณสามารถรับ pcre postfix sudo apt-get install postfix-pcreได้ บางทีนี่อาจเห็นได้ชัดที่สุด
NeilMonday

ไม่มีวิธีที่จะละเว้นโดเมนใน regex หรือ$myhostnameตัวแปรอ้างอิงหรือไม่ ที่นี่คุณจะเห็นว่า Postfix สามารถค้นหาตารางการค้นหาโดยส่วนผู้ใช้ของอีเมล ...
Jaime Hablutzel

ฉันเชื่อว่าคุณจะต้องการแบ็กสแลชหลีกเลี่ยงการ '.' อักขระในชื่อโดเมนดังนั้นจึงถูกตีความว่าเป็นการจับคู่ตามตัวอักษร: /^(.*)@example\.org$/
Arnon

มิฉะนั้นสิ่งนี้จะตรงกับ "test @ exampleXorg" เช่นเดียวกับ "test@example.org" ซึ่งอาจไม่ใช่พฤติกรรมที่ต้องการ
Arnon

6

regex ที่กล่าวถึงในคำตอบอื่น ๆ ตรงกับส่วนของผู้ใช้ที่อยู่อีเมล ( ล็อกอินในผู้ใช้ @ example.org) นี่คือข้อมูลเพิ่มเติมบางส่วน

ในการใช้ที่อยู่อีเมลแบบเต็มเป็นชื่อผู้ใช้ให้ใช้ regex ต่อไปนี้ (ตัวอย่างเช่นใน/etc/postfix/login_map):

/^(.*)$/   ${1}

ซึ่งหมายความว่าชื่อผู้ใช้ของคุณจะเป็นที่อยู่อีเมลแบบเต็มของคุณเสมอ ( log-in-user@example.org ) - ไม่มีชื่อผู้ใช้อื่นที่ได้รับอนุญาตให้ส่งจากที่อยู่นั้น - และคุณไม่ต้องอัปเดตไฟล์กำหนดค่า Postfix เพิ่มเติมทุกครั้งที่คุณ เพิ่มผู้ใช้

อาจใช้กับเซิร์ฟเวอร์ที่มีการกำหนดค่าหลายโดเมน ผู้ใช้john.doe@example.comได้รับอนุญาตให้ส่งจากที่อยู่นั้นเท่านั้น แต่ไม่ได้มาจากjohn.doe@example.org (ผู้ใช้และอีเมลที่แตกต่างกันบุคคลอื่น) ชื่อผู้ใช้john.doeน่าจะคลุมเครือในกรณีนี้

นอกจากนี้ยังขึ้นอยู่กับการกำหนดค่าของคุณการตั้งค่า smtpd_sender_login_maps ซึ่งต้องชี้ไปที่ไฟล์นี้อาจอยู่ใน master.cf (แทน main.cf) เอกสาร Dovecotอย่างเป็นทางการมีตัวอย่างดังต่อไปนี้ (ถ้าคุณใช้ SASL / ส่ง):

submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

ในตัวอย่างนี้ควรปรับการตั้งค่าให้ชี้ไปที่ไฟล์ที่ถูกต้องและใช้ regex หรือ (ดีกว่า) pcre เป็นชนิด โดยเฉพาะอย่างยิ่งหากไฟล์ที่เรียกว่า "virtual" ถูกใช้เพื่อวัตถุประสงค์อื่นแล้ว (เช่นvirtual_alias_maps ดังที่แสดงในตัวอย่าง Postfix อย่างเป็นทางการ ) ไฟล์อื่นควรใช้สำหรับการจับคู่เข้าสู่ระบบ

จาก:

smtpd_sender_login_maps=hash:/etc/postfix/virtual

ถึง:

smtpd_sender_login_maps=pcre:/etc/postfix/login_map

0

คุณสามารถใช้การรวมกันของ regexp ที่ส่วนหัวตามที่ปรากฏที่นี่: http://www.akadia.com/services/postfix_uce.html ? จากนั้นคุณสามารถรวมกับ regexp เช่น [*@example.org] เพื่อให้แน่ใจว่ามีเพียงผู้ส่งจาก example.org


สมมติว่าฉันสามารถใช้ "regexp:" ที่นี่ (?) ฉันจะระบุ regexp เช่นนี้ได้อย่างไรผู้ใช้ "a" สามารถส่งเป็น "a@example.org" แต่ไม่ใช่เป็น "b@example.org" ได้อย่างไร
Chris Lercher

@sonstabo มันจะดีถ้าคุณรวมตัวอย่างการตั้งค่า
Jaime Hablutzel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.