Không thể nhận thư từ Gmail


15

Vài ngày trước, Gmail đột nhiên quyết định ngừng gửi thư đến máy chủ thư của tôi. Tôi đang sử dụng Postfix và Dovecot với Chứng chỉ SSL trả phí chạy trên Debian 7 với mọi thứ được cập nhật.

My mail.loghiển thị lỗi sau:

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]

đoạn trích từ postfix của tôi 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

Tôi không biết vấn đề ở đâu, vì tôi thường xuyên nhận được thư từ người khác. Không có lỗi kết nối với cổng 25 qua telnet hoặc cổng 465 qua openssl

Ngoài ra: Tôi đã nhận được thư này từ Google:

Delivery to the following recipient failed permanently:

     <removed>

Technical details of permanent failure:
TLS Negotiation failed

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

Có lẽ đó là một vấn đề với danh sách mật mã của tôi?

Trả lời câu hỏi của 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

Cập nhật 1: Cấp lại chứng chỉ SSL của tôi. Tạo mọi thứ như sau:
openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr -sha256

Sau đó tôi đã tạo một tệp mới bao gồm crtkey, sau đó tôi đã tạo gói CA:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt

Đã thêm mọi thứ vào cấu hình dovecot và postfix của tôi và khởi động lại cả hai dịch vụ.
Google vẫn không gửi được email cho máy chủ của tôi, dẫn đếnTLS Negotiation failed

Tôi đã thử một nhà cung cấp thư khác (web.de) và thư được gửi.
nhật ký 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:
Sau khi kích hoạt TLSv1TLSv1.1trong smtpd_(mandatory)_protocolsphần mọi thứ hoạt động tốt. Cảm ơn 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)

Đầu ra của lệnh là openssl s_client -connect localhost:25 -starttls smtpgì?
masegaloeh

Đã thêm nó vào Câu hỏi của tôi @masegaloeh
Octfx 19/12/14

Điều này cũng ảnh hưởng đến tôi với exim; câu hỏi tuyệt vời.
Boyd Stephen Smith Jr.

Điều này mới bắt đầu ảnh hưởng đến tôi, tôi không có dòng tls_protatio trong main.cf của mình và mặc định được ghi lại là chỉ vô hiệu hóa SSL2 / 3. Tuy nhiên, câu trả lời dưới đây đã khắc phục vấn đề của tôi.
Bwooce

Câu trả lời:


21

TLDR : Các giao thức TLS của bạn quá nghiêm ngặt vì bạn chỉ cho phép kết nối TLSv1.2.

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

Và GMAIL gửi email đến máy chủ của bạn với giao thức TLSv1 . Đó là lý do tại sao đàm phán TLS thất bại.

Giải pháp rõ ràng là cho phép các giao thức TLSv1 và TLSv1.1 và vẫn vô hiệu hóa các giao thức SSLv2 và SSLv3 (không an toàn).


Giải trình

Tôi có thể xác nhận trường hợp của bạn khi không nhận được email từ GMAIL và FACEBOOK qua STARTTLS .

Tại sao chỉ có GMAIL không gửi email đến máy chủ của tôi

Đây là đoạn maillog khi GMAIL gửi email

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]

Và đây là đoạn maillog khi FACEBOOK gửi email

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]

Một số phân tích

  • Trong đoạn đầu tiên, GMAIL sẽ cố gắng gửi email qua STARTTLS. Khi đàm phán TLS, một số lỗi xảy ra, vì vậy máy chủ GMAIL sẽ ngắt kết nối nó. Chúng tôi sẽ thảo luận tại sao lỗi xảy ra dưới đây.
  • Trong đoạn mã thứ hai, FACEBOOK cũng không gửi được email qua STARTTLS. Trong quá trình dự phòng, FACEBOOK gửi lại email với chế độ văn bản thuần túy. Trong trường hợp này, máy chủ của chúng tôi vui vẻ chấp nhận nó.

Vì vậy, điều đó giải thích tại sao chỉ GMAIL không gửi email đến máy chủ của bạn. GMAIL không có cơ chế dự phòng nếu đàm phán TLS thất bại . Máy chủ thư khác có thể sử dụng cơ chế dự phòng để đảm bảo gửi email thành công.

Tại sao xảy ra lỗi Đàm phán TLS

Tôi phát hiện ra dòng thú vị từ 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)

Và tìm ra rằng bạn chỉ định cấu hình này trong main.cf

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

Điều đó có nghĩa là máy chủ của bạn chỉ chấp nhận kết nối TLS khi sử dụng TLSv1.2. Khác với TLSv1.2, máy chủ của bạn sẽ khiếu nại lỗi thương lượng TLS.

Nếu tôi thay đổi smtpd_tls_(mandatory_)protocolsđể !SSLv2,!SSLv3,!TLSv1, lỗi vẫn xảy ra. Điều đó có nghĩa là GMAIL và FACEBOOK sẽ cố gắng liên hệ với máy chủ thư của bạn bằng các giao thức khác ngoài TLSv1.1 và TLSv1.2.

Nếu tôi đổi smtpd_tls_(mandatory_)protocolssang !SSLv2,!SSLv3, đàm phán TLS sẽ thành công. Nó xác nhận rằng GMAIL và FACEBOOK sẽ liên hệ với máy chủ của bạn bằng giao thức 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)

Những người khác trong diễn đàn FreeBSD cũng xác nhận hành vi này.

Giải pháp

Giải pháp rõ ràng là kích hoạt TLSv1 và TLSv1.1 trong postfix của bạn. Điều này sẽ đảm bảo một số máy chủ thư không có cơ chế dự phòng - như GMAIL - vẫn có thể giao tiếp với máy chủ của bạn.

Tôi không biết lý do của bạn để vô hiệu hóa hỗ trợ TLSv1 và TLSv1.1, chỉ để lại giao thức TLSv1.2. Nếu đó là máy chủ web và người dùng của bạn sẽ chỉ sử dụng trình duyệt hiện đại, thì bạn có thể tắt TLSv1 trong máy chủ của mình. Điều này được chấp nhận vì chỉ có trình duyệt cũ không hỗ trợ giao thức TLSv1 .


0

Một vấn đề tiềm năng tôi có thể thấy là việc sử dụng chứng chỉ tự ký rõ ràng như được báo cáo bởi OpenSSL:

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

Nếu bạn đang sử dụng chứng chỉ SSL trả phí, bạn không nên sử dụng chứng chỉ tự ký.

Tôi sẽ kiểm tra xem tệp PEM của bạn có chứa chứng chỉ phải trả tiền hay không và cũng xác minh rằng nó chứa chuỗi chứng chỉ đầy đủ.


Vâng, chứng chỉ tự ký là chứng chỉ gốc từ CA do CA tự ký.
Octfx 19/12/14

CA của bạn là ai Nếu họ sử dụng chứng chỉ tự ký trong chuỗi của họ, bạn sẽ cần cung cấp toàn bộ chuỗi trong tệp .pem của mình.
Craig Watson

Nó là một chứng chỉ từ Comodo. Tôi không sử dụng chứng chỉ có chữ ký của tôi. Như đã nói Comodo ký chứng nhận gốc của họ bởi chính họ, trong trường hợp này kết quả làcode: 19 (self signed certificate)
Octfx 19/12/14

1
Bạn không nên nhận một code 19tin nhắn nếu chuỗi đầy đủ của bạn đang được phục vụ. Tôi sử dụng một cert từ StartSSL, mang đến cho các lỗi tương tự ở phía trên cùng của lệnh, nhưng như tôi đã cung cấp toàn bộ chuỗi giá trị (bao gồm cả các CA root) trong smtpd_tls_cert_filetập tin PEM, khách hàng có tất cả các chứng chỉ cần thiết để xác nhận toàn bộ chuỗi .
Craig Watson

Tôi sẽ cấp lại chứng chỉ của mình chỉ để kiểm tra nó. Vấn đề là, tôi đã không thay đổi bất cứ điều gì, google không thể gửi thư cho tôi nữa
Octfx 19/12/14
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.