Tidak dapat menerima email dari Gmail

15

Beberapa hari yang lalu Gmail tiba-tiba memutuskan untuk berhenti mengirim surat ke server surat saya. Saya menggunakan Postfix dan Dovecot dengan Sertifikat SSL berbayar yang berjalan pada Debian 7 dengan semua yang diperbarui.

Saya mail.logmenunjukkan kesalahan berikut:

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]

kutipan dari postfix saya 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

Saya tidak tahu di mana masalahnya, karena saya secara teratur menerima surat dari orang lain. Tidak ada kesalahan menghubungkan ke port 25 melalui telnet atau port 465 via openssl

Tambahan: Saya menerima email ini sebagai balasan dari Google:

Delivery to the following recipient failed permanently:

     <removed>

Technical details of permanent failure:
TLS Negotiation failed

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

Mungkin itu masalah dengan pembuat sandi saya?

Jawaban untuk pertanyaan 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

Pembaruan 1: diterbitkan kembali sertifikat SSL saya. Semuanya dihasilkan sebagai berikut:
openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr -sha256

Saya kemudian membuat file baru yang terdiri dari crtdan key, setelah ini saya membuat bundel CA:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.crt

Menambahkan semuanya ke konfigurasi dovecot dan postfix saya dan me-restart kedua layanan.
Google masih gagal mengirim email ke server saya yang mengakibatkanTLS Negotiation failed

Saya mencoba penyedia email lain (web.de) dan emailnya terkirim.
log 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:
Setelah mengaktifkan TLSv1dan TLSv1.1di smtpd_(mandatory)_protocolsbagian semuanya berfungsi dengan baik. Terima kasih 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)
Octfx
sumber
Apa output dari perintah openssl s_client -connect localhost:25 -starttls smtp?
masegaloeh
Menambahkannya ke Pertanyaan saya @masegaloeh
Octfx
Ini juga memengaruhi saya dengan exim; pertanyaan bagus
Boyd Stephen Smith Jr
Ini baru mulai mempengaruhi saya, saya tidak memiliki baris tls_protocol di main.cf saya, dan standar yang didokumentasikan adalah hanya menonaktifkan SSL2 / 3. Namun jawaban di bawah ini memperbaiki masalah saya.
Bwooce

Jawaban:

21

TLDR : Protokol TLS Anda terlalu ketat karena Anda hanya mengizinkan koneksi TLSv1.2.

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

Dan GMAIL mengirim email ke server Anda dengan protokol TLSv1 . Itu sebabnya negosiasi TLS gagal.

Solusi yang jelas adalah memungkinkan protokol TLSv1 dan TLSv1.1 dan masih menonaktifkan (tidak aman) protokol SSLv2 dan SSLv3.


Penjelasan

Saya dapat mengonfirmasi kasus Anda ketika gagal menerima email dari GMAIL dan FACEBOOK melalui STARTTLS .

Mengapa hanya GMAIL yang gagal mengirim email ke server saya

Ini adalah cuplikan maillog ketika GMAIL mengirim 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]

Dan ini adalah cuplikan maillog ketika FACEBOOK mengirim 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=<[email protected]>
Dec 19 23:11:18 tls postfix/qmgr[3843]: 962C281443: from=<[email protected]>, size=18002, nrcpt=1 (queue active)
Dec 19 23:11:18 tls postfix/local[3850]: 962C281443: to=<[email protected]>, orig_to=<[email protected]>, 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]

Beberapa analisis

  • Dalam cuplikan pertama, GMAIL akan mencoba mengirim email melalui STARTTLS. Ketika TLS dinegosiasikan, beberapa kesalahan terjadi, jadi server GMAIL mencabutnya. Kami akan membahas mengapa kesalahan terjadi di bawah ini.
  • Dalam cuplikan kedua, FACEBOOK juga gagal mengirim email melalui STARTTLS. Dalam proses fallback, FACEBOOK mengirim ulang email dengan mode teks biasa. Dalam hal ini server kami dengan senang hati menerimanya.

