สับสนเกี่ยวกับ alias_maps และ virtual_alias_maps


22

ฉันได้อ่านเอกสารเกี่ยวกับเรื่องนี้และโพสต์อื่น ๆ ที่นี่อีกครั้งแล้วและนี่ก็ยังไม่ชัดเจนสำหรับฉัน ฉันได้ทดสอบสิ่งต่าง ๆ เพื่อทำความเข้าใจความแตกต่างระหว่างalias_mapsและกับvirtual_alias_mapsและฉันไม่เห็นการใช้การตั้งค่าแยกต่างหาก 2 อย่างใน postfix นี่คือสิ่งที่ฉันพบจนถึงขณะนี้(หมายเหตุ - ฉันใช้ postfix ในเซิร์ฟเวอร์เดียวกับเว็บเซิร์ฟเวอร์ของฉันเป็นไคลเอ็นต์แบบ null เพื่อส่งอีเมลเท่านั้น) :

1) / etc / aliases file:

root: me@somedomain.com

เมื่อฉันเพิ่มด้านบนลงในalias_mapsฉันพบว่าบริการบางอย่างเช่น fail2ban สามารถเลือกได้และจะส่งอีเมลรากไปยังที่อยู่อีเมลนามแฝงที่กล่าวถึง อย่างไรก็ตามฉันสังเกตเห็นว่าบริการอื่น ๆ (เช่นmailคำสั่ง) ไม่เคารพสิ่งนี้และพยายามส่งอีเมลโดยตรงไปที่ root@mydomain.com ซึ่งไม่มีอยู่ (ฉันคิดว่าการmyoriginตั้งค่าpostfix ที่เพิ่ม @ mydomain.com) . เพื่อแก้ไขปัญหานี้ฉันจึงเพิ่มvirtual_alias_maps

2) / etc / postfix / เสมือน

root     me@someotherdomain.com

เมื่อเพิ่มข้างต้นบริการทั้งหมดจะใช้อีเมลแทนเสมือนนี้ ฉันยังสังเกตเห็นว่าเมื่อฉันเพิ่มข้างต้นแม้ fail2ban เริ่มละเว้นการตั้งค่าเริ่มต้นของฉันใน/etc/aliases/ไฟล์และเริ่มตามที่อยู่อีเมลที่กำหนดในไฟล์เสมือน

ตอนนี้ทำให้ฉันสับสนมากยิ่งขึ้น -

  1. ทำไมเราต้อง/etc/aliases/มีอีเมลภายในแผนที่นามแฝงเสมือนดูเหมือนว่าจะแทนที่มัน?

  2. วัตถุประสงค์ของการมีการทำแผนที่นามแฝงแยกกัน 2 รายการนี้คืออะไรและเมื่อใดเราจะตัดสินใจใช้เมื่อใด

  3. เหตุใด fail2ban (ซึ่งมีการกำหนดค่าให้ส่งไปยังroot@localhost) ก่อนตามที่อยู่อีเมลที่ระบุในalias_maps(/ etc / aliases /) และหลังจากนั้นจึงตัดสินใจเพิกเฉยต่อว่าเมื่อvirtual_alias_mapsมีการเพิ่ม

  4. เหตุใดบริการทั้งหมดจึงไม่อ่านชื่อแทนอีเมลที่กล่าวถึงใน / etc / aliases และบริการเหล่านั้นจะทำงานเฉพาะเมื่อเพิ่มชื่อแทนอีเมลในแผนที่นามแฝงเสมือน

ฉันใช้เวลาหลายชั่วโมงตั้งแต่เมื่อวานและยังไม่แน่ใจ ใครช่วยฉันล้างความสับสนของฉันได้ไหม

แก้ไข: นี่คือบันทึกอีเมลเมื่อมีการส่งอีเมลไปยังรูทโดยใช้mail rootคำสั่ง อีเมลนามแฝงสำหรับรูทถูกกล่าวถึงใน / etc / aliases / แต่เมลไม่ทำงานจนกว่าฉันจะย้ายอีเมลแทนจากรูทนี้aliases_mapsไปยังvirtual_aliases_maps

เข้าสู่ระบบเมื่อมีการกล่าวถึงนามแฝงอีเมลหลักใน/etc/aliases/:

