Gmail에서 메일을받을 수 없습니다


15

며칠 전 Gmail은 갑자기 내 메일 서버로 메일을 보내지 않기로 결정했습니다. 데비안 7에서 실행되는 유료 SSL 인증서와 함께 Postfix와 Dovecot를 사용하고 있습니다.

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 또는 openssl을 통해 포트 465에 연결하는 데 오류가 없습니다.

추가 : Google에서이 메일을 보냈습니다.

Delivery to the following recipient failed permanently:

     <removed>

Technical details of permanent failure:
TLS Negotiation failed

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

어쩌면 내 암호 목록에 문제가 있습니까?

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 :
활성화 한 후 TLSv1TLSv1.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 2014

내 질문에 추가했습니다 @masegaloeh
Octfx

이것은 또한 exim으로 나에게 영향을 미치고있다. 좋은 질문입니다.
보이드 스티븐 스미스 주니어

이것은 방금 나에게 영향을 미치기 시작했고 내 main.cf에 tls_protocol 줄이 없었으며 문서화 된 기본값은 SSL2 / 3 만 비활성화하는 것입니다. 그러나 아래의 대답은 내 문제를 해결했습니다.
Bwooce

답변:


21

TLDR : TLSv1.2 연결 만 허용하므로 TLS 프로토콜이 너무 엄격합니다.

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 프로토콜을 비활성화 (비보안)합니다.


설명

STARTTLS를 통해 GMAIL 및 FACEBOOK에서 이메일을받지 못한 경우 귀하의 사례를 확인할 수 있습니다 .

내 서버로 이메일을 보내지 못한 GMAIL 만 왜

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]

그리고 이것은 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만이 서버로 이메일을 보내지 못하는 이유를 설명합니다. TLS 협상에 실패하면 GMAIL에 폴백 메커니즘이 없습니다 . 다른 메일 서버는 폴백 메커니즘을 사용하여 전자 메일 배달이 성공할 수 있습니다.

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

이는 TLSv1.2를 사용할 때 서버가 TLS 연결 만 수락 함을 의미합니다 . TLSv1.2 이외의 서버는 TLS 협상 오류를 불평합니다.

내가 변경하는 경우 smtpd_tls_(mandatory_)protocols!SSLv2,!SSLv3,!TLSv1, 오류가 계속 발생합니다. 즉, GMAIL 및 FACEBOOK은 TLSv1.1 및 TLSv1.2 이외의 프로토콜로 메일 서버에 접속을 시도합니다.

로 변경 smtpd_tls_(mandatory_)protocols하면 !SSLv2,!SSLv3TLS 협상이 성공합니다. 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을 활성화하는 것입니다. 이렇게하면 GMAIL과 같은 폴백 메커니즘이없는 일부 메일 서버가 여전히 서버와 통신 할 수 있습니다.

TLSv1.2 프로토콜 만 남겨두고 TLSv1 및 TLSv1.1 지원을 비활성화 해야하는 이유를 모르겠습니다. 웹 서버이고 사용자가 최신 브라우저 만 사용하는 경우 서버에서 TLSv1을 비활성화 할 수 있습니다. 프로토콜 TLSv1을 지원하지 않는 구형 브라우저 만 사용 가능 합니다 .


0

내가 볼 수있는 잠재적 인 문제 중 하나는 OpenSSL에서보고 한 자체 서명 인증서의 명백한 사용입니다.

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

유료 SSL 인증서를 사용하는 경우 자체 서명 된 인증서를 사용하지 않아야합니다.

PEM 파일에 유료 인증서가 포함되어 있는지 확인하고 전체 인증서 체인이 포함되어 있는지 확인합니다.


자체 서명 인증서는 CA에서 자체 서명 한 CA의 루트 인증서입니다.
Octfx December

CA는 누구입니까? 체인에서 자체 서명 된 인증서를 사용하는 경우 .pem 파일에 전체 체인을 제공해야합니다.
Craig Watson

Comodo의 인증서입니다. 본인이 서명 한 인증서를 사용하지 않습니다. 말했듯이 코모도는 스스로 자신의 루트 인증서에 서명합니다.이 경우code: 19 (self signed certificate)
Octfx

1
code 19전체 체인이 제공되는 경우 메시지를 받지 않아야합니다 . StartSSL의 인증서를 사용하여 명령 상단에 동일한 오류가 발생하지만 smtpd_tls_cert_filePEM 파일 내에 전체 체인 (루트 CA 포함)을 제공함 에 따라 클라이언트는 전체 체인의 유효성을 검사하는 데 필요한 모든 인증서를 갖습니다. .
Craig Watson

테스트하기 위해 인증서를 다시 발행 할 것입니다. 문제는 아무것도 바꾸지 않았다는 것입니다. 구글은 더 이상 나에게 메일을 전달할 수 없습니다
Octfx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.