メール配送の動作チェックにopenssl s_client
コマンドを利用する.
今回はSTARTTLS, SMTP-AUTH, POP3Sを扱っていきます.
May 6, 2020 @pa_pa_paper
STARTTLS (mail message submission(587/tcp))
$ openssl s_client -quiet -connect localhost:587 -crlf -starttls smtp
*サーバ内部から動作チェックすることを想定. 外部環境からだと以下の方法ではエラーになる
- OPTIONS
-quiet
セッション, 証明書の出力抑制.
-connect host:port
接続先のホスト名:ポート番号を指定.
-crlf
CR+LFが必要なサーバに対する補完機能.
-starttls protocol
途中からTLSに切換えるプロトコルを指定. 以下のプロトコルに対応している.
"smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", "irc", "postgres", "lmtp", "nntp", "sieve", "ldap"
- セッション開始後
通常のtelnet localhost 25
と同じように動作チェックを行う.
EHLO localhost
250-xxxx.vs.sakura.ne.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: xxxx@xxxx.vs.sakura.ne.jp
250 2.1.0 Ok
RCPT TO: xxxx@gmail.com
250 2.1.5 Ok
SMTP-AUTH
外部環境からmail message submission(587/tcp)経由でメール送信する. この場合はSMTP-AUTHが必須となる.
SMTP-AUTHしないと以下のようにRelay access deniedの554エラーメッセージが通知される.
$ openssl s_client -quiet -connect xxxx.vs.sakura.ne.jp:587 -crlf -starttls smtp
~
~
EHLO xxxx.vs.sakura.ne.jp
250-xxxx.vs.sakura.ne.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: xxxx@xxxx.vs.sakura.ne.jp
250 2.1.0 Ok
RCPT TO: xxxx@gmail.com
554 5.7.1 <xxxx@gmail.com>: Relay access denied
*maillogには以下のようなエラーメッセージが出力されるはず
postfix/smtpd[17650]: NOQUEUE: reject: RCPT from xxxx.vs.sakura.ne.jp[xxx.xxx.xxx.xxx]: 554 5.7.1 <xxxx@gmail.com>: Relay access denied;
- AUTH PLAIN
BASE64エンコードした認証情報を準備する.
$ printf '<username>\0<username>\0<password>' | base64
xxxx=
AUTH PLAINで認証成功すると235 2.7.0 Authentication successfulとメッセージが出力される.
RCPT TOの結果も250 2.1.5 Okとなる.
$ openssl s_client -quiet -connect xxxx.vs.sakura.ne.jp:587 -crlf -starttls smtp
~
~
EHLO xxxx.vs.sakura.ne.jp
250-xxxx.vs.sakura.ne.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN xxxx=
235 2.7.0 Authentication successful
MAIL FROM: xxxx@xxxx.vs.sakura.ne.jp
250 2.1.0 Ok
RCPT TO: xxxx@gmail.com
250 2.1.5 Ok
*maillogには下記のメッセージが出力されていた
postfix/smtpd[20043]: DA59C6966: client=xxxx.vs.sakura.ne.jp[xxx.xxx.xxx.xxx], sasl_method=PLAIN, sasl_username=xxx
- AUTH LOGIN
AUTH PLAINと違いユーザ名とパスワードを別々にBASE64エンコードする.
$ printf '<username>' | base64
xxxx=
$ printf '<password>' | base64
xxxx=
334 VXNlcm5hbWU6
はUsername:, 334 UGFzc3dvcmQ6
は**Password:**がBASE64エンコードされて表示されている. それぞれBASE64エンコードしたユーザ名とパスワードを入力する.
$ openssl s_client -quiet -connect xxxx.vs.sakura.ne.jp:587 -crlf -starttls smtp
~
~
EHLO xxxx.vs.sakura.ne.jp
250-xxxx.vs.sakura.ne.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH LOGIN
334 VXNlcm5hbWU6
xxxx=
334 UGFzc3dvcmQ6
xxxx=
235 2.7.0 Authentication successful
MAIL FROM: xxxx@xxxx.vs.sakura.ne.jp
250 2.1.0 Ok
RCPT TO: xxxx@gmail.com
250 2.1.5 Ok
POP3S
POP3Sも要領は同じです.
$ openssl s_client -quiet -connect xxxx.vs.sakura.ne.jp:995 -crlf
普通にtelnet localhost 110
で動作チェックするのと同様のコマンドが使える.
~
~
+OK Dovecot ready.
USER xxxx
+OK
PASS xxxx
+OK Logged in.
LIST
+OK 3 messages:
1 3546
2 3594
3 3542
RETR 1
+OK 3546 octets
Return-Path: <xxxx@gmail.com>
X-Original-To: xxxx@xxxx.vs.sakura.ne.jp
Delivered-To: xxxx@xxxx.vs.sakura.ne.jp
~
~