この記事ではSMTP認証について詳しく説明していきます。
SMTPとは、メール送信に必要なプロトコルです。 プロトコルとは通信を行う 手順や規格です。 この記事を読むと電子メールの仕組みやメールアドレス、メールプロトコル、SMTPの基本、SMTP、エンベロープとメッセージ、メールヘッダー、 第三者中継、SMTP認証について、理解できます。
電子メールの仕組み
少しだけ昔の話
電子メールサービスについて話していきます。 メールはWWW、ワールドワイドウェブ、ウェブと同じくらい使われているコンピューターの機能です。
少し昔の話から解説していきます。メールサービスはネットワークの初期から存在する機能で、その頃は今ほどパソコンが普及していないので、中心となるコンピュータと、操作端末と言う形で運用されていました。
なんといってもコンピュータは高価なものだったのでメインコンピューターを離れたところから操作できる操作端末(クライアント) を用意していました。
1つのメインコンピューターに対して複数台の端末があってそのコンピューターをみんなで操作するイメージです。 高性能のコンピューターはたくさん揃えることができないので、クライアント端末から「ログイン」して、操作するわけです。
そうなるとクライアント端末を使っている人同士でメッセージをやり取りする機能が必要になってきます。 その後、コンピューターが1人1台の時代になってきます。つまりパーソナルコンピューター、パソコンを個人で持つようになります。
しかし、操作端末と違って、個人で持つパソコンは必ずしも常に起動してネットワークにつながっているわけではありません。宛先のパソコンが起動していなかったりネットワークにつながっていなかったりするとメールが届かなくなります。そうなると宛先が起動するのを待たないと送信できなくなってしまって、その間はこちらのパソコンも停止できないと言うことになってしまいます。
昔は今と違って家庭で常時接続とかなかった時代なので、メールのやりとりだけを行う専門のコンピューターを用意するという方法をとっていました。それがつまりメールサーバーです。
メールサーバーはメールを受け取り、メールを送り、さらにメールを取りに来るまで メールボックスの中に保存しておく 機能を持っています。
電子メールの仕組みについて
メールの仕組みについては、実を言うと普通の郵便と大きく変わりはないです。、パソコンを操作する「ユーザ」は「手紙を出す、受け取る人」です。ユーザはパソコンでメールを作り、メールサーバーに送ります。
郵便に例えて言うとメールサーバーは「ポストや郵便局」 の役割をしています。 メールサーバーはメールを受け取ったときに宛先のメールサーバーに 送ります。そして受け取り側のユーザは、パソコンを使ってメールサーバーにメールを取りに行きます。つまりポストへ手紙を取りに行くわけです。これが1連のメールの流れになります。
簡単に用語の説明をします。電子メールで使われる用語でMTA あります。 MTAとはMail transfer agent の 略語です。これはメールを送信するソフトのことです。 詳しくはメールサーバーが持つメール転送サーバーソフトのことを指します。
パソコンから送られてきたメールを「受け取り」、それを宛先へ「送信する」。宛先のメールサーバーがそれを「受け取る」。これら1連の作業を行うソフトをMTAといいます。
MTA が純粋に「転送」 だけを行うものを指すことが一般的なのに対して、ユーザが使うパソコンのメールソフトはMUAといいます。MUAとは、Mail user agent と呼ばれます。
MUAは ユーザが使うものなので、「メールの送受信」だけではなく「メールの作成」「メールの表示」「メールの保存」「アドレスの管理」などの機能を持ちます。
そして最後にMDA、Mail Delivery agent があります。 MDAはMTAで受信したメールの宛先のユーザの メールボックスに入れ、MUAで読み取れる形式で保存する役割をしています。
電子メールの理解すべきポイント
- 電子メールの仕組みは郵便と似ています。
- ユーザが使うメールソフトがMUA
- メールサーバーはメール転送するMTA 機能を提供します。
- MTA が受信したメールはMDAで メールボックスに入れられます。
メールアドレスとは
ユーザのメールの宛先 について考えましょう。
例えば、あなたのメールアドレスが「you@mail.com」 だとしましょう。 メールアドレスは宛先のメールボックスを示すものです。 メールアドレスの@の前がメールボックスの名前を示す、ここの部分は「ローカル部」と呼びます。
先程の例で言うと、「you」がローカル部と呼びます。
ただし例外もあります。「別名」「メーリングリスト、メールグループ」があります。
「別名」は、1つのメールボックスを、複数のメールアドレスで指し示す場合です。反対に「メーリングリスト、メールグループ」は1つのアドレスで複数のメールボックスを指し示す場合があります。
なので必ずしもローカルとメールボックスが一対1で対応しているわけではないと言うことです。
メールアドレスのドメイン
メールアドレスの@の後はメールボックスのあるドメインを指しています。
つまりメールアドレスは「ローカル部@ドメイン」 のような構成です。 つまりドメインにはそのグループや組織のインターネット上での名前であるドメイン名を表記しています。
「you@mail.com」だと「mail.com」というドメイン名をもつ組織の「you」 という メールボックスを指しています。
言い換えるとメールボックスは「どの組織にある、誰のメールボックス」なのかを示すものです。 ここでメールボックスは「組織」に付随するものだと言うところがポイントです。
メールサーバーはメールをメールボックスにためておくと、 解説しましたが、メールボックスは組織に付随するものです。もちろんメールボックスの実際の場所はメールサーバーにあります。ですがメールアドレスは「どのメールサーバーにあるメールボックス」と指定するのではなく、「どこの組織にあるメールボックス」と指定しなければなりません。それは「どこのメールサーバーにあるメールボックスと言う指定方式では問題があるからです。
「メールサーバーの」メールボックスをメールアドレスにしていた場合、メールサーバーが変わってしまうと、メールアドレスも変わってしまいます。しかし、「組織の」メールボックスにすれば組織が変わらない限り、メールアドレスは変わらなくなるからです。なのでメールアドレスはメールサーバーではなく、組織を示すドメイン名を使用しているのです。
ですがメールアドレスが、メールサーバーを指定していないとすると、メールボックスが実際に存在するメールサーバはどうやって指し示すのでしょうか?
これはドメイン名を定義するDNSの仕組みで対応しています。DNSでMXレコードを使用し、メールボックスがあるメールサーバーを示します。
DNSについてはドメイン名からIPアドレスを調べるサービスです。これを使ってメールアドレスのドメインのIPアドレスを調べてメールサーバーのIPアドレスを知ることができます。
通信には宛先としてIPアドレスが必要なのでDNSを使ってIPアドレスを調べるわけです。
DNSは データベースを持っています。このデータベースが持つ1件分の情報をレコードと呼びます。MX レコードと言うのはドメインのメールサーバーを記述 しています。このFXレコードが持つ情報があればドメイン名からメールサーバーのIPがどれかわかるわけです。
メールアドレスのポイント
- メールアドレスは「ローカル部@ドメイン」で構成されます
- ローカル部はメールボックスまたは別名、グループ名を指します
- ドメイン名はメールボックスのある組織を指します
- 組織が持つメールサーバはDNSのMXレコードで調べることができます
メールプロトコルとは
メールの配達について、メールプロトコルについて解説していきます。
まずメールを作り、宛先をメールアドレスで指定します。次にメールを送り、メールサーバーつまりMTAにメールを送信します。 つまり送信者が利用するメールサーバーに送るわけです。
この時いきなり相手のMTAには送りません。送信者が利用するMTAにメールが送られます。
メールを受け取った送信用MTAは、 宛先のメールアドレスをもとに、受信用MTAのIPアドレスをDNSによって入手します。 それによりメールを転送するIP、宛先が分かります。
そして受信者が利用するMTAに 転送されます。受信したMTAはメールアドレスが示すメールボックスへMDAによりメールを転送します。
その後、受信者がMUAから受信者が利用するMTAのメールボックスにメールを取りに行って、メールを受け取ります。
メールのプロトコルとは
メールのシステムで使われているプロトコルについて説明します。メールで使われるプロトコルとして主要なところは4つあります。
- SMTP
- POP
- IMAP
- MIME
SMTPとは、シンプルメールトランスファープロトコルの略です。その名の通りメール転送を行うためのプロトコルがSMTPです。またメールのボックスからメールの取り出しを行うプロトコルがPOPとIMAPです。
現在だとPOPはバージョン3のPOP3、IMAPはバージョン4のIMAP4 使われています。
POPとIMAPは同じ役割なのに、なぜ同じ機能の役割のプロトコルが2つもあるのでしょうか?
まずメールを転送すること(SMTP)とメールボックスからメールの取り出し(POP/IMAP)は動作が全く異なります。なので メールには複数のプロトコルが必要になります。
そして、POPかIMAPのうち どちらか一方を使用します。その違いはメールボックスに対する操作間違いです。
MIMEは メールデータに対するプロトコルです。
- 送信側MUA、 送信側MTA、 受信側MTA、 メールボックス、受信側MUAの順にメールは移動する。
- メールをメールボックスへと転送を行うのがSMTP
- メールボックスからの取り出しを行うがPOPとIMAP
- メールのデータに対するプロトコルがMIME
SMTPの基本的な仕組みについて
メールを転送する「SMTP」について詳しく解説していきます。メールを送信する側がSMTPクライアント、受信側がSMTPサーバーと言う関係になります。
つまりパソコンのMUA(ユーザが使うパソコンのメールソフト)からメールサーバのMTA(メールサーバーが持つメール転送サーバーソフト)の場合は、MUAがクライアントMTAがサーバーとなります。
送信者側のメールサーバーのMTAから、メールボックスのある別の受信者側メールサーバーMTAの場合は、送信者側のメールサーバーMTAがクライアント、受信者側のMTAがサーバーになります。
そしてSMTPはトランスポート層のプロトコルとしてTCPを利用します。サーバーが使用するポートはwell-knownポートで25番ポートを使います。そこでSMTPでのメッセージのやりとりが行われるわけですが、これは割と古くから使われているやり方です。
Httpなどでお馴染みのクライアントからの要求と、それに対するサーバーからの応答と言うやりとりです。SMTPでは、コマンドとレスポンスと呼びます。
「命令」(コマンド)と「応答」(レスポンス)です。他のプロトコル、HTTPやFTP、TELNETも同じようなやり取りです。
SMTPではASCIIコードの文字をベースにメッセージのやりとりを行い、通常はコマンド、レスポンスの終了を改行コードCRLFで示します。
コマンドとレスポンス
FTP、http、smtpはレスポンスコードが同じです。
SMTPコマンドの実行方法「コマンド」「半角スペース」「パラメータ」「改行」
代表的なコマンド
コマンド | パラメータ | 意味 |
HELO | ホスト名(ドメイン名) | 自身の名前を通知し、SMTPサーバーと接続を開始する |
EHLO | ホスト名(ドメイン名) | HELOの拡張機能で SMTPサーバーは使用可能な拡張機能を通知する |
FROM:[メールアドレス] | 送信元メールアドレスを通知する | |
RCTP | TO:[メールアドレス] | 当先のメールアドレスを通知する |
DETA | なし | このコマンド以降から「. 改行」まではメール本文とする |
QUIT | なし | SMTP接続を終了する |
NOOP | なし | サーバーはオーケーの応答を返す。応答の確認などに使う |
VRFY | ユーザー名 | そのユーザ名のメールアドレスが存在するかを問い合わせる |
EXPN | メーリングリスト名 | そのメーリングリストが存在するかを問い合わせる |
AUTH | 認証方式 | SMTP Authで使用。ユーザーの認証方式を問い合わせ |
RSET | なし | 送信したコマンドはなかったものとする |
SMTPのレスポンス
ステータスコードの100の桁の意味
「レスポンスコード」「半角スペース」「フレーズ」
ステータスコード | 意味 | 説明 |
1xx | 肯定先行 | 正しいコマンドを受け付けて処理中である |
2xx | 肯定完了 | 正しいコマンドを受け付けて処理を完了した |
3xx | 肯定中間 | 正しいコマンドを受け付けて、次に別のコマンドを要求する |
4xx | 一時否定完了 | 間違ったコマンドを受け付けた。再送を望む |
5xx | 否定完了 | サーバーの状態によりコマンドを受け付けることができない |
代表的なレスポンスコード
コード | フレーズ | 説明 |
220 | ready | サーバへ接続され、コマンドを待ち受け状態 |
221 | closing cnnection | コネクションを切断する |
250 | OK | 正常にリクエストを受け付け終了した |
354 | Enter Mail | メール本文の入力要求 |
- SMTPやりとりすることでメールを送信する。
- 送信者のメールアドレスの通知、受信者のメールアドレスの通知、メールデータの送信、切断、の順でやりとりをする。
ESMTPについて
上のSMTPの解説中に出てきた用語のEHLOはESMTPで使用されるコマンドです。
ESMPTは 時代の要求に合わせてSMTPで追加機能を利用できるようにしたものです。ですが、すべてのサーバーがESMTPに対応しているわけでは無いですし、対応していたとしても全ての機能を使えるとは限りません。
そこで最初のHELOを送る代わりにEHLOを送る。そうすると、サーバーはレスポンスで使用できる機能一覧を返します。
ESMPTでの拡張機能には、パイプライン処理や、TLSの利用、認証などがあります。 パイプライン処理をすると、応答待ち時間を減らすことができます。
パイプライン処理は、要求、応答の繰り返しを、複数の要求と複数の応答にまとめてしまう仕組みです。
TLSは、SSLを標準化したものです。SSLはHTTPで使用が前提となっていますが、それを他のプロトコルでも利用できるようにしたのがTSLです。
SMTPもほかのプロトコル同様に、通信は平文で行われています。(暗号化されていないということです)つまり、盗聴されるとメールのデータが見えてしまうわけです。
それを防ぐためにSMTPの通信をTSLで暗号化します。
VRFYとEXPN
追加でVRFYとEXPNの解説をします。 この説明にはスパムメールが重要な役割を果たします。スパムメールは迷惑メールのことです。
詐欺目的の広告や、ウィルスつきのメールなどもスパムメールです。 スパムメールはインターネットの総通信データ量の半分以上を占めると言われるほど多く送信されていて、インターネット上の問題になっています。
メールサーバーを構築する際にはスパムメールの送信要因や踏み台、セキュリティホールとならないように注意が必要です。 そうしなければ、スパムメールが一向に減らないと言う事態になってしまいます。
そこで問題になるのがVRFYとEXPNです。 この2つは受信者が存在するかどうかをメールサーバーに問い合わせるコマンドです。VRFYは 個人の受信者、EXPN メーリングリストの受信者が存在するかどうかを問い合わせることができます。
一見便利なコマンドように思いますが、スパムメールのことを考えると頭が痛いコマンドなのです。 スパムメールを闇雲に送るのではなくて、実在するユーザに対して迷惑なメールを届けたい。なのでVRFY コマンドでメールボックスが存在するか問い合わせを行います。
このような「メールを受け取るユーザを調べる」手法をディレクトリハーベストアタックと呼ぶのです。
VFRYが 使用可能だと、これが簡単に実行できてしまいます。なのでVFRYとEXPN コマンドを利用できないようにしているサーバーも多くあります。
- ESMTP を使うと、SMTPの拡張機能を使用することができる。
- ESMTPを使用できるかどうか確認するためにEHLOを使う。
- スパムめーる対策のためにも、VFRYとEXPNは使用できないようにする。
エンベロープとメッセージとは
メールデータの構造、DETAコマンドで送信される部分をについて解説します。
SMTPはメッセージをやりとりするだけではないです。その前にHELO(EHLO)、MAIL、RCPT、メッセージの最後にQUITというコマンドを送信しています。
このコマンド部分を、エンべローブと呼びます。
メッセージの部分、DETAからドット、改行記号までを包んで宛先に必要な情報を通信しているから、エンべローブ(封筒)と呼ばれています。
SMPTのデータはエンべローブと送られるメール本文であるメッセージからなります。
- SMTPで クライアントからサーバーに送信されるデーターはメッセージに分かれる
- エンベロープの情報を使ってメッセージがやり取りされる
- メッセージはメッセージの情報を記述するヘッダーとメール本文のボディに分かれる。
メールヘッダとは
ヘッダとボディ
ヘッダは なくても送信することができます。
では何に使われているのでしょうか?
基本的にヘッダはメッセージのための情報です。メールのヘッダはメールの送受信には影響しない送信元と宛先です。エンべローブのMAILとRCPTと一致しなくても問題ありません。
MAIL,RCPTの二つと似たヘッダがいくつかあります。Reply-To、Cc、Bccです。
Reply-Toは、 送信元とは別の宛先に送信させたいときに使います。CcとBccはTo で指定した宛先以外の宛先にメールのコピーを送りたいときに使います。
このヘッダの内容は嘘でも、あってもなくても問題ありません。ただし、例外が2つだけあります。1つは件名のSubject、もう1つがトレース情報のReceivedです。
Receivedトレース情報はメールの伝送経路を追跡するための情報です。 これによりメールがどのような経路をたどってきたか追跡ができるわけです。
- メールヘッダの情報はMUAやMTAがつけます。
- Receivedヘッダ メールの経路を追跡情報
- ReceivedヘッダはMTAが勝手につける情報で嘘が入り込まない情報です。
第三者中継について
ここまでのところでSMTPがどのようにメールを扱ってやりとりをしているかと言う話をしてきました。コマンドやレスポンス、エンベロープとメッセージ、 解説をしました。
MTAやMUAがMTAに メールを送ります。 コマンドとレスポンスのやり取りです。 メールのデータはコマンドからなるエンベロープとメッセージに分かれています。
さらにメッセージはヘッダーとボディーに分かれています。
ここで少し話を巻き戻して、MTA の動作の話をしましょう。MTAはメールの転送を行うサーバーソフトウェア( Postfixなど)でMUAからのメールを受け取り、他のMTAへ送ります。また受け取ったメールをMDAによってメールボックスへ送る動作をします。
これまでは「メールの転送」と表現していましたが、「メールの中継」ともいえます。
つまり、MTAの 基本的な動作は受信したメールを中継することにある、と覚えておいてください。そしてもう一つ覚えておいてほしいのは、通常MTA 送信者は誰かと言うことを気にしていないと言う点です。
ここでスパムメールを送るスパマーについて考えます。 スパマーはスパムメールを大量に送る人で、多くの人に迷惑なメールを届けたいと考えています。
ですが自分から宛先へのMTAに対して 大量のスパムメールを送信すると自分がスパマーだとばれてしまいます。 そのような送信者を見つけるとサーバー管理者はどのような対応をするでしょうか?
もちろんそのスパマーからの接続を禁止するようになります。
スパマーを識別するには送信元IPアドレスを使います。なのでIPがバレてブロックされないようにスパマーにはMTAに 中継してもらって目標のサーバーにメールを送るようにしていきます。
スパマーが中継することを防ぐために、 特定のユーザからのメールのみ中継するようにします。通常はプロバイダの利用者や社内ユーザのメールを中継するために存在しているので、それ以外のユーザからのメール中継を禁止するわけです。送信元IPアドレスやコマンドで通知してくるホスト名やメールアドレスのドメイン名から判断して正しいユーザ情報か調べるわけです。
このことから基本的に第三者中継は行わない設定にすることが正しいメールサーバーの構築方法です。
- MTAは 基本的に送信者を特定せず中継します
- 正規のユーザではないメール中継を行うことを第三者中継と呼びます
- 第三者中継はスパムメールの問題もあり通常 行えないように構築しましょう
SMTP認証、 SMTP Authとは
これまで話してきたようにMTAが 送信者を判別することが必要でした。 IPアドレスやドメイン名以外の方法でメールを送信するユーザを識別する方法を説明していきます。つまりユーザ認証を行うということです。
POP Before SMTPとSMTP Authです。SMTP AuthはSMTP AuthenticationでESMTPによる 拡張機能の1つで、その名の通りSMTP認証に機能を追加したものです。これにはSASLと呼ばれるプロトコルを使用しています。
OP25B
第三者は中継をしないようにするためIPアドレスやドメイン名の特定、SMTPによるユーザ認証が行われているわけです。ですがスパムメールの送信は第三者中継の停止しただけでは完全に防げるわけではありません。
そこで現在では、OP25B と呼ばれるスパムメール対策を施しているプロバイダーも多く見られます。
これはつまりアウトバウンド外へ出ていくメールを禁止する対策方式です。
つまりプロバイダーがプロバイダーの中からプロバイダーの外やプロバイダーのメールサーバー以外のサーバーを通してメールを送信することを禁止する設定です。
これによりボットやスパマーがスパムメールをインターネットで送信するのを防ぐわけです。 ただし例外が2つあります。 1つはプロバイダーと契約している企業メールサーバー等は禁止されていません。営業するのはあくまでプロバイダーと契約した通常はメールはサーバーを持つはずがない一般的なユーザだけです。
もう一つがプロバイダーのユーザがプロバイダー以外で契約しているメールサーバーを使いたい場合です。例えばフリーメールのメールサーバーなどを使う場合などです。この時ユーザはプロバイダー以外のメールサーバーSMTPで送信したいがOP25Bでできなくなってしまいます。
そこでサブミッションと呼ばれる方式を使います。 サブミッションのメールサーバーはポート番号587を使うのが一般的です。もちろん第三者中継にならないように、SMTP認証が必要です。
- MTAで ユーザ認証を行うことができるのがSMTP認証
- OP25Bを使うことで、 プロバイダないからスパムメールの送信を禁止できます。