動機
メール送信のプロトコルであるSMTPについて理解していないことが多く、なんとなく使っていたので全体像を理解するために調べてみた。
SMTP とは
SMTP は Simple Mail Transfer Protcol の略でメールを送信するプロトコル。RFC5312 で標準化されている。
POP とセットで出てくる。こちらは Post Office Protcol の略でメールを送信するプロトコル。
well known port
- 25 ...認証なしで送信する用途に利用されていた。現在はプロバイダによっては利用できなくなっている(Outbound Port 25 Blocking)。認証を挟んでいないので非推奨になっている。認証をさせて、587番ポートと同じ役割を持たせることもある。
- 465...認証を必須として送信する用途に利用されている。暗号化は SMTP over SSL(SMTPS)で行われている。
- 587...認証を必須として送信する用途に利用されている。暗号化は TLS/STARTTLSで行われている。
SMTP? SMTPS? starttls?
もともとのSMTP には送信者を認証するための仕組みがないため、自分が持っているSMTPサーバを第三者に迷惑メールの送信のために使われてしまうことを防ぐことができない。
現在は拡張仕様となるSMTP-AUTH が標準化されていて、送信の前段で認証をすることができるようになっている。
- SMTP-AUTH... ユーザIDとPasswordによる認証。メール送信時に認証を行い、認証されたときにメールが送信できるようにする仕組み。SMTPだと誰でも利用できてしまうため、それの対策のためにSMTPの拡張仕様として盛り込まれた。認証方式は[PLAIN, LOGIN, CRAM-MD5, DIGEST-MD5]がある。PLAIN, LOGIN は平文での認証。LOGINは標準仕様がなく、各社独自の仕様になっている。
- SMTP... メールの認証もなく、メール自体も平文で送られている。
- SMTPS... メールソフト<->メールサーバ の通信を最初から暗号化して通信する方法。最初から暗号化するので、どちらかが対応していないと通信ができない。
- STARTTLS... SMTPと同様に最初は暗号化せずにサーバとやり取りを行う。相手のサーバがTLS通信に対応しているかを確認して、可能であれば暗号化して通信を行う。この特性上、クライアントからSMTPサーバでは暗号化されるが、メールソフト(送信側のSMTPサーバ)からメールサーバ(受信側のIMAPサーバ)間のリレー時に平文に戻ってしまう可能性がある。
所感
メールを送信する際には暗号化がされるSMTPSまたはSTARTTLSを利用するのが一般的。STARTTLSはどちらかがTLS通信に対応していない場合に平文になってしまうので注意が必要。また、SMTPサーバからSMTPサーバにリレーする際にも平文になってしまう可能性がある。
SMTPSが一番安全だが、お互いが対応していなければならないので要件が厳しいといえる。
SMTP-AUTHはPLAINだとパスワードが平文で流れて、サーバも平文でパスワードを管理するので推奨できる感じではない印象。CRAM-MD5またはDIGEST-MD5での認証をしたい。