아래 표에는 이메일 전송의 각 단계에서 사용할 수 있는 프로토콜/포트가 나와 있습니다. 표 postfix
에는 ✘ 또는 ✔로 표시하여 서버 설정 에서 사용하려는 프로토콜/포트도 표시됩니다 .
N | 작업 | 보내는 사람 | 수화기 | 가능한 프로토콜/포트 |
---|---|---|---|---|
1 | "메일 제출" | 무아 | MSA | (✘) SMTP 25 (✘) SMTP 25 & STARTTLS (✘) SMTP 587 & STARTTLS (✔) SMTPS 465 & 암시적 TLS |
2 | "서버 내부" | MSA | MTA | / |
삼... | "메일 릴레이" | MTA | MTA | (✘) SMTP 25 (✘) SMTP 25 & STARTTLS (✔) SMTP 25 & STARTTLS & DANE |
n -2 | "서버 내부" | MTA | MDA | / |
n - 1 | "서버 내부" | MDA | MS | / |
N | "사서함 액세스" | MS | 무아 | (✘) POP3 110 & STARTTLS (✘) POP3S 995 & 암시적 TLS(✘) IMAP 143 & STARTTLS (✔) IMAPS 993 & 암시적 TLS |
계속하기 전에 다음 두 가지 가정에 동의할지, 동의하지 않을지 묻고 싶습니다.
가정 A:
나는 가정한다이것Postfix라는 오래된 답변서비스 465
smtps
도중에 어딘가 로 이름이 바뀌었습니다 . 그러므로 나는 사용하고 있습니다서비스 smtps
계속 듣기 위해"메일 제출"SMTPS 포트 465
.
가정 B:
내 파일의 상단은 /etc/postfix/master.cf
다음과 같습니다.
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_security_level=encrypt
-o smtpd_use_tls=yes
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
-o smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
-o smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
...
나는 읽었다여기저것:
postfix/smtpd
- SMTP 데몬 프로세스입니다."수신 메일"적절한 내부 위치로 라우팅합니다.
postfix/smtp
- SMTP 데몬 프로세스입니다."보내는 메일"세계로.
이제 나는 postfix/smtpd
포트에서 수신 대기 중이라고 가정합니다 465
."수신 이메일"25
로컬 사용자 및 포트 에서"수신 이메일"다른 곳에서. 나는 또한 그것이 보내는 postfix/smtp
포트를 사용하고 있다고 가정하고 있습니다.25
"보내는 이메일".
문제:
/etc/postfix/main.cf
내가 내부에 설정한 개별 서비스에 대한 내 설정을 전역 설정이 엉망으로 만드는 것을 원하지 않았기 때문에 도중에 Postfix를 구성할 때 내부의 전체 TLS 섹션을 비활성화했습니다 /etc/postfix/master.cf
.
보시다시피 저는 -o
서비스에 대해 smtp
많은 옵션을 사용하는 동안 -o
서비스에 대한 옵션을 사용하지 않았습니다 smtps
. 나를 가장 혼란스럽게 하는 것은 공식 문서에서 다음 /etc/postfix/main.cf
과 같이 거의 중복된 옵션을 많이 찾을 수 있다는 것입니다.
인용된 텍스트에 따르면 다음을 사용해야 합니다.
smtp_
for 로 시작하는 것"보내는 메일"smtpd_
for 로 시작하는 것"수신 메일".
내 철학이 맞다면 현재 설정이 작동해야 합니다. openssl
다음과 같이 다른 컴퓨터에서 명령을 사용하여 TLS 1.3 핸드셰이크를 달성할 수 있기 때문에 부분적으로 그렇습니다 .
┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
└─> openssl s_client -connect pis.eu:465 -tls1_3
CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tekpi-eu
verify return:1
---
Certificate chain
0 s:CN = tek-eu
i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----
< REMOVED FOR CLARITY >
-----END CERTIFICATE-----
subject=CN = tek-eu
issuer=CN = tek-eu
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1286 bytes and written 313 bytes
Verification error: self signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: 45F832A32F5F27CEAA41B271F28545ECA98DC1AC61F51A484123DD28B2535C30
Session-ID-ctx:
Resumption PSK: 3175AD1641D8D77511FD5C76508D339D01F5D1CE02DBF90F33FEBD334A7E76FD44B52808A846C281616469143977B6F1
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
< REMOVED FOR CLARITY >
Start Time: 1607602078
Timeout : 7200 (sec)
Verify return code: 18 (self signed certificate)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
220 mail.pis.eu -------> "HELLO!"
-tls1_3
위에서는 구성 매개변수가 TLS -o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
1.2 및 TLS 1.3 이외의 모든 핸드셰이크를 금지해야 하기 때문에 작동해야 하는 매개변수를 사용했습니다 . 하지만 TLS 1 핸드셰이크를 시도하기 -tls1_3
위해 매개변수를 변경하면 -tls1
성공합니다!?
┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
└─> openssl s_client -connect pis.eu:465 -tls1
CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tek-eu
verify return:1
---
Certificate chain
0 s:CN = tek-eu
i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----
< REMOVED FOR CLARITY >
-----END CERTIFICATE-----
subject=CN = tek-eu
issuer=CN = tek-eu
---
No client certificate CA names sent
Peer signing digest: MD5-SHA1
Peer signature type: RSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1385 bytes and written 227 bytes
Verification error: self signed certificate
---
New, TLSv1.0, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: C1E39786A475DA48ED222EAB5247CCE57D49875AE9A442A73027FBE1F9BB7C4D
Session-ID-ctx:
Master-Key: 5900F37B79A7949871008A827904F2BA907F42EE8BBC73328CD49DF7E37AF2687C06B316922D7D76DDC36FA1DF912E7A
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
< REMOVED FOR CLARITY >
Start Time: 1607602884
Timeout : 7200 (sec)
Verify return code: 18 (self signed certificate)
Extended master secret: yes
---
220 mail.pis.eu -------> "HELLO!"
어떻게 이런 성공을 거뒀나요? 내가 도대체 뭘 잘못하고있는 겁니까? 현재 내 설정에는 -o smtpd_
옵션만 있습니다. -o smtp_
옵션 도 사용해야 합니까 ? 이것들은 어디에 넣어야 하나요?
보시다시피 혼란스러워요 ...