Nov 14 16:39:27 Debian postfix/pickup[4339]: 0F12643432: uid=0 from=<root>

Nov 14 16:39:27 Debian postfix/cleanup[4495]: 0F12643432: message-id=<20141114110927.0F12643432@Debian.domainname.com>

Nov 14 16:39:27 Debian postfix/qmgr[4338]: 0F12643432: from=<root@domainname.com>, size=517, nrcpt=1 (queue active)

Nov 14 16:39:27 Debian postfix/error[4496]: 0F12643432: to=<root@domainname.com>, orig_to=<root>, relay=none, delay=0.04, delays=0.03/0/0/0.01, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to domainname.com[128.199.147.136]:25: Connection refused)

นี่คือบันทึกหลังจากนามแฝงอีเมลสำหรับรูทถูกย้ายจาก/etc/aliases/ไปยัง/etc/postfix/virtualตำแหน่งที่การส่งอีเมลสำเร็จหลังจากการเปลี่ยนแปลง:

Nov 14 16:44:58 Debian postfix/pickup[4545]: ADD9A43436: uid=0 from=<root>

Nov 14 16:44:58 Debian postfix/cleanup[4563]: ADD9A43436: message-id=<20141114111458.ADD9A43436@Debian.domainname.com>

Nov 14 16:44:58 Debian postfix/qmgr[4544]: ADD9A43436: from=<root@domainname.com>, size=453, nrcpt=1 (queue active)

Nov 14 16:45:00 Debian postfix/smtp[4551]: ADD9A43436: to=<admin@somesite.com>, orig_to=<root>, relay=somesite.com[108.160.157.120]:25, delay=1.9, delays=0.03/0/0.97/0.88, dsn=2.0.0, status=sent (250 OK id=1XpEqC-0002ry-9s)

Nov 14 16:45:00 Debian postfix/qmgr[4544]: ADD9A43436: removed

I also noticed that some other services (like mail command) does not respect this-> โปรดแสดงรายการ maillog ที่เกี่ยวข้องกับเงื่อนไขนี้
masegaloeh

@masegaloeh ได้อัปเดตโพสต์ของฉันด้วยบันทึกอีเมลแล้ว
Neel

คำตอบ:


35

พื้นหลังบางส่วน

Postfix สืบทอดคุณสมบัติบางอย่างจาก sendmail รุ่นเก่าเช่น milter และ aliases ไฟล์ที่/etc/aliasesเป็นส่วนหนึ่งของมรดกและดำเนินการโดยaliases alias_mapsในอีกด้านหนึ่ง postfix มีvirtual_maps/ virtual_alias_mapsสำหรับจัดการนามแฝงอีเมล ดังนั้นความแตกต่างระหว่างพวกเขาคืออะไร?

พารามิเตอร์ alias_maps

  • ใช้สำหรับการจัดส่งในพื้นที่เท่านั้น(8)

  • ตามระดับที่อยู่ใน postfixอีเมลจะจัดส่งตามท้องถิ่น (8) หากชื่อโดเมนผู้รับมีการระบุไว้ในmydestination

  • การป้อนข้อมูลการค้นหาเป็นเพียงชิ้นส่วนในท้องถิ่นจาก addres อีเมลแบบเต็ม (เช่น myuser จาก myuser@example.com) จะละทิ้งส่วนโดเมนของผู้รับ

  • ผลการค้นหาสามารถมีหนึ่งหรือมากกว่าต่อไปนี้:

    • ที่อยู่อีเมล : อีเมลจะถูกส่งต่อไปยังที่อยู่อีเมล
    • / file / ชื่อ : อีเมลจะถูกผนวกเข้ากับ/ ไฟล์ / ชื่อ
    • | คำสั่ง : เมลที่ส่งไปยังคำสั่ง
    • : include: / file / name : include alias from / file / name

