メールが届く仕組み、メーラーとメールサーバー間の通信について、またそのセキュリティについて説明をします。
あ
前編ではメールサーバーの構築記事でした。
前編記はこちらからどうぞ。↓
CentOS8産自家製メールサーバーのオープンソース仕立て ~SMTP認証と通信プロトコル解説を添えて~ 前編
目次
メールはどうやって届くの?
メールはサーバーどうしで送っています
基本的にメールはメーラーを使って送るのが一般的です。
Microsoft OutlookやThunderbirdといったクライアントメーラーアプリケーション、GmailなどのWebのメーラーアプリケーション、
スマホのメーラーアプリが馴染み深いと思います。
ですが、メールを送った時にこれらのメーラーが送信相手のメーラーと直接メールのやりとりをしているわけではありません。
(メーラーも送信や受信は行いますが)実際にメールを送受信しているのはメールサーバーなのです!
以下の図がメールのやりとりです。
真ん中のサーバーどうしのSMTPパケットのやりとりによって、メールは送られます。
SMTPとは、Simple Mail Transfer Protocolというプロトコルです。
SMTPはメール送信専用のプロトコルと書かれていることが多いですが、受信側もSMTPで受け取るのでややこしく考えずに、
SMTPはメールをやりとりするためのプロトコルなんだなーと理解しておけばOKです。
パソコンやスマホにはどうやって届くの?
先程の図で、サーバーとスマホの間の通信はPOP3パケットとあります。
これはクライアントがサーバーからメールを受信する際に使用するプロトコルで、Post Office Protocolといいます。
そのプロトコルのバージョン3がPOP3として知られています。
POP3を使用した場合、クライアントはサーバーからメールをダウンロードします。
明示的に「メールのコピーをサーバーに残す」等の設定をしないと、サーバー上のメールは削除されます。
このように、サーバー間でメールを送受信する際の通信と、サーバーとクライアント間の受信の通信は異なります。
これは大事なことなので覚えておいてください。
補足:IMAPについて
クライアントのメーラーが受信したメールを見るために、POP3の他にIMAPというプロトコルを使用することができます。
IMAPとは、Internet Message Access Protocolの略語です。
POP3との一番大きな違いは、IMAPはメールをサーバーからダウンロードしないということです。
直接サーバー上のメールにアクセスして操作することができます。
操作というのは、閲覧や削除といったサーバーのメールボックスにあるメールに対しての操作です。
クライアントのローカル環境へメールを移動することがないため、複数のクライアントから同一のメールボックスを操作することができます。
また、総合的な機能についてはIMAPの方が上です。
以下のような機能があります。
・メールのヘッダーのみ取得といった、メールの一部のみ取得が可能(POP3はできない)
・メールの検索をサーバー側で行うことができるので、クライアントの負荷が少ない(POP3はできない)
などなど。。
通信の比較の図です。
今回の記事では、POP3でメール受信を行うことを前提として話をしていきます。
メールの認証ってなんで必要?
POP3の認証について
STMP認証の話をする前に、まずはPOP3の認証について話をしましょう。
POP3はクライアントのメーラーがPOP3サーバーからメールをダウンロードをする通信です。
このとき、メールサーバー上のメールを誰もがダウンロードできたら困りますよね。
ですので、POP3サーバーはクライアントからメール受信要求があったときに認証処理を行います。
以下はクライアントとサーバー間の通信のシーケンス図です。(省略している部分もあります)
そもそもSMTPには認証がない
SMTPにはそもそも認証機能がありません。
最初のメール送受信の図で示したように、メールとはSMTPサーバーどうしのやり取りでメールを送受信しますが、メールサーバーどうしが認証を行うことはありません。
世界中のサーバー同士が認証を行いあうということは現実的に不可能です。
新しいメールサーバーを立てたときに、世界中のサーバーの認証情報を設定するなんてことはできませんよね。
以下の図を見ていただけると、クライアント側は認証ができてもサーバー側は認証できないということがなんなくわかると思います。
認証をしていないメールサーバーは危ない
SMTPは認証を行わないプロトコルであるということで、セキュリティ対策を行っていないメールサーバーにはどういった問題が出てくるでしょうか。
それは、悪意を持った人間が不正にサーバーからメールを送ることができるということです。
要するに踏み台にされてスパムメールを送られてしまうのです!
OP25B
OP25Bとは
SMTPが認証を行わないならどうやってセキュリティ対策をするのでしょうか。
ISP(インターネットサービスプロバイダー)は、OP25Bという対策をとっています。
OP25Bとは、Outbound Port 25 Blockingの略です。
その名の通り、外に出ていく25番ポートの通信を遮断するという技術です。
契約しているISPのネットワークから、外部のメールサーバーへ25番ポートでアクセスすることを、プロバイダー自体がブロックしているということです。
これによりスパムメールの総数をかなり減らすことができます。
OP25Bの問題点
OP25Bは確かにスパムメール対策としては有効なのですが、問題点があります。
複数のISPを利用しているユーザーが、インターネット接続を行っていISP以外のメールサーバーに対してメールを送信しようとしたときにブロックされる問題や、外出先で接続しているISPから普段自分が使用しているISPのメールサーバーに対してメール送信ができないという問題です。
サブミッションポート
サブミッションポートとは?
上記のようなOP25Bの問題を解決するためにサブミッションポートという仕組みができました。
サブミッションポートは、メーラーからメールサーバーにメールを送信する際に使用するポートの仕組みです。
これまでSMTPでは25番ポートを使用していましたが、サブミッションポートでは587番ポートを使用します。
別のポートを使用することにより、OP25B問題を解決することができます。
また、サブミッションポートではSMTP認証を実装することで、認証を通ったユーザーのみがメールを送信できるようになっています。
これにより、587ポートはオープンであってもスパム問題にも対応することができます。
通信の暗号化
サブミッションポート通信の暗号化。STARTTLSとは
サブミッションポートは認証を行っているので、通信の中でPOP3のようなユーザー、パスワード情報を送っています。
ですので、通信が暗号化されていなければ認証情報が丸見えになってしまうので危険です!
サブミッションポートではSTARTTLSという仕組みで暗号化通信を行っています。
厳密な部分は省きますが、STARTTLSは通信の最初から暗号化が行われているわけではなく、通信の途中から暗号化通信に切り替わります。
これにより、通信先の相手が暗号化に対応していてもしていなくても、それに合わせて通信を行うことができるというメリットがあります。
一方で、本当に暗号化されているかはユーザーはわからないというデメリットもあります。
一般的に587ポートでメール送信を行っている場合は暗号化できていると思うので、安心して良さそうです。
POP3の暗号化
同様にPOP3も認証を行っているので、暗号化を行わないと危険です。
メールの設定を確認していただくとわかりますが、110番ポートで通信を行っている場合は暗号化されていません!
暗号化されていないPOP3でメール送信を行うと、通信の中身はどのように見えるのでしょうか。
赤枠で囲った部分で、認証に使用しているユーザー名とパスワードが平文で丸見えなことがわかりますね。
同様にメールの中身についても、下の画像でわかるように丸見えです。
では暗号化した通信、POP3Sではどのように見えるでしょうか。
先程はユーザー名とパスワードが見えていましたが、Application Dataという表示で中身が見えなくなっています。
また、パケットの中身は暗号化されていて解読不能です。
以上から、通信の暗号化がいかに重要かがわかると思います。
おわりに
まとめ
これまでの内容を踏まえるて、どういったメールサーバーを構築、運用をしていけばよいかというと、、
・メーラーからメールサーバーには587番のサブミッションポートを使用し、SMTP認証を行っている
・メーラーとメールサーバー間の通信を暗号化している
となります。
お使いの環境を確認してみてください。
・メーラーとメールサーバー間の通信に、110番(POP3)、143番(IMAP)を使っていた場合暗号化を行っていません!
・メーラーとメールサーバー間の通信に、25番(SMTP)を使っていた場合、暗号化も認証も行っていません!
上記の場合はメールの管理者に相談してみてはいかがでしょうか。
感想
普段メールは当たり前のように使っていますが、その中身については意識したことはありませんでした。
昨今はメールサービスが多いので別に気にしながら使う必要はないのですが、色々知ることができて面白かったです。
かしこくなりました。
- AWS Step Functionsの基本を再学習しました - 2024-09-23
- Amazon SESでバウンスメールを管理する - 2024-07-07
- TEAMをv1.1.1にアップデートしカスタムドメインを設定する - 2024-02-17
- コールセンター白書2023とAmazon Connect - 2023-12-25
- Provide dynamic and personalized CX with in-app web call for Amazon Connect - 2023-12-16