ไม่สามารถรับอีเมลจาก Gmail


15

ไม่กี่วันที่ผ่านมา Gmail ก็ตัดสินใจหยุดส่งจดหมายไปยังเซิร์ฟเวอร์อีเมลของฉัน ฉันกำลังใช้ Postfix และ Dovecot ด้วยใบรับรอง SSL แบบชำระเงินที่ทำงานบน Debian 7 พร้อมทุกสิ่งที่อัปเดต

ฉันmail.logแสดงข้อผิดพลาดต่อไปนี้:

Dec 19 11:09:11 server postfix/smtpd[19878]: initializing the server-side TLS engine
Dec 19 11:09:11 server postfix/tlsmgr[19880]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
Dec 19 11:09:11 server postfix/tlsmgr[19880]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Dec 19 11:09:11 server postfix/smtpd[19878]: connect from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: setting up TLS connection from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: mail-wi0-x230.google.com[2a00:1450:400c:c05::230]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STR                              ENGTH:!aNULL:!DES:!3DES:!MD5:!DES+MD5:!RC4:!RC4-MD5"
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept:before/accept initialization
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept:error in unknown state
Dec 19 11:09:11 server postfix/smtpd[19878]: SSL_accept error from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]: -1
Dec 19 11:09:11 server postfix/smtpd[19878]: warning: TLS library problem: 19878:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown                               protocol:s23_srvr.c:647:
Dec 19 11:09:11 server postfix/smtpd[19878]: lost connection after STARTTLS from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]
Dec 19 11:09:11 server postfix/smtpd[19878]: disconnect from mail-wi0-x230.google.com[2a00:1450:400c:c05::230]

ข้อความที่ตัดตอนมาจาก postfix ของฉันmain.cf:

smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_CAfile = path to CA Bundle
smtpd_tls_cert_file= path to cert (pem)
smtpd_tls_key_file=path to key (pem)
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_exclude_ciphers = aNULL, DES, 3DES, MD5, DES+MD5, RC4, RC4-MD5
smtpd_tls_protocols=!SSLv2,!TLSv1,!TLSv1.1,!SSLv3
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_received_header = yes
tls_preempt_cipherlist = yes
tls_medium_cipherlist = AES256+EECDH:AES256+EDH

ฉันไม่รู้ว่าปัญหาอยู่ที่ใดเพราะฉันได้รับอีเมลจากคนอื่นเป็นประจำ ไม่มีข้อผิดพลาดในการเชื่อมต่อกับพอร์ต 25 ผ่าน telnet หรือพอร์ต 465 ผ่าน openssl

เพิ่มเติม: ฉันได้รับอีเมลนี้กลับมาจาก Google:

Delivery to the following recipient failed permanently:

     <removed>

Technical details of permanent failure:
TLS Negotiation failed

----- Original message -----
[...]

บางทีมันอาจมีปัญหากับ cipherlist ของฉัน?

ตอบคำถามของ masegaloeh:

openssl s_client -connect localhost:25 -starttls smtp
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
[...]
---
Server certificate
-----BEGIN CERTIFICATE-----
[...]
---
No client certificate CA names sent
---
SSL handshake has read 6267 bytes and written 477 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol  : TLSv1.2
Cipher    : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: [...]
Session-ID-ctx:
Master-Key: [...]
Key-Arg   : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 3600 (seconds)
TLS session ticket: [...]

Compression: 1 (zlib compression)
Start Time: 1418986680
Timeout   : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)

---
250 DSN

อัปเดต 1: ออกใบรับรอง SSL ของฉันอีกครั้ง สร้างทุกอย่างดังต่อไปนี้:
openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr -sha256

ฉันสร้างไฟล์ใหม่ซึ่งประกอบด้วยcrtและkeyหลังจากนั้นฉันสร้างบันเดิล CA:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt

เพิ่มทุกอย่างในการตั้งค่า dovecot และ postfix ของฉันและเริ่มบริการทั้งสองใหม่
Google ยังคงล้มเหลวในการส่งอีเมลถึงเซิร์ฟเวอร์ของฉันTLS Negotiation failed

ฉันลองใช้ผู้ให้บริการอีเมลรายอื่น (web.de) แล้วรับจดหมายส่ง
บันทึก web.de:

