จะแก้ไข Postfix '' Relay Access Denied 'ได้อย่างไร


54

เช้านี้เพื่อแก้ไขปัญหาชื่อที่ไม่ตรงกันในใบรับรองความปลอดภัยฉันทำตามขั้นตอนที่แนะนำจากวิธีแก้ไขเมลเซิร์ฟเวอร์ SSL แต่ตอนนี้เมื่อพยายามส่งอีเมลจากลูกค้า (ในกรณีนี้ไคลเอ็นต์คือ Windows Mail) ฉันได้รับข้อผิดพลาดดังต่อไปนี้

ที่อยู่อีเมลที่ถูกปฏิเสธคือ 'email@gmail.com' หัวเรื่อง 'นี่คือการทดสอบ ', บัญชี:' mail.domain.com ', เซิร์ฟเวอร์:' mail.domain.com ', โปรโตคอล: SMTP, การตอบกลับเซิร์ฟเวอร์:' 554 5.7.1: การเข้าถึงรีเลย์ถูกปฏิเสธ ', พอร์ต: 25, ปลอดภัย (SSL): ไม่ , ข้อผิดพลาดเซิร์ฟเวอร์: 554, หมายเลขข้อผิดพลาด: 0x800CCC79

แก้ไข : ฉันยังคงสามารถดึงอีเมลจากบัญชีนี้และฉันส่งอีเมลไปยังบัญชีอื่นในโดเมนเดียวกัน ฉันไม่สามารถส่งอีเมลไปยังผู้รับที่อยู่นอกโดเมนของเรา

ฉันพยายามปิดใช้งาน TLS โดยสิ้นเชิง แต่ไม่มีลูกเต๋าฉันยังคงได้รับข้อผิดพลาดเดิม

เมื่อฉันตรวจสอบไฟล์mail.logฉันเห็นดังต่อไปนี้

Jul 18 08:24:41 company imapd: LOGIN, user=user_name@domain.com, ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <email@gmail.com>: Relay access denied; from=<user_name@domain.com> to=<email@gmail.com> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79

ไฟล์main.cfมีลักษณะดังนี้:

#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#

#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#

command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

#
# Some common configuration parameters;
#

inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host

myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain

smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop

#
# Receiving messages parameters;
#

mydestination = localhost, company 
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf

#
# Delivering local messages parameters;
#

mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"

biff = no

alias_database = hash:/etc/aliases

local_recipient_maps =

#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf


#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_sender_restrictions =
        permit_sasl_authenticated
        permit_mynetworks

smtpd_recipient_restrictions =
        permit_sasl_authenticated
        check_recipient_access hash:/etc/postfix/filtered_domains
        permit_mynetworks
        reject_unauth_destination

ในฐานะที่เป็นบันทึกย่อด้านนายจ้างของฉันต้องการที่จะสามารถส่งอีเมลจากลูกค้า (Thunderbird และ Outlook) ทั้งจากภายในเครือข่ายท้องถิ่นของเราและนอกมัน


6
ทำไมคุณไม่ยอมรับ
โกง

คำตอบ:


58

TLS เพียงเปิดใช้งานการเข้ารหัสในเซสชัน smtp และไม่ส่งผลกระทบโดยตรงว่า Postfix จะได้รับอนุญาตให้ส่งข้อความหรือไม่

ข้อความที่ถูกปฏิเสธรีเลย์เกิดขึ้นเนื่องจากกฎ smtpd_recipient_restrictions ไม่ตรงกัน หนึ่งในเงื่อนไขเหล่านั้นจะต้องปฏิบัติตามเพื่อให้ข้อความผ่านไปได้:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    check_recipient_access hash:/etc/postfix/filtered_domains
    permit_mynetworks
    reject_unauth_destination

เพื่ออธิบายกฎเหล่านั้น:

permit_sasl_authenticated

อนุญาตให้ผู้ส่งที่ผ่านการรับรองความถูกต้องผ่าน SASL นี่เป็นสิ่งจำเป็นในการตรวจสอบผู้ใช้นอกเครือข่ายของคุณซึ่งปกติจะถูกบล็อก

check_recipient_access

สิ่งนี้จะทำให้ postfix มองหาใน / etc / postfix / filtered_domains เพื่อดูกฎตามที่อยู่ผู้รับ (ตัดสินโดยชื่อไฟล์ในชื่อไฟล์มันอาจเป็นเพียงการปิดกั้นโดเมนที่เฉพาะเจาะจง ... ตรวจสอบเพื่อดูว่า gmail.com มีการระบุไว้ในนั้นหรือไม่?)

permit_mynetworks

วิธีนี้จะอนุญาตโฮสต์โดยที่อยู่ IP ที่ตรงกับช่วง IP ที่ระบุใน $ mynetworks ใน main.cf ที่คุณโพสต์มีการตั้งค่า $ mynetworks เป็น 127.0.0.1 ดังนั้นมันจะส่งต่ออีเมลที่สร้างโดยเซิร์ฟเวอร์เท่านั้น