พารามิเตอร์ virtual_alias_maps

  • ใช้โดยการส่งแบบเสมือน (5)

  • เรียกใช้ครั้งแรกเสมอก่อนที่จะเรียนที่อยู่อื่น ๆ มันไม่สนใจว่าโดเมนของผู้รับได้เข้าจดทะเบียนในmydestination, virtual_mailbox_domainsหรือสถานที่อื่น ๆ มันจะแทนที่ที่อยู่ / นามแฝงที่กำหนดไว้ในสถานที่อื่น ๆ

  • การป้อนข้อมูลการค้นหามีรูปแบบบาง

    • user @ domain : มันจะตรงกับuser @ domain อย่างแท้จริง

    • ผู้ใช้ : มันจะตรงกับผู้ใช้ @site เมื่อไซต์คือเท่ากับ$myoriginเมื่อเว็บไซต์จะปรากฏอยู่ใน$mydestinationหรือเมื่อมีการระบุไว้ในหรือ$inet_interfaces ฟังก์ชันนี้ทับซ้อนกับฟังก์ชันการทำงานของฐานข้อมูลนามแฝงท้องถิ่น (5)$proxy_interfaces

    • @domain : มันจะจับคู่กับอีเมลที่ต้องการdomainโดยไม่คำนึงถึงชิ้นส่วนในท้องถิ่น

  • ผลการค้นหาจะต้อง

    • ที่อยู่อีเมลที่ถูกต้อง
    • ผู้ใช้ที่ไม่มีโดเมน Postfix จะต่อท้าย$myoriginหากappend_at_myoriginตั้งค่าเป็นใช่

เหตุใดเราจึงต้องการ / etc / aliases เมื่อมีอีเมลในแผนที่นามแฝงเสมือนดูเหมือนว่าจะแทนที่?

ดังที่คุณเห็นด้านบนalias_maps(/ etc / aliases) มีคุณสมบัติเพิ่มเติมบางอย่าง (ข้างการส่งต่อ) เช่นคำสั่ง piping to มันตรงกันข้ามกับvirtual_alias_mapsที่เพิ่งส่งต่ออีเมล

วัตถุประสงค์ของการมีการทำแผนที่นามแฝงแยกกัน 2 รายการนี้คืออะไรและเมื่อใดเราจะตัดสินใจใช้เมื่อใด

alias_mapsข้อเสียที่คุณสามารถแยกความแตกต่างถ้าผู้รับเดิมมีรูปแบบroot@example.comหรือroot@example.net ทั้งคู่จะแมปกับรายการรูalias_mapsต ในมืออื่น ๆ virtual_alias_mapsที่คุณสามารถกำหนดที่อยู่ส่งต่อที่แตกต่างกันด้วย

เหตุใด fail2ban (ซึ่งถูกกำหนดค่าให้ส่งอีเมลถึงรูท @ localhost) ทำตามที่อยู่อีเมลที่ให้ไว้ใน alias_maps (/ etc / aliases /) ก่อนแล้วจึงตัดสินใจเพิกเฉยว่าเมื่อเพิ่ม virtual_alias_maps แล้ว?

ก่อน virtual_alias_maps เพิ่ม : ราก @ localhost ถูก aliased โดยalias_mapsเพราะ localhost mydestinationได้เข้าจดทะเบียนใน

หลังจาก virtual_alias_maps กำหนด : แรกเข้าroot(ใน virtual_alias_maps) ไม่ได้มีส่วนโดเมนและ localhost ได้เข้าจดทะเบียนในจึงจะตรงกับmydestinationroot me@example.com

เหตุใดบริการทั้งหมดจึงไม่อ่านชื่อแทนอีเมลที่กล่าวถึงใน / etc / aliases และบริการเหล่านั้นจะทำงานเฉพาะเมื่อเพิ่มชื่อแทนอีเมลในแผนที่นามแฝงเสมือน

คำสั่งmail rootจะส่งอีเมลไปที่รูท เนื่องจากไม่มีส่วนของโดเมนpostfix trivial-rewriteจะผนวก myorigin ต่อท้ายส่วนของโดเมน ดังนั้น mail จะถูกส่งไปยังราก @ myorigin

ก่อน virtual_alias_maps เพิ่ม : แต่น่าเสียดายที่myoriginไม่ได้อยู่ในดังนั้นมันจะไม่นามแฝงโดยmydestinationalias_maps

หลังจาก virtual_alias_maps เพิ่ม : แรกเข้าroot(ใน virtual_alias_maps) ไม่ได้มีส่วนโดเมนและ myorigin (ชัด) เช่นเดียวจึงจะตรงกับmyoriginroot me@example.com


