내 서버가 SSL 암호화를 사용하여 이메일을 보내나요?

내 서버가 SSL 암호화를 사용하여 이메일을 보내나요?

을 사용하여 작은 메일 서버를 배포했습니다 sendmail. 암호화 유무에 관계없이 배달 요청을 수락하도록 프록시가 올바르게 구성되어 있다고 생각합니다. 그 이유는 다음과 같은 텔넷 세션을 통해 이루어지기 때문입니다.

usr@host:~$ nc -Cw 60 localhost 25
220 mail.mydomain.com ESMTP Sendmail 8.15.2/8.15.2/Debian-14~deb10u1; Tue, 8 Dec 2020 19:24:30 GMT; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
EHLO localhost
250-mail.mydomain.com Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-STARTTLS
250-DELIVERBY
250 HELP
MAIL FROM: [email protected]
250 2.1.0 [email protected]... Sender ok
RCPT TO: [email protected]
250 2.1.5 [email protected]... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
From: [email protected]
To: [email protected]
Subject: Sendmail test

This is a test mail delivered with Sendmail.
.
250 2.0.0 0B8JOUMo005314 Message accepted for delivery
QUIT
221 2.0.0 mail.mydomain.com closing connection

..그리고 Python 코드 조각:

def send_mail_ssl(subject, text, receiver, sender):
  body = _BODY_PATTERN.format(sender=sender,
                              receiver=receiver,
                              subject=subject,
                              text=text)
  context = ssl.create_default_context()
  with smtplib.SMTP_SSL('mail.mydomain.com', 465, context=context) as server:
    server.sendmail(sender, receiver, body)

def send_mail_tls(subject, text, receiver, sender):
  body = _BODY_PATTERN.format(sender=sender,
                              receiver=receiver,
                              subject=subject,
                              text=text)
  context = ssl.create_default_context()
  try:
    server = smtplib.SMTP('mail.mydomain.com', 25)
    server.ehlo()
    server.starttls(context=context)
    server.ehlo()
    server.sendmail(sender, receiver, body)
  except Exception as e:
    print(e)
  finally:
    server.quit()

...이메일이 ​​성공적으로 전송되었습니다. 그러나 이메일을 전달하기 위해 대상 SMTP 노드와 암호화된 세션이 설정되어 있는지 확실하지 않습니다. 어떻게 확인할 수 있나요?

12/09 업데이트 댓글에서 언급되었으므로 여기에 테스트 이메일에 포함된 헤더 중 일부를 추가하겠습니다.

Received: from AM6EUR05HT200.eop-eur05.prod.protection.outlook.com
 (2603:10a6:3:e3::27) by HE1PR06MB3930.eurprd06.prod.outlook.com with HTTPS
 via HE1PR0502CA0017.EURPRD05.PROD.OUTLOOK.COM; Tue, 8 Dec 2020 17:43:15 +0000
Received: from AM6EUR05FT016.eop-eur05.prod.protection.outlook.com
 (2a01:111:e400:fc11::49) by
 AM6EUR05HT200.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc11::294)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.17; Tue, 8 Dec
 2020 17:43:14 +0000
Authentication-Results: spf=pass (sender IP is MYSERVERIP)
 smtp.mailfrom=mail.mydomain.com; live.it; dkim=none (message not signed)
 header.d=none;live.it; dmarc=bestguesspass action=none
 header.from=mail.mydomain.com;compauth=pass reason=109
Received-SPF: Pass (protection.outlook.com: domain of mail.mydomain.com
 designates MYSERVERIP as permitted sender)
 receiver=protection.outlook.com; client-ip=MYSERVERIP;
 helo=mail.mydomain.com;
Received: from mail.mydomain.com (MYSERVERIP) by
 AM6EUR05FT016.mail.protection.outlook.com (10.233.240.243) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.3632.17 via Frontend Transport; Tue, 8 Dec 2020 17:43:14 +0000
X-IncomingTopHeaderMarker:
 OriginalChecksum:A8C3955649979800BCCE5770882A4FE8994D8B0B90393756BB8AD24255EBB904;UpperCasedChecksum:DC234C8D58F32E07B6AFB42D6ABE9D17CF745F6968D869D01974CBC93315655A;SizeAsReceived:484;Count:6
Received: from mail.mydomain.com (mail.mydomain.com [MYSERVERIP])
    by mail.mydomain.com (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTPS id 0B8HhDPU003097
    (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT)
    for <[email protected]>; Tue, 8 Dec 2020 17:43:14 GMT
[...]

답변1

  1. 첫 번째 시도 - SMTP 포트 tcp/25에 대한 클래식 연결을 사용하여 텔넷 세션을 사용하십시오. 이는 문제가 없으며 표준입니다. 이를 사용할 수 있으며 EHLO 이후에는 STARTTLS를 사용하여 암호화된 세션으로 전환할 수 있습니다. 하지만 귀하의 Python은 SSL 기반 SMTP, 즉 SMTPS를 사용하도록 구성되어 있습니다. 얼마 전에 시도했지만 대부분 포기했습니다. TCP/465를 사용하며 처음부터 암호화됩니다. 몇 가지 단점이 있습니다.

  2. 그렇습니다. Python은 이메일을 제출 서버로 보낼 때 일종의 암호화를 사용하고 있습니다. 그러나 제출 서버에서 최종 대상 서버로 이메일을 전송하는 것과는 아무런 관련이 없습니다(직접 또는 다른 중계를 통해). 이는 관련 서버와 해당 서버의 알고리즘 목록, 기본 설정 설정 등에 의해 협상됩니다. 내가 아는 한, SMTP MTA 간 암호화를 강제하는 표준은 없습니다.

관련 정보