ตามการกำหนดค่าดังกล่าวไคลเอ็นต์อีเมลของคุณจะต้องใช้การตรวจสอบความถูกต้อง SMTP ก่อนได้รับอนุญาตให้ส่งข้อความ ฉันไม่แน่ใจว่า SASL ใช้ฐานข้อมูลใด ที่ระบุไว้ใน /usr/lib/sasl2/smtpd.conf สันนิษฐานว่ามันใช้ฐานข้อมูลเดียวกันกับกล่องจดหมายเสมือนของคุณดังนั้นคุณควรเปิดใช้งานการตรวจสอบสิทธิ์ SMTP ในไคลเอนต์อีเมลของคุณและตั้งค่าทั้งหมด


14
smtpd_use_tls = no

คุณปิดใช้งาน TLS mynetworksดังนั้นตอนนี้คุณต้องอนุญาตให้เครือข่ายของคุณโดยการเพิ่มเข้าไป ตัวอย่างเช่น,

mynetworks = 192.168.1.0/24 127.0.0.0/8

วิธีนี้จะแก้ไขการส่งจากเครือข่ายท้องถิ่นของคุณเท่านั้น สำหรับการส่งอีเมลจากนอกเครือข่ายท้องถิ่นของคุณคุณจะต้องใช้การรับรองความถูกต้อง TLS


ฉันได้ตั้งค่า smtpd_use_tls = ใช่เพราะเราต้องสามารถส่งอีเมลจากนอกเครือข่ายได้ อย่างไรก็ตามปัญหายังคงมีอยู่
โนอาห์ Goodrich

Bump smtpd_tls_loglevel มากถึง 3 และดูว่ามีอะไรที่น่าสนใจปรากฏขึ้นในบันทึก (และอย่าลืมวางลงไปที่ 1 หรือ 0 เมื่อคุณทำเสร็จแล้ว)
pgs

และลองตั้งค่า smtp_use_tls เป็น no (สำหรับการส่งอีเมลภายนอก) ดูpostfix.org/postconf.5.html#smtp_use_tls
pgs

1
-1 เพราะไม่ใช่ทุกคนสามารถปิดใช้งาน tls
jgifford25

3
ฉันไม่ได้บอกว่าเขาควรปิดการใช้งาน tls; ฉันกำลังบอกว่าเนื่องจากเขาปิดใช้งานไปแล้วเขาจึงจำเป็นต้องตั้งค่า mynetworks และวิธีแก้ปัญหาอย่างเต็มรูปแบบคือการทำให้ tls ทำงานอีกครั้ง
pgs

6

ฉันคิดว่าคุณคิดถึง domain.com ใน mydestination เพราะเป็นค่าเริ่มต้นrelay_domains=$mydestinationดังนั้นคุณสามารถต่อท้ายคุณกำหนดค่าบรรทัด:

mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain

หรือ:

relay_domains = $mydomain

อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ postfix ( service postfix restart) ทุกครั้งที่คุณแก้ไขไฟล์ postfix conf


+ 1 สำหรับการเพิ่ม "localhost, localhost.localdomain" ไปยังรายการของเจ้าภาพ (มักจะมีปัญหาในบางระบบไม่ชัดเจนว่าทำไมมันไม่เป็นปัญหากับคนอื่น ๆ แม้ว่า)
เลนคอลลิน

2

ฉันมีปัญหาเดียวกันใน Outlook (พร้อมแบ็กเอนด์ dovecote และ postfix) และฉันใช้เวลาสองวันเพื่อหาวิธีแก้ปัญหาและปรับแต่งไฟล์ปรับแต่งของฉัน สิ่งที่ฉันต้องทำก็คือทำเครื่องหมายที่ "เซิร์ฟเวอร์ต้องการการรับรองความถูกต้อง" ในแท็บขาออกในการตั้งค่าอีเมลใน outlook และข้อความของฉันจะถูกส่งไปยัง gmail ดูคำแนะนำรายละเอียดเกี่ยวกับวิธีการที่จะพบการตั้งค่าที่นี่http://support.bluetie.com/node/440


2

ปัญหานี้บั่นทอนฉันซักพัก ฉันพยายามเชื่อมต่อจาก server1.domain.com ไปยัง server2.domain.com

นี่คือวิธีที่ฉันแก้ไขสิ่งนี้ -

#/etc/postfix/main.cf
mydomain = server1.domain.com
myhostname = $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
alias_database = hash:/etc/postfix/virtual
myorigin = /etc/mailname
mydestination = localhost.localdomain localhost $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

คุณต้องตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า / etc / hosts และ / etc / hostname อย่างถูกต้องและตรวจสอบให้แน่ใจว่าคุณได้เรียกใช้สิ่งต่อไปนี้หลังจากการเปลี่ยนแปลงเครือข่าย -

sudo service networking restart

และต่อไปนี้หลังจากการเปลี่ยนแปลงการกำหนดค่า postfix

sudo service postfix reload

0

สำหรับผม: ผมมีการเพิ่มlocalhostการmynetworksโดยไม่คำนึงถึงความเป็นจริง127.0.0.0/8แล้วก็อยู่ที่นั่น ดังนั้นตอนนี้มันดูเหมือน:

mynetworks = 1.1.1.1/32, 127.0.0.0/8, localhost

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