1
ในประโยคข้อเสียที่คุณสามารถแยกความแตกต่าง ...คำว่าสามารถอาจจะหมายถึงการเป็นไม่สามารถ มิฉะนั้นฉันก็ไม่สามารถเข้าใจได้ alias_maps
Daniel Böhmer

2
  1. /etc/aliasesมีหลักสำหรับการจัดส่งในท้องที่ตัวอย่างเช่น mail to root จาก cron เป็นต้นมันเป็นเรื่องดีที่จะแยกนามแฝงในเครื่องของคุณออกจากกันvirtual_alias_mapsสามารถใช้กับ SQL DBs และอื่น ๆ ได้

  2. virtual_alias_maps ใช้เมื่อคุณมีผู้ใช้เสมือน (และโดเมนเสมือน) ซึ่งมักจะไม่ได้แมปกับผู้ใช้ระบบ แต่ถ้าคุณไม่มีโดเมนเสมือนและผู้ใช้น้อยมากฟังก์ชันการทำงานประเภทนั้นอาจไม่จำเป็น

  3. fail2ban ไม่สนใจมันแค่ส่งอีเมลไปที่ MTA

  4. คุณต้องระบุให้ชัดเจนยิ่งขึ้นว่าบริการใดพวกเขาส่งจดหมายอย่างไรและที่ไหน


ขอบคุณ @NickW สองสามสิ่ง: (1) สำหรับ No: 4 คำสั่ง mail เป็นหนึ่งในบริการที่ทำสิ่งนี้ ฉันหมายถึงว่า / etc / aliases เป็นหลักสำหรับการจัดส่งในท้องถิ่นไปยังผู้ใช้ท้องถิ่นmail rootคำสั่งshouldnt ควรอยู่ภายใต้หมวดหมู่นี้จริงหรือไม่ ทำไมบริการนี้ถึงไม่พิจารณาข้อมูลใน / etc / aliases เมื่อมีการจัดส่งในพื้นที่ (2) พิจารณาสิ่งเหล่านี้สำหรับสถานการณ์ของฉันมันเป็นวิธีปฏิบัติที่ดีหรือไม่ที่จะต้องมีชื่อแทนผู้ใช้อีเมลที่กล่าวถึงในทั้งสอง/etc/aliasesและvirtual_alias_mapsเพื่อให้ทำงานได้ทุกอย่างหรือไม่
Neel

1
1. ตกลงคำสั่ง mail ควรใช้/etc/aliasesโดยค่าเริ่มต้นคำถามที่โง่จริงๆคุณทำการรันnewaliasesหลังจากอัปเดตไฟล์ใช่ไหม 2. ฉันจะบอกว่านั่นเกินความจริงหากผู้คนจะได้รับจดหมายจากเครื่องในท้องถิ่นมันจะคุ้มค่าที่จะกำหนดค่าสคริปต์ให้ใช้ที่อยู่อีเมลที่ถูกต้องของพวกเขาด้วยวิธีนั้นจะถูกกำหนดเส้นทางผ่าน postfix และส่งไปยังปลายทางที่ถูกต้อง
NickW

สวัสดี @NickW ใช่ฉันได้สร้างชื่อแทนโดยใช้newaliasesหลังจากการเปลี่ยนแปลง สิ่งเดียวที่ฉันคิดได้ว่าทำไมมันถึงไม่ใช้นามแฝงอาจเป็นเพราะการตั้งค่า postfix ที่เพิ่มขึ้น@$domain_nameหลังจากผู้ใช้ดังนั้นจึงvirtual_alias_mapsจำเป็นต้องเปลี่ยนเส้นทางอีเมลเหล่านั้น ฉันอ่านสิ่งนี้ในเอกสาร postfix และอาจเป็นสาเหตุที่mailคำสั่งรูทไม่ทำงานกับaliases: postfix.org/STANDARD_CONFIGURATION_README.html#some_localอย่างไรก็ตามขอบคุณมากที่ช่วยให้ฉันเข้าใจ Nick ที่ดีกว่านี้ ฉันซาบซึ้งจริงๆ .. :)
Neel

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