Dec 19 17:33:15 server postfix/smtpd[14105]: connect from mout.web.de[212.227.15.3]
Dec 19 17:33:15 server postfix/smtpd[14105]: setting up TLS connection from mout.web.de[212.227.15.3]
Dec 19 17:33:15 server postfix/smtpd[14105]: mout.web.de[212.227.15.3]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH"
Dec 19 17:33:15 server postfix/smtpd[14105]: mout.web.de[212.227.15.3]: save session EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647 to smtpd cache
Dec 19 17:33:15 server postfix/tlsmgr[14107]: put smtpd session id=EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647 [data 127 bytes]
Dec 19 17:33:15 server postfix/tlsmgr[14107]: write smtpd TLS cache entry EA1635ED786AFC2D9C7AB43EF43620A1D9092DC640FDE21C01E7BA25981D2445&s=smtp&l=268439647: time=1419006795 [data 127 bytes]
Dec 19 17:33:15 server postfix/smtpd[14105]: Anonymous TLS connection established from mout.web.de[212.227.15.3]: TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Soultion:
หลังจากเปิดใช้งานTLSv1และTLSv1.1ในsmtpd_(mandatory)_protocolsส่วนทุกอย่างทำงานได้ดี ขอบคุณmasegaloeh !

Dec 20 11:44:46 server postfix/smtpd[31966]: initializing the server-side TLS engine
Dec 20 11:44:46 server postfix/tlsmgr[31968]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
Dec 20 11:44:46 server postfix/tlsmgr[31968]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Dec 20 11:44:46 server postfix/smtpd[31966]: connect from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]
Dec 20 11:44:46 server postfix/smtpd[31966]: setting up TLS connection from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]
Dec 20 11:44:46 server postfix/smtpd[31966]: mail-wi0-x235.google.com[2a00:1450:400c:c05::235]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH"
Dec 20 11:44:46 server postfix/smtpd[31966]: Anonymous TLS connection established from mail-wi0-x235.google.com[2a00:1450:400c:c05::235]: TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)

เอาต์พุตของคำสั่งopenssl s_client -connect localhost:25 -starttls smtpคืออะไร
masegaloeh

เพิ่มไปยังคำถามของฉัน @masegaloeh
Octfx

นี่ก็ส่งผลต่อฉันด้วยการแสดงออก คำถามที่ดี
Boyd Stephen Smith Jr.

สิ่งนี้เพิ่งเริ่มส่งผลกระทบต่อฉันฉันไม่มีบรรทัด tls_protocol ใน main.cf ของฉันและค่าเริ่มต้นของเอกสารคือปิดใช้งาน SSL2 / 3 เท่านั้น อย่างไรก็ตามคำตอบด้านล่างแก้ไขปัญหาของฉัน
Bwooce

คำตอบ:


21

TLDR : โปรโตคอล TLS ของคุณเข้มงวดเกินไปเนื่องจากคุณอนุญาตการเชื่อมต่อ TLSv1.2 เท่านั้น

smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols=!SSLv2,!TLSv1,!TLSv1.1,!SSLv3

และ Gmail ส่งอีเมลไปยังเซิร์ฟเวอร์ของคุณกับ TLSv1 โปรโตคอล นั่นเป็นสาเหตุที่การเจรจา TLS ล้มเหลว

โซลูชันที่ชัดเจนคือการอนุญาตให้ใช้โปรโตคอล TLSv1 และ TLSv1.1 และยังคงปิดใช้งาน (ไม่ปลอดภัย) โปรโตคอล SSLv2 และ SSLv3


คำอธิบาย

ผมสามารถยืนยันกรณีของคุณเมื่อล้มเหลวที่จะได้รับอีเมลจาก Gmail และ Facebook มากกว่า STARTTLS

ทำไม GMAIL เท่านั้นที่ล้มเหลวในการส่งอีเมลไปยังเซิร์ฟเวอร์ของฉัน

นี่คือตัวอย่าง maillog เมื่อ GMAIL ส่งอีเมล

Dec 19 23:37:47 tls postfix/smtpd[3876]: initializing the server-side TLS engine
Dec 19 23:37:47 tls postfix/smtpd[3876]: connect from mail-wg0-f47.google.com[74.125.82.47]
Dec 19 23:37:48 tls postfix/smtpd[3876]: setting up TLS connection from mail-wg0-f47.google.com[74.125.82.47]
Dec 19 23:37:48 tls postfix/smtpd[3876]: mail-wg0-f47.google.com[74.125.82.47]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH:!aNULL:!DES:!3DES:!MD5:!DES+MD5:!RC4:!RC4-MD5"
Dec 19 23:37:48 tls postfix/smtpd[3876]: SSL_accept:before/accept initialization
Dec 19 23:37:48 tls postfix/smtpd[3876]: SSL_accept:error in unknown state
Dec 19 23:37:48 tls postfix/smtpd[3876]: SSL_accept error from mail-wg0-f47.google.com[74.125.82.47]: -1
Dec 19 23:37:48 tls postfix/smtpd[3876]: warning: TLS library problem: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:647:
Dec 19 23:37:48 tls postfix/smtpd[3876]: lost connection after STARTTLS from mail-wg0-f47.google.com[74.125.82.47]
Dec 19 23:37:48 tls postfix/smtpd[3876]: disconnect from mail-wg0-f47.google.com[74.125.82.47]

