ฉันกำลังพยายามสร้างเซิร์ฟเวอร์ Postfix/Cyrus ขนาดเล็กบนเวิร์กสเตชัน Linux เพื่อทำหน้าที่เป็นพร็อกซีระหว่างอีเมลไคลเอ็นต์ (Thunderbird) และเซิร์ฟเวอร์อีเมลของบริษัท แต่ยังจัดการอีเมลระบบในเครื่องด้วย (สิ่งที่ส่งโดย crontabs สำหรับ ตัวอย่าง).
บนเซิร์ฟเวอร์ Cyrus ฉันสร้างกล่องจดหมายซึ่งเลียนแบบที่อยู่อีเมลของบริษัทของฉัน กำหนดค่านามแฝงใน /etc/นามแฝง
เพื่อส่งอีเมลท้องถิ่นปลายทาง ราก
หรือ นายไปรษณีย์
ตามที่อยู่นี้ และขอขอบคุณ ขนส่ง_maps
คำสั่งซึ่งมีความสำคัญเหนือสิ่งอื่นใด สั่งให้ Postfix ส่งอีเมลที่ส่งไปยังที่อยู่อีเมลนี้โดยตรงไปยังซ็อกเก็ต lmtp ของ Cyrus ส่วนนี้ทำงานได้ดีอย่างสมบูรณ์: เมลในเครื่องทั้งหมดที่ส่งไปยังผู้ใช้เหล่านั้น /etc/นามแฝง
ถูกส่งไปยังกล่องจดหมาย Cyrus ในพื้นที่ของฉัน ในขณะที่อีเมลทั้งหมดสำหรับโดเมนอื่น (หรือแม้แต่โดเมนของบริษัทของฉัน) ไปที่โฮสต์รีเลย์ (เซิร์ฟเวอร์อีเมลจริงของบริษัทของฉัน) หลังจาก จาก:
ส่วนหัวถูกเขียนใหม่ไปยังที่อยู่อีเมลบริษัทจริงของฉัน ขอบคุณ smtp_generic_maps
(ซึ่งทำหน้าที่เฉพาะกับจดหมายขาออกเท่านั้น ไม่เหมือน sender_canonical_maps
หรือ ผู้รับ_canonical_maps
). นี้เกือบจะสมบูรณ์แบบ
ปัญหาที่ฉันพบคือ Postfix ยอมรับเมลทั้งหมดที่ส่งไปยังผู้ใช้ในเครื่อง แม้กระทั่งผู้ใช้ระบบ และส่งไปยังไฟล์ mbox ใน /var/spool/mail
ที่ฉันไม่ต้องการ
ฉันพยายามตั้งค่า local_recipient_maps
เท่านั้น $alias_maps
(ไม่รวม พร็อกซี:ยูนิกซ์:passwd.byname
ซึ่งมีอยู่ในค่าเริ่มต้น) แต่สิ่งนี้จะไม่เปลี่ยนแปลงอะไรเลย
ฉันยังพยายามตั้งค่า mailbox_transport
เพื่อส่งอีเมลเหล่านั้นไปยังซ็อกเก็ต lmtp ของ Cyrus แต่ Postfix จะส่งทุกอย่างที่ไม่อยู่ในรายการไปยัง Cyrus $alias_maps
ไม่ว่าจะมีอยู่ในฐานข้อมูล Unix passwd หรือไม่ (setting mailbox_transport_maps = $alias_maps
ไม่ช่วยอะไร)
ด้วยการตั้งค่านี้ ส่งอีเมลถึงผู้ใช้ที่ไม่มีอยู่จริง (หรือบัญชี Unix ที่มีอยู่ซึ่งไม่ได้มีชื่อแทน) $alias_maps
) จบลงด้วยการปฏิเสธโดย Cyrus (ด้วย 550-กล่องจดหมายไม่รู้จัก
) แต่ฉันต้องการให้อีเมลเหล่านั้นปฏิเสธโดย Postfix โดยตรง หลีกเลี่ยงการเดินทางไปกลับที่ไร้ประโยชน์ (IMHO) ไปยัง Cyrus
ถ้าสิ่งที่ฉันพยายามจะบรรลุนั้นเป็นไปไม่ได้จริงๆ ฉันจะยอมทำสิ่งนี้
ฉันยังพยายามตั้งค่า local_transport
ไปยังซ็อกเก็ต lmtp ของ Cyrus แต่ที่แย่ไปกว่านั้น: จดหมายทั้งหมดจะถูกส่งโดยตรงไปยัง Cyrus โดยไม่มีนามแฝงใด ๆ (ดังนั้นจดหมายในเครื่องทั้งหมดจึงถูกปฏิเสธ แม้ว่าผู้ใช้ในเครื่องจะอยู่ใน $alias_maps
).
ฉันรู้ว่าฉันอาจเพิกเฉยได้ ท้องถิ่น
อย่างสมบูรณ์และจัดการจดหมายทั้งหมดด้วย เสมือน
ตัวแทนจัดส่ง (เป็นสิ่งที่ฉันมักจะทำเมื่อฉันตั้งค่า จริง เมลเซิร์ฟเวอร์ โดยใช้โดเมนเสมือน/กล่องจดหมายเท่านั้น) แต่ฉันชอบการกำหนดค่าที่เรียบง่ายมากที่ฉันลงเอยด้วย (/etc/postfix/main.cf
ขณะนี้มีเพียง 10 บรรทัดจริงหรือมากกว่านั้น) และฉันพบว่ามันน่าประหลาดใจมากที่ ท้องถิ่น
ไม่สามารถสั่งให้ละเว้นฐานข้อมูลรหัสผ่าน Unix และปฏิเสธทุกสิ่งที่ไม่ได้อยู่ในรายการ $alias_maps
(เว้นแต่ฉันจะเข้าใจเอกสารผิด มันคืออะไร local_recipient_maps
สำหรับ).
นี่คือการกำหนดค่าของฉัน:
/etc/postfix/main.cf
ความเข้ากันได้_ระดับ = 2
myhostname = <FQDN ของเวิร์กสเตชันของฉันใน lan>
inet_interfaces = วนกลับเท่านั้น
mynetworks_style = โฮสต์
relayhost = <MX ภายในบริษัทของฉัน>
alias_maps = hash:/etc/aliases (เพื่อแยก nis:mail.aliases)
transport_maps = แฮช:$config_directory/transport_maps
smtp_generic_maps = แฮช:$config_directory/smtp_generic_maps
บิฟ = ไม่
/etc/นามแฝง
นายไปรษณีย์: ราก
รูท: <ที่อยู่อีเมลบริษัทจริงของฉัน>
/etc/postfix/transport_maps
<ที่อยู่อีเมลบริษัทจริงของฉัน> lmtp:unix:/run/cyrus/socket/lmtp
/etc/postfix/smtp_generic_maps
@<FQDN ของเวิร์กสเตชันของฉันใน lan> <ที่อยู่อีเมลบริษัทจริงของฉัน>
อย่างที่คุณเห็น ง่ายมาก
ไม่มีวิธีสั่งให้ Postfix ปฏิเสธเมลสำหรับผู้ใช้ระบบ หรือให้แม่นยำกว่านั้น ปฏิเสธเมลสำหรับผู้ใช้ที่ไม่ได้ระบุไว้อย่างชัดเจนใน $alias_maps
?