Postfix: ที่อยู่ผู้รับถูกปฏิเสธ: ผู้ใช้ไม่รู้จักในตารางผู้รับในเครื่องแม้ว่าโดเมนผู้รับจะเป็นโดเมนภายนอก


9

ในโครงสร้างพื้นฐาน บริษัท ของฉันฉันมีเซิร์ฟเวอร์เมลภายในที่มี postfix ซึ่งชื่อคือsrv-internal.central.mydomain.tldด้วย IP ภายใน 10.10.128.200

สำหรับการแลกเปลี่ยนเมลกับ Net จะใช้เซิร์ฟเวอร์เมลรีเลย์ (เซิร์ฟเวอร์บนสภาพแวดล้อม DMZ ที่มีรูเข็มที่จำเป็นทั้งหมดเช่น .. ) แม้จะมี postfix ซึ่งชื่อคือmailgw.central.mydomain.tldด้วยอินเตอร์เฟสภายใน IP 10.10 133.105

ชื่อโดเมนสาธารณะของโครงสร้างพื้นฐานของเราคือ (พูด) " central.mydomain.tld " แต่ " pec.central.mydomain.tld " ไม่ได้เป็นโดเมนย่อยของเรา มีการให้บริการโดย ISP อื่นนอกเครือข่ายของเรา (เช่นส่งอีเมลไปยังโดเมนนี้ต้องออกไป)

ถ้าฉันส่งจดหมายจากuser1@central.mydomain.tld (จากเครื่อง srv-internal.central.mydomain.tld) ​​ไปที่foo@pec.central.mydomain.tldฉันได้รับข้อผิดพลาดต่อไปนี้จากเซิร์ฟเวอร์รีเลย์

Sep  4 08:03:16 mailgw postfix/smtpd[26678]: NOQUEUE: reject: RCPT from unknown[10.10.128.200]: 550 5.1.1 <foo@pec.central.mydomain.tld>: Recipient address rejected: User unknown in relay recipient table; from=<user1@central.mydomain.tld> to=<foo@pec.central.mydomain.tld> proto=ESMTP helo=<srv-internal.central.mydomain.tld>
Sep  4 08:03:16 mailgw postfix/smtpd[26678]: disconnect from unknown[10.10.128.200]

เซิร์ฟเวอร์รีเลย์ของฉันอยู่ใน Linux CentOS รีลีส 5.7 การเปิดใช้งาน postfix คือ postfix-2.3.3-2.1.el5_2 จากที่เก็บ CentOS มาตรฐาน

สมมติว่าโดเมนของฉันคือ:

 mydomain = central.mydomain.tld

และการกำหนดค่า postfix ของฉันบนเซิร์ฟเวอร์รีเลย์ปัจจุบันคือต่อไปนี้:

(postconf -d; postconf -d; postconf -n;) | จัดเรียง | uniq -u

alias_maps = hash:/etc/aliases
biff = no
body_checks = regexp:/etc/postfix/body_checks
content_filter = filter:127.0.0.1:10025
default_process_limit = 10
disable_vrfy_command = yes
header_checks = pcre:/etc/postfix/header_checks
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 12582912
mime_header_checks = regexp:/etc/postfix/mime_header_checks
mydestination = $myhostname, localhost.$mydomain
myhostname = mailgw.$mydomain
mynetworks = 127.0.0.0/8, 10.10.24.0/24, 10.10.128.200/32, 10.10.128.201/32
newaliases_path = /usr/bin/newaliases.postfix
readme_directory = /etc/postfix/README_FILES
receive_override_options = no_address_mappings
relay_domains = $mydomain, riminiventure.it
relay_recipient_maps = hash:/etc/postfix/relay_recipients
sample_directory = /etc/postfix/samples
sendmail_path = /usr/sbin/sendmail.postfix
smtpd_error_sleep_time = 5s
smtpd_hard_error_limit = 10
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_mynetworks,    permit_sasl_authenticated,    check_client_access hash:/etc/postfix/access_client,    check_helo_access hash:/etc/postfix/access_helo,    check_sender_access hash:/etc/postfix/access_sender, pcre:/etc/postfix/access_sender_pcre,    check_recipient_access hash:/etc/postfix/access_recipient,    reject_unauth_destination,    reject_invalid_hostname,    reject_unauth_pipelining,    reject_non_fqdn_sender,    reject_unknown_sender_domain,    reject_non_fqdn_recipient,    reject_unknown_recipient_domain,    reject_rbl_client bl.spamcop.net,    reject_rbl_client sbl.spamhaus.org,  check_policy_service inet:127.0.0.1:2501,    permit
smtpd_soft_error_limit = 3
strict_rfc821_envelopes = yes
transport_maps = hash:/etc/postfix/transport
unknown_local_recipient_reject_code = 450
virtual_alias_domains = riminifar.it
virtual_alias_maps = hash:/etc/postfix/virtual