และนี่คือข้อมูลโค้ด maillog เมื่อ FACEBOOK ส่งอีเมล

Dec 19 23:11:14 tls postfix/smtpd[3844]: initializing the server-side TLS engine
Dec 19 23:11:14 tls postfix/tlsmgr[3846]: open smtpd TLS cache btree:/var/lib/postfix/smtpd_scache
Dec 19 23:11:14 tls postfix/tlsmgr[3846]: tlsmgr_cache_run_event: start TLS smtpd session cache cleanup
Dec 19 23:11:14 tls postfix/smtpd[3844]: connect from outcampmail003.ash2.facebook.com[66.220.155.162]
Dec 19 23:11:14 tls postfix/smtpd[3844]: setting up TLS connection from outcampmail003.ash2.facebook.com[66.220.155.162]
Dec 19 23:11:14 tls postfix/smtpd[3844]: outcampmail003.ash2.facebook.com[66.220.155.162]: TLS cipher list "aNULL:-aNULL:ALL:+RC4:@STRENGTH:!aNULL:!DES:!3DES:!MD5:!DES+MD5:!RC4:!RC4-MD5"
Dec 19 23:11:14 tls postfix/smtpd[3844]: SSL_accept:before/accept initialization
Dec 19 23:11:15 tls postfix/smtpd[3844]: SSL_accept:error in unknown state
Dec 19 23:11:15 tls postfix/smtpd[3844]: SSL_accept error from outcampmail003.ash2.facebook.com[66.220.155.162]: -1
Dec 19 23:11:15 tls postfix/smtpd[3844]: warning: TLS library problem: error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:647:
Dec 19 23:11:15 tls postfix/smtpd[3844]: lost connection after STARTTLS from outcampmail003.ash2.facebook.com[66.220.155.162]
Dec 19 23:11:15 tls postfix/smtpd[3844]: disconnect from outcampmail003.ash2.facebook.com[66.220.155.162]
Dec 19 23:11:16 tls postfix/smtpd[3844]: connect from outcampmail004.ash2.facebook.com[66.220.155.163]
Dec 19 23:11:17 tls postfix/smtpd[3844]: 962C281443: client=outcampmail004.ash2.facebook.com[66.220.155.163]
Dec 19 23:11:18 tls postfix/cleanup[3849]: 962C281443: message-id=<722b2b198d163c43d3bf013bdd396817@www.facebook.com>
Dec 19 23:11:18 tls postfix/qmgr[3843]: 962C281443: from=<notification+zj4zc0zzjfac@facebookmail.com>, size=18002, nrcpt=1 (queue active)
Dec 19 23:11:18 tls postfix/local[3850]: 962C281443: to=<root@tls.example.net>, orig_to=<zera@tls.example.net>, relay=local, delay=1.6, delays=1.5/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Dec 19 23:11:18 tls postfix/qmgr[3843]: 962C281443: removed
Dec 19 23:11:24 tls postfix/smtpd[3844]: disconnect from outcampmail004.ash2.facebook.com[66.220.155.163]

การวิเคราะห์บางอย่าง

  • ในตัวอย่างแรก GMAIL จะพยายามส่งอีเมลผ่าน STARTTLS เมื่อการเจรจา TLS มีข้อผิดพลาดเกิดขึ้นดังนั้นเซิร์ฟเวอร์ GMAIL จึงยกเลิกการเชื่อมต่อ เราจะหารือถึงสาเหตุข้อผิดพลาดที่เกิดขึ้นด้านล่าง
  • ในตัวอย่างที่สอง FACEBOOK ล้มเหลวในการส่งอีเมลผ่าน STARTTLS ในกระบวนการสำรอง FACEBOOK ส่งอีเมลอีกครั้งด้วยโหมดข้อความธรรมดา ในกรณีนี้เซิร์ฟเวอร์ของเรายอมรับอย่างมีความสุข

ดังนั้นนี่คือคำอธิบายว่าทำไม GMAIL เท่านั้นจึงไม่สามารถส่งอีเมลไปยังเซิร์ฟเวอร์ของคุณ Gmail ไม่ได้มีกลไกในการสำรองถ้า TLS การเจรจาล้มเหลว เซิร์ฟเวอร์อีเมลอื่นอาจใช้กลไกทางเลือกเพื่อให้แน่ใจว่าการส่งอีเมลจะประสบความสำเร็จ

ทำไมข้อผิดพลาดการเจรจา TLS เกิดขึ้น

ฉันเห็นบรรทัดที่น่าสนใจจาก web.de maillog

Dec 19 17:33:15 foxdev postfix/smtpd[14105]: Anonymous TLS connection established from mout.web.de[212.227.15.3]: TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)

และพบว่าคุณระบุการกำหนดค่านี้ใน main.cf

smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols=!SSLv2,!TLSv1,!TLSv1.1,!SSLv3

นั่นหมายความว่าเซิร์ฟเวอร์ของคุณยอมรับการเชื่อมต่อ TLS เมื่อใช้ TLSv1.2 เท่านั้น นอกเหนือจาก TLSv1.2 เซิร์ฟเวอร์ของคุณจะร้องเรียนข้อผิดพลาดในการเจรจา TLS

ถ้าฉันเปลี่ยนsmtpd_tls_(mandatory_)protocolsไป!SSLv2,!SSLv3,!TLSv1ข้อผิดพลาดยังคงเกิดขึ้น นั่นหมายความว่า GMAIL และ FACEBOOK จะพยายามติดต่อเซิร์ฟเวอร์อีเมลของคุณด้วยโปรโตคอลอื่นที่ไม่ใช่ TLSv1.1 และ TLSv1.2

ถ้าฉันเปลี่ยนsmtpd_tls_(mandatory_)protocolsการ!SSLv2,!SSLv3เจรจา TLS จะสำเร็จ มันยืนยันว่า GMAIL และ FACEBOOK จะติดต่อเซิร์ฟเวอร์ของคุณด้วยโปรโตคอล TLSv1

Dec 20 00:21:46 tls postfix/smtpd[4261]: Anonymous TLS connection established from outmail038.prn2.facebook.com[66.220.144.165]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)
Dec 20 00:23:00 tls postfix/smtpd[4261]: Anonymous TLS connection established from mail-wi0-f174.google.com[209.85.212.174]: TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)

คนอื่น ๆ ในฟอรัม FreeBSDก็ยืนยันพฤติกรรมเช่นนี้

วิธีการแก้

โซลูชันที่ชัดเจนคือเปิดใช้งาน TLSv1 และ TLSv1.1 ใน postfix ของคุณ วิธีนี้จะช่วยให้มั่นใจว่าเมลเซิร์ฟเวอร์บางตัวที่ไม่มีกลไกทางเลือกเช่น GMAIL สามารถสื่อสารกับเซิร์ฟเวอร์ของคุณได้

ฉันไม่ทราบสาเหตุของคุณที่จะปิดการใช้งานการสนับสนุน TLSv1 และ TLSv1.1 เหลือเพียงโปรโตคอล TLSv1.2 หากเป็นเว็บเซิร์ฟเวอร์และผู้ใช้ของคุณจะใช้เบราว์เซอร์ที่ทันสมัยเท่านั้นคุณสามารถปิดใช้งาน TLSv1 ในเซิร์ฟเวอร์ของคุณ นี้เป็นที่ยอมรับเพราะเบราว์เซอร์เฉพาะผู้สูงอายุที่ไม่สนับสนุนโปรโตคอล TLSv1


0

ปัญหาที่อาจเกิดขึ้นอย่างหนึ่งที่ฉันเห็นคือการใช้ใบรับรองที่ลงนามเองอย่างชัดเจนตามที่รายงานโดย OpenSSL:

Verify return code: 19 (self signed certificate in certificate chain)

หากคุณใช้ใบรับรอง SSL ที่ชำระเงินคุณไม่ควรใช้ใบรับรองที่ลงชื่อด้วยตนเอง

ฉันจะตรวจสอบว่าไฟล์ PEM ของคุณมีใบรับรองที่ชำระเงินแล้วและตรวจสอบว่ามีไฟล์เชนทั้งหมด


ใบรับรองที่ลงนามเองคือใบรับรองหลักจาก CA ซึ่งลงนามด้วยตนเองโดย CA
Octfx

CA ของคุณคือใคร หากพวกเขาใช้ใบรับรองที่ลงนามด้วยตนเองในกลุ่มของพวกเขาคุณจะต้องให้ทั้งห่วงโซ่ในไฟล์. pem ของคุณ
Craig Watson

มันเป็นใบรับรองจาก Comodo ฉันไม่ได้ใช้ใบรับรองที่ลงนามโดยฉัน ดังที่โคโมโดได้ลงนามในหนังสือรับรองรากของพวกเขาด้วยตนเองซึ่งในกรณีนี้ผลลัพธ์ในcode: 19 (self signed certificate)
Octfx

1
คุณไม่ควรได้รับcode 19ข้อความหากมีการให้บริการเต็มรูปแบบ ฉันใช้ใบรับรองจาก StartSSL ซึ่งให้ข้อผิดพลาดเดียวกันที่ด้านบนของคำสั่ง แต่เมื่อฉันให้เต็มเชน (รวมถึงรูต CA) ภายในsmtpd_tls_cert_fileไฟล์ PEM ไคลเอนต์มีใบรับรองทั้งหมดที่จำเป็นในการตรวจสอบห่วงโซ่เต็ม .
Craig Watson

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