

質問です。  
Postfix の smtpd_tls_wrappermode の意味をご存知でしょうか？

ドキュメント(後述)を読むと、ポート 465 による SMTPS と smtpd_tls_wrappermode は  
関係ないように読めるのですが、違うのでしょうか？

# やりたいこと

Postfix でポート 465 を使った SMTPS を設定したい。

RFC8414 でいう「submission」です(STARTTLS ではないほうの SMTPS です)  
<https://www.rfc-editor.org/rfc/rfc8314>

結局 STARTTLS による SMTPS も、submission による SMTPS もできたのですが、  
smtpd_tls_wrappermode の意味が分からないのです。

# わかっていること

つまり「smtpd_tls_wrappermode は Outlook 専用の設定である」と理解しています。

以下の文書を読みました。  
<http://www.postfix.org/TLS_README.html>  
<http://www.postfix.org/postconf.5.html#smtpd_tls_wrappermode>

TLS_README にはこう書いてあります。

> TLS is sometimes used in the non-standard "wrapper" mode where a server
> always uses TLS,  
>  instead of announcing STARTTLS support and waiting for remote SMTP clients
> to request TLS service.  
>  Some clients, namely Outlook [Express] prefer the "wrapper" mode.  
>  This is true for OE (Win32 < 5.0 and Win32 >=5.0 when run on a port<>25 and
> OE (5.01 Mac on all ports).

postconf.5 にはこう書いてあります。

> smtpd_tls_wrappermode (default: no)  
>  Run the Postfix SMTP server in the non-standard "wrapper" mode, instead of
> using the STARTTLS command.  
>  If you want to support this service, enable a special port in master.cf,  
>  and specify "-o smtpd_tls_wrappermode=yes" on the SMTP server's command
> line.  
>  Port 465 (smtps) was once chosen for this purpose.

# 環境

## クライアント

[code]

    % uname -rsm
    Linux 4.17.3-1-ARCH x86_64
    
[/code]

・msmtp 1.6.7

・~/.msmtprc の内容

[code]

    defaults
    logfile         ~/.msmtp.log
    account         test
    host            192.168.1.24
    port            25
    from            miwa@example.jp
    user            miwa@example.jp
    password        password
    account default : test
    
[/code]

## SMTP サーバー

[code]

    # uname -rsm
    Linux 3.10.0-862.3.2.el7.x86_64 x86_64
    
[/code]

・Postfix 2.10.1

・/etc/postfix/master.cf の内容

[code]

    smtp      inet  n       -       n       -       -       smtpd  -v
    smtps     inet  n       -       n       -       -       smtpd  -v
      -o smtpd_tls_wrappermode=yes
    
[/code]

・postconf -n の内容

[code]

    alias_database = hash:/etc/aliases
    alias_maps = hash:/etc/aliases
    broken_sasl_auth_clients = yes
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    daemon_directory = /usr/libexec/postfix
    data_directory = /var/lib/postfix
    debug_peer_level = 2
    debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
    home_mailbox = Maildir/
    html_directory = no
    inet_interfaces = 192.168.1.24
    inet_protocols = all
    mail_owner = postfix
    mailbox_size_limit = 409600000000
    mailq_path = /usr/bin/mailq.postfix
    manpage_directory = /usr/share/man
    message_size_limit = 5120000000
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    mydomain = example.jp
    myhostname = smtp.example.jp
    myorigin = $mydomain
    newaliases_path = /usr/bin/newaliases.postfix
    queue_directory = /var/spool/postfix
    readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
    sample_directory = /usr/share/doc/postfix-2.10.1/samples
    sendmail_path = /usr/sbin/sendmail.postfix
    setgid_group = postdrop
    smtpd_recipient_restrictions = permit_sasl_authenticated, reject
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_local_domain = $mydomain
    smtpd_sasl_security_options = noanonymous
    smtpd_tls_cert_file = /etc/ssl/example.jp/server.crt
    smtpd_tls_key_file = /etc/ssl/example.jp/private/server.key.no
    smtpd_tls_loglevel = 3
    smtpd_tls_security_level = may
    unknown_local_recipient_reject_code = 550
    
[/code]

# ためしたこと

submission(ポート 465 の SMTPS)をやりたい。

master.cf の -o smtpd_tls_wrappermode=yes をコメントアウトした場合。エラーになる。

[code]

    % echo `date` | msmtp --account=test --auth=plain  miwa@example.jp --tls=on --tls-starttls=off --tls-certcheck=off --port=465
    msmtp: TLS handshake failed: An unexpected TLS packet was received.
    msmtp: could not send mail (account test from /home/miwa/.msmtprc)
    
[/code]

master.cf の -o smtpd_tls_wrappermode=yes をコメントを外した場合。メール送信できる。

[code]

    % echo `date` | msmtp --account=test --auth=plain  miwa@example.jp --tls=on --tls-starttls=off --tls-certcheck=off --port=465
    
[/code]

宛先にメール受信できることを確認した。  
パケットキャプチャして、TCP 3wayハンドシェイクのあとに TLS ハンドシェイクしたことを確認した。

# わからないこと

「the non-standard "wrapper" mode」と言っている「標準」とは RFC のことでしょうか？また、「ラッパー」とはなんでしょうか？

smtpd_tls_wrappermode は Outlook 専用の設定である、と理解したのですが、じつは submission(ポート 465 での
SMTPS)をするときは必須なのでしょうか？


CC BY-SA 4.0
2018-07-23T04:54:11.890
46857
2018-09-20T14:08:42.963
2021-10-07T07:34:52.683
-1
9592
question
postfix ssl
Postfix の smtpd_tls_wrappermode とは？


> 「the non-standard "wrapper" mode」と言っている「標準」とは RFC のことでしょうか？

「標準」=「STARTTLS の SSL/TLS」  
「標準じゃない」=「STARTTLS じゃない(古い) SSL/TLS」

ということだと思います。

> また、「ラッパー」とはなんでしょうか？

`smtpd_tls_wrappermode=yes` の場合、最初の接続から SSL/TLS ハンドシェイクになるので、SMTP を SSL/TLS
でラップするということかもしれません。

> smtpd_tls_wrappermode は Outlook 専用の設定である、と理解したのですが、じつは submission(ポート 465 での
> SMTPS)をするときは必須なのでしょうか？

必須です。


CC BY-SA 4.0
2018-07-23T13:55:49.603
46874
2018-07-23T13:55:49.603
4603
46857
answer


> 「the non-standard "wrapper" mode」と言っている「標準」とは RFC のことでしょうか？

すみません。今回の質問ではじめて `submissions` について知ったので少し怪しいですが。

[WikipediaのSMTPS](https://ja.wikipedia.org/wiki/SMTPS) によると、1997年始めに `ポート465`
は `SMTPS` として割り当てられたが、  
1998年末に `STARTTLS` が制定されたため、`ポート465` は無効となったそうです。

しかし、無効後も`ポート465`は使用され続けたため、  
`RFC8314` で `MSA(Message Submission Agent)` とのTLS通信用に再度`ポート465`を割りあて  
サービス名も `smtps` から `submissions` に変更したそうです。

以上の経緯から、  
「標準」では、MSA(Message Submission Agent)向けの`ポート465`を、  
標準ではないが昔から使われている昔の`smtps`として使用するため、 **non-standard** なのだと思います。

> 「ラッパー」とはなんでしょうか？

MTA(Mail Transfer Agent)に、TLS通信できる通信変換機能をかぶせて、  
`smtps` サービスを提供するので、「ラッパー」とは追加される通信変換機能のことだと思います。


CC BY-SA 4.0
2018-07-23T14:48:39.793
46876
2018-09-20T14:08:42.963
2018-09-20T14:08:42.963
20043
46857
answer