และนี่คือ / etc / postfix / transport ของฉัน:

central.mydomain.tld        smtp:[srv-internal.central.mydomain.tld]
someotherdomain.org         smtp:[srv-internal.central.mydomain.tld]
yadomain.it                  smtp:[srv-internal.central.mydomain.tld]
xad.central.mydomain.tld        smtp:[srv-internal.central.mydomain.tld]
test.central.mydomain.tld        smtp:[10.10.15.101]

ตอนนี้ที่อยู่ผู้รับถูกปฏิเสธ: ผู้ใช้ที่ไม่รู้จักในตารางผู้รับรีเลย์ดูเหมือนว่าเซิร์ฟเวอร์รีเลย์ (mailgw) "คิด" ว่า "pec.central.mydomain.tld" เป็นหนึ่งในโดเมนย่อยดังนั้นจึงค้นหาผู้ใช้ผู้รับใน relay_recipient_maps ในขณะที่มัน ไม่ควร IMHO

ฉันคาดหวังพฤติกรรมนี้ถ้าฉันใส่ ".central.mydomain.tld" (มีจุดเริ่มต้น!) ในตารางการขนส่งของฉัน แต่ฉันมี "central.mydomain.tld" ดังนั้นจริงๆการอ่านคู่มือควรพิจารณาชื่อโดเมนเท่านั้น และไม่ใช่โดเมนย่อยด้วย

ฉันซาบซึ้งอย่างมากถ้ามีคนแนะนำฉันในสิ่งที่ฉันทำผิด

คำตอบ:


6

พารามิเตอร์ที่คุณควรระวังก็คือparent_domain_matches_subdomains

รายการคุณลักษณะของ Postfix ที่รูปแบบ "example.com" จับคู่โดเมนย่อยของ example.com ด้วยแทนที่จะต้องใช้รูปแบบ ".example.com" ที่ชัดเจน นี่คือการวางแผนความเข้ากันได้แบบย้อนหลัง: ในที่สุดคุณลักษณะ Postfix ทั้งหมดคาดว่าจะต้องใช้รูปแบบสไตล์ ".example.com" อย่างชัดเจนเมื่อคุณต้องการจับคู่โดเมนย่อยจริงๆ

ดังนั้น parent_domain_matches_subdomains ถือรายชื่อของโดเมนที่ postfix ควรจะตรงกับโดเมนย่อยเกินไปแม้จะไม่มี (dot) ในด้านหน้าของมัน

น่าเสียดายที่relay_domainsพารามิเตอร์อยู่ในรายการนั้น

# postconf parent_domain_matches_subdomains
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps

และเนื่องจากคุณrelay_domainsมี$mydomainหรือcentral.mydomain.tld , postfix ตรงกับโดเมนย่อยทั้งหมดของcentral.mydomain.tldเป็นrelay_domainsคนที่ไม่ภายนอก


มีการตั้งค่าโซลูชันparent_domain_matches_subdomainsและไม่รวม relay_domain ในพารามิเตอร์เหล่านั้น


ขอบคุณมาก @masegaloeh มันใช้งานได้เหมือนมีเสน่ห์! :) คำอธิบายของคุณก็ชัดเจนเช่นกันอีกครั้ง
gabolander

@gabolander ถ้าใช้งานได้โปรดยอมรับคำตอบนี้ดังนั้นคำถามไม่ได้ลอยอยู่ในสระที่ไม่ตอบ
masegaloeh

ฉันทำไปแล้วขอบคุณ (ฉันไม่สามารถรายงานว่ามีประโยชน์เพราะฉันต้องการ 15 ในฐานะชื่อเสียงและฉันยังไม่มี)
gabolander

0

ในกรณีของฉันฉันพบรายการที่อนุญาตสำหรับผู้ใช้อีเมลภายใต้: / etc / postfix / relay_recipients หากผู้ใช้ของคุณไม่อยู่ในรายการเหล่านี้เขาจะไม่ได้รับอีเมลใด ๆ

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