Jadi, itu menjelaskan mengapa hanya GMAIL yang gagal mengirim email ke server Anda. GMAIL tidak memiliki mekanisme untuk mundur jika negosiasi TLS gagal . Server email lain mungkin menggunakan mekanisme fallback untuk memastikan pengiriman email berhasil.

Mengapa kesalahan Negosiasi TLS terjadi

Saya melihat baris yang menarik dari maillog web.de

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)

Dan cari tahu bahwa Anda menentukan konfigurasi ini di main.cf

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

Itu berarti server Anda hanya menerima koneksi TLS ketika TLSv1.2 digunakan. Selain TLSv1.2, server Anda akan mengeluh kesalahan negosiasi TLS.

Jika saya mengubah smtpd_tls_(mandatory_)protocolske !SSLv2,!SSLv3,!TLSv1, kesalahan masih terjadi. Itu berarti GMAIL dan FACEBOOK akan mencoba menghubungi server surat Anda dengan protokol selain TLSv1.1 dan TLSv1.2.

Jika saya beralih smtpd_tls_(mandatory_)protocolske !SSLv2,!SSLv3, negosiasi TLS akan berhasil. Ini mengkonfirmasi bahwa GMAIL dan FACEBOOK akan menghubungi server Anda dengan protokol 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)

Orang lain di forum FreeBSD juga mengkonfirmasi perilaku ini.

Larutan

Solusi yang jelas adalah mengaktifkan TLSv1 dan TLSv1.1 di postfix Anda. Ini akan memastikan beberapa server email yang tidak memiliki mekanisme cadangan - seperti GMAIL - masih dapat berkomunikasi dengan server Anda.

Saya tidak tahu alasan Anda untuk menonaktifkan dukungan TLSv1 dan TLSv1.1, hanya menyisakan protokol TLSv1.2. Jika itu adalah server web dan pengguna Anda akan menggunakan browser modern saja, maka Anda dapat menonaktifkan TLSv1 di server Anda. Ini dapat diterima karena hanya browser yang lebih lama yang tidak mendukung protokol TLSv1 .

masegaloeh
sumber
0

Satu masalah potensial yang bisa saya lihat adalah penggunaan sertifikat yang ditandatangani sendiri seperti yang dilaporkan oleh OpenSSL:

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

Jika Anda menggunakan sertifikat SSL berbayar, Anda tidak boleh menggunakan sertifikat yang ditandatangani sendiri.

Saya akan memeriksa bahwa file PEM Anda berisi sertifikat berbayar Anda, dan juga memverifikasi bahwa itu berisi rantai sertifikat lengkap.

Craig Watson
sumber
Ya, sertifikat yang ditandatangani sendiri adalah sertifikat root dari CA yang ditandatangani sendiri oleh CA.
Octfx
Siapa CA Anda? Jika mereka menggunakan sertifikat yang ditandatangani sendiri di rantai mereka, Anda harus memberikan seluruh rantai di file .pem Anda.
Craig Watson
Ini adalah sertifikat dari Comodo. Saya tidak menggunakan sertifikat yang ditandatangani oleh saya. Seperti yang dikatakan Comodo menandatangani sertifikat root mereka sendiri yang dalam hal ini menghasilkancode: 19 (self signed certificate)
Octfx
1
Anda seharusnya tidak menerima code 19pesan jika rantai penuh Anda sedang dilayani. Saya menggunakan sertifikat dari StartSSL, yang memberikan kesalahan yang sama di bagian atas perintah, tetapi karena saya memberikan rantai penuh (termasuk root CA) dalam smtpd_tls_cert_filefile PEM, klien memiliki semua sertifikat yang diperlukan untuk memvalidasi rantai penuh .
Craig Watson
Saya akan menerbitkan ulang sertifikat saya hanya untuk mengujinya. Masalahnya adalah, saya tidak mengubah apa-apa, google tidak bisa lagi mengirimkan email kepada saya
Octfx