SMTP Auth + TLSの設定をローカルマシンで動作確認する

Postfixでメールサーバーを構築しているのだけれど、
ドシロウトな自分は設定を少しイジったらその都度確認しないと不安で仕方ない。
一般的な確認方法かどうかわからないけれど、メモっておく。

自分はPostfixしか試してないけど、他のMTAでも同じ方法のはず・・・


## telnetでSMTP-AUTHの動作確認

#### 前提
- 認証データベースの設定済み
- MTAへのSMTP-AUTH設定済み

```
$ perl -MMIME::Base64 -e 'print encode_base64(
> "username\0group\0password");'
** base64エンコードされた文字列A **    <- あとで使う

$ telnet mail.example.com smtp
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 mail.example.com ESMTP unknown
EHLO example.com              <- 1 SMTPで拡張している設定を表示
250-mail.example.com
250-PIPELINING
250-SIZE 1024000
250-VRFY
250-ETRN
250-AUTH LOGIN DIGEST-MD5 PLAIN CRAM-MD5
250-XVERP
250 8BITMIME
AUTH PLAIN ** base64エンコードされた文字列A **　<- 2 エンコード済認証情報入力
235 Authentication successful                <- 3 認証成功
DONE
```

EHLOコマンドではAUTH LOGIN あたりが出ていればいいのかな（適当


# SMTP Auth + TLSの動作確認

#### 前提
- 自己署名証明書の作成・設定済み
- MTAへのTLS設定済み

openssl s_clientというSSL/TLS版のtelnetみたいなのを使う。

```
$ openssl s_client -connect 127.0.0.1:465
CONNECTED(00000003)
*略*
verify error:num=18:self signed certificate
verify return:1
*略*
verify return:1
---
Certificate chain
 0 s:*略*
   i:*略*
---
Server certificate
-----BEGIN CERTIFICATE-----
*略*
-----END CERTIFICATE-----
subject=*略*
issuer=*略*
---
No client certificate CA names sent
---
SSL handshake has read 1818 bytes and written 453 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: *略*
    Session-ID-ctx: 
    Master-Key: *略*
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
   *略*

    Start Time: 1406306753
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
220 mail.example.com ESMTP unknown
EHLO example.com              <- 1 SMTPで拡張している設定を表示
250-mail.isuka.org
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN ** base64エンコードされた文字列A **　<- 2 エンコード済認証情報入力
235 Authentication successful                <- 3 認証成功
QUIT
DONE
```

最初にverify errorとか出ているのはいいのかな汗

念の為、TLS設定済の状態で、上記のtelnetでの動作確認を再度行い、認証が失敗することも確認しておく。

```
$ telnet mail.example.com smtp
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 mail.example.com ESMTP unknown
EHLO example.com              <- 1 SMTPで拡張している設定を表示
250-mail.example.com
250-PIPELINING
250-SIZE 1024000
250-VRFY
250-ETRN
250-AUTH LOGIN DIGEST-MD5 PLAIN CRAM-MD5
250-XVERP
250 8BITMIME
AUTH PLAIN ** base64エンコードされた文字列A **　<- 2 エンコード済認証情報入力
334 xxxxxxx

535 5.7.8 Error: authentication failed: authentication failure <- 3 認証失敗
```

# SMTP Auth + TLS + OBP25Bの動作確認

#### 前提
- Submission port設定済み

```
$ perl -MMIME::Base64 -e 'print encode_base64("\0username\0password")'
** base64エンコードされた文字列B **    <- あとで使う。グループ無しに注意。

$ openssl s_client -starttls smtp -connect 127.0.0.1:587
CONNECTED(00000003)
*略*
verify error:num=18:self signed certificate
verify return:1
*略*
verify return:1
---
Certificate chain
 0 s:*略*
   i:*略*
---
Server certificate
-----BEGIN CERTIFICATE-----
*略*
-----END CERTIFICATE-----
subject=*略*
issuer=*略*
---
No client certificate CA names sent
---
SSL handshake has read 2009 bytes and written 488 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: *略*
    Session-ID-ctx: 
    Master-Key: *略*
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
    *略*
    Start Time: 1406312201
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
250 DSN
EHLO example.com              <- 1 SMTPで拡張している設定を表示
250-mail.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN ** base64エンコードされた文字列B **　<- 2 エンコード済認証情報入力
235 2.7.0 Authentication successful
```



サーバー周りの情報はネット上にいろいろ転がっているけど、新旧混ざって何がベストがわかりづらい・・・
プログラミングのことだけでなく、インフラとかの情報もQiitaに集約していってくれると、ドシロウト的には嬉しい。