概要
支援士の過去問にメール関係の問題が出てきたのでまとめてみます。
メールの仕組み
図を見ればわかる通り、メールはメールサーバーを通じて相手に送られる。その時に名前解決としてDNSを経由する。
この時に使われるプロトコルとしてSMTP、POP、IMAPがある。
それぞれ以下の通り
SMTP(Simple Mail Transfer Protoco)
メールを送信するためのプロトコルである。荷物を運び出す佐川急便やクロネコヤマトのように、メールを送信先に届ける役割を持つ。
POP(Post Office Proto)
メールを受信するためのプロトコルである。POPは郵便局から手紙を自宅に持ち帰るように、メッセージを自分のパソコンにダウンロードして、オフラインでも閲覧できるようにする。
IMAP(Internet Message Access Protocol)
メールを受信するためのプロトコルであるが、POPとは異なり、メールをサーバー上に保存したまま閲覧できる。郵便物を自宅に持ち帰らずに郵便局の窓口で必要な時に確認するように、異なるデバイスでも一貫して同じメールにアクセスできる。
POPとIMAPの違いは以下の通り
更に具体的なメールの仕組み
先ほどまではメールサーバーと省略していたものをさらに具体的に見てく。
MUA(mail user agent)
いわゆるメールソフトである。ここでメールサーバーへメールが送られたり、受信したりする。Outlook、Gmail、Yahooメールなどこれに該当する。
MSA(mail user agent)
MUAからSMTPで送られてきたメールの窓口的なもの。
ここでメールの認証を行う。認証方法は以下の通り
・SMTP-AUTH
IDとパスワードで認証する。認証が成功すればメールが送れる。これはポート番号587が使われている。SMTP自体はポート番号25が使われているが、OP25Bによってポート番号25の使用は防がれる。
OP25B (Outbound Port 25 Blocking)とは、ISP(インターネットサービスプロバイダー)がスパム対策のために、外部ネットワークへのポート25(SMTPポート)のアウトバウンドトラフィック(ポート25にアクセスすること)をブロックする仕組みである。このブロックにより、ユーザーはポート25を介してメールを送信できなくなる。
OP25Bについては下リンク参照
メール送信規制「OP25B」とは?25番ポートブロックの概要と回避策
話はそれたけど、SMTP-AUTHでのIDとパスワードの認証する方法は以下の通り
→PLAI
これが一般的な認証方式
Base64でエンコードしたユーザー名とパスワードを一括で送信する方法。
→LOGIN
Base64でエンコードしたユーザー名とパスワードを別々に送信する方法。
→CRAM-MD5
チャレンジレスポンス認証方式。簡単に言うと、文字列が送られてきてそれとパスワードをMD5でメッセージダイジェストを作りそれで認証する方法。あまり普及してないらしい
MTA(Mail Transfer Agent)
メール転送エージェントと呼ばれるやつ
よく例で出るのは郵便局とか配達員とかそんな感じ
機能としては、
・メールの転送
・エラーの応答
・フィルタリング・認証
・監査
・メールキューイング(メールをキューっていう保存場所にに保存して一定期間に繰り返しメールを送信する機能)
・アドレスの書き換
といった感じ。
ここでは、フィルタリング・認証の部分を見ていきましょう。
MTAが行いう認証としてはspf・dkim・dmarcがあげられる。
spf・dkim・dmarcとは
メールには、エンベロープとメッセージがある。よく言うのはエンベロープは封筒で、メッセージは封筒の中の文章ということ。だから、エンベロープFROMと言ったら送信元。エンベロープTOと書いてあれば宛先を意味する。封筒に相手の住所や自分の住所を書くのと同じくメールもエンベロープに送り先と送り主に対応する部分がある。
またビジネス文章や手紙では、文章(メッセージ)の中にも最初もしくは最後に送信元と相手の名前を書くように、ヘッダFROMと言われたらメッセージの中に記載されている送り主だとわかるし、ヘッダTOと言われたらメッセージに記載された送り先というわけになる。
また、これは送り先が各項目を偽造することは可能。現実の手紙でも、住所さえ知っていれば、なりすましで手紙を送ることが可能だしね。その偽造を防ぐために、次から紹介する技術がある。
SPF
まず、SPFの説明から。
何をしてるかと一言でいえば、IPアドレスをチェックして、正しい送り主かを判断する
( 数字は画像と対応してます。)※画像ではエンベローブになっていますが正しくはエンベロープです。
追記:TEXTレコードじゃなくてTXTレコードです。SPFレコードとも言います。ごめんなさい
1.送信者側は、自身のDNSのTXETレコードにIPアドレスを登録しておく。
なんだか難しい言い方してますが、要は、このIPアドレスはメール用として使ってるやつだよと、DNSサーバーに教え込んでおくってこと。
2.メールが送られてきたら、エンベロープFROMを確認して、そのエンベロープFROMが対応するDNSに問い合わせを行う。
これもまた難しい言い方してますが要は、この宛名からメールが送られてきたんだけど、それほんとに大丈夫な奴なんか?と聞いているわけです。
3.問い合わせたDNSが許可しているIPアドレスと、送信元IPアドレスを比較する。
送信者のIPアドレスが1で登録したIPアドレスなら偽造されてないよねってわかりますよね。一致しなきゃ別の人だなってなりますよね。
これうまく説明できないんですけど、例を挙げるならこう↓
DKIM
1.TEXTレコードに公開鍵を登録する
これで検証するための公開鍵を登録します
2.メールを送信するのに公開鍵で電子署名をして送信
署名します。
3.公開鍵を取得し、署名を検証する
検証し正しいか判断
これは公開鍵暗号方式の仕組みを知ってれば、そんな難しいことなく理解できると思います。
DMARC
DMARCは、SPFやDKIMで認証されたドメインがヘッダFromと一致するかを確認する仕組みのこと。SPFやDKIMでは、エンベロープFromを確認して認証していますが、これではヘッダFromが改ざんされている場合に対処できないことがある。 これをカバーするのがDMARC。DMARCは、SPFやDKIMで認証されたドメインがヘッダFromと一致するか(アライメント)を確認する。SPFを基にする場合はSPFアライメント、DKIMを基にする場合はDKIMアライメントと呼ぶ。 また、DMARCは認証に失敗したメールに対して、どのように対応するかを決めるポリシーを設定することができる。以下がポリシー
none: 認証に失敗したメールをそのまま配信する。
quarantine: 認証に失敗したメールを隔離する(例:スパムフォルダに移動)。
reject: 認証に失敗したメールを削除する。 さらに、DMARCは認証に失敗したメールのレポートを送信することもできます。
spf・dkim・dmarcここら辺に関しては、また別で詳しくqiitaに記事を書くかもしれない
MDA(Mail Delivery Agent)
転送されたメールをメールボックスに保存する機能。
近年では、MDAが単独で動作するケースは少なくなり、多くの場合、MTAとMRAの連携でメール配信が行われることが一般的らしい。
MRA(Mail Retrieval Agent)
POP3やIMAP4を使ってサーバーからMUAへメールデータを転送したり、同期する役割をもつ。
この時に受信者の認証を行う。
以上。追加変更があれば随時更新していきます。