KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

電子メールの送受信に関するプロトコルを学ぶ

ネットワーク特論1の第11回目の授業内容のまとめになります。

※第10回は演習回のためスキップ

AIITのネットワーク特論1を受講しました - KATOエンジニヤリング開発日誌

TCP/IPモデルの役割と標準化を学ぶ - KATOエンジニヤリング開発日誌

レイヤ2のネットワーク機器と通信方式・データ配送方式 - KATOエンジニヤリング開発日誌

ネットワーク層の機器と技術について学ぶ - KATOエンジニヤリング開発日誌

ルーティングと経路制御表の集約計算について学ぶ - KATOエンジニヤリング開発日誌

LDAPとActive Directoryについて学ぶ - KATOエンジニヤリング開発日誌

IPv6とHTTPについて学ぶ - KATOエンジニヤリング開発日誌

DNSとDHCPプロトコルについて学ぶ - KATOエンジニヤリング開発日誌

第11回目の目標

  1. メールに関するプロトコルの説明に出てくる、基礎的用語を知る
  2. 下記プロトコルの定義、使用ポート、基本的な通信手順について説明できる(SMTPとPOPについては通信時の注意事項についても説明できる)
    • SMTP(Simple Mail Transfer Protocol)
    • POP(Post Office Protocol)
    • IMAP(Internet Message Access Protocol)

電子メールの仕組み

  • メールアドレス
    • 宛先のメール受信者を示すものではなく、宛先のメールボックスを指し示す
    • ローカル部@ドメイン部
      • ローカル部:メールボックスの名前
      • ドメイン部:グループや組織のインターネット上での名前
    • DNSでMXレコードを使用し、メールボックスがあるメールサーバを指す

電子メールサービスを実現するためのコンポーネントとしては下記が挙げられる。

  • MUA(Mail User Agent)
    • ユーザがメールを読み書きするメーラーのこと
      • ex:outlook、Thunderbird など
  • MTA(Mail Transfer Agent)
    • メールサーバが持つ、メールを仕分けるプログラムのこと
      • ex:postfix、sendmail など
  • MDA(Mail Delivery Agent)
    • メールサーバが持つ、メールを指定されたMail Boxに転送するプログラム
  • アクセスエージェント
    • メールサーバのMail Boxにあるメールにアクセスする受信プロトコル
      • ex:POP3、IMAP など

MTAとMDAはSMTPを利用している。

SMTP(Simple Mail Transfer Protocol)

概要

SMTPとは、電子メール送信を行うためのアプリケーションプロトコルで、クライアントからのメールの送信や、メールサーバー間でのメールの転送(リレー)などに用いられる。

主な機能

  • 使用ポートは25/TCP
  • 宛先が自サーバーの場合、指定されたメールボックスに配信する
  • 宛先が自サーバー以外の場合、DNSサーバーに問い合わせ、宛先サーバーに転送する
    • この時、DNSサーバーのMXレコードを参照する
      • MX(Mail eXchange):DNSネームサーバが保持する対応表の中身で、送信先ドメインの配送先メールサーバが記載されている行
宛先が自サーバー以外の場合の流れ

f:id:masayuki_kato:20170520233636p:plain

SMTPの基本的な動作

f:id:masayuki_kato:20170521131731p:plain

  1. HELOコマンドでメーラーを識別する
  2. MAILコマンドで送信元のアドレスを指定し、セッションを開始する
  3. RCPTコマンドでメール送信先を指定する、送信先が複数ある場合にはRCPTコマンドを宛先分実行する
  4. DATAコマンドでメール本体を送信する
  5. メール本文の終了を表すコード(ピリオド)を送信してDATAの終了を合図する
  6. QUITコマンドでセッションを終了する

プロトコル

SMTPでクライアントとサーバー間でやりとりをする際にはSMTPコマンドを用いる。

クライアントからの要求に利用されるSMTPコマンドは下記に一部を記載。

コマンド 説明
HELO / EHLO セッションの開始
MAIL メールトランザクションの開始、送信元アドレスを指定
RCPT 受信者の決定
DATA メッセージのサーバへの転送
QUIT メールセッションの終了
VRFY SMTPサーバにユーザ名の確認(メールアカウント有無)
EXPN メーリングリストのメンバアドレスの要求

※青字のものはセキュリティの観点から禁止コマンドになっていることが多い

クライアントからのSMTPコマンドに対する応答は下記のSMTPコードになる。

  • 200番台(成功)
    • 211番:転送チャネルを閉じる
    • 250番:要求されたコマンドが正常に終了
  • 300番台(段階的成功)
    • 354番:DATAに対する応答、ピリオドが来るまでの全てのデータをメール本文として扱う
  • 500番台(失敗)
    • 500番:構文エラー、コマンドが解釈不能
    • 530番:アクセス拒否
    • 535番:認証エラー

実装技術

主なメールサーバは下記記載。

  • Sendmail(Unix、Windows)
    • かつての標準的なサーバで、細かい制御が可能
    • ほとんどのOSにデフォルトで入っている
    • 古い、遅い、設定が難しい
  • qmail(Unix)
    • 早くてセキュリティがしっかりしている
    • 最新版が1998年で開発が止まっている
  • Postfix(Unix)
    • 設定が用意で、Sendmailからの移行が容易である
  • MS Exchange Server(Windows)

SMTPの問題点

SMTPにはセキュリティ面で2つの問題がある。

  1. ユーザ認証を行わないため、迷惑メールの踏み台になる
    • 対策としては下記4つの方法がある
      • POP before SMTP
        • 送信前に、指定したPOP3サーバにより認証を行い、認証を通過したユーザーのIPアドレスのみメール送信を許可する
      • SMTP Auth
        • SMTPにユーザ認証機能を追加したもの
        • メール送信時にユーザアカウントとパスワードで認証を行う
        • サーバ、クライアントの両方が規格に対応している必要がある
      • OP25B(Outbound Port25 Blocking)
        • ネットワーク内から外部への25/TCPへの通信を禁止する
        • 多くのISPで導入されている
      • IP25B(Inbound Port25 Blocking)
        • 動的なIPアドレスによる25/TCPへの通信を禁止する
        • 一部のISPで導入されている
  2. ユーザーとサーバー間の通信が平文であるため盗聴の危険がある
    • 暗号化された通信方法である、SMTP over SSL/TSLが対策になる

POP(Post Office Protocol)

概要

POPとはユーザーがメールサーバー内のメールボックスにアクセスする際に使用するメール受信のためのプロトコル。

主な機能

  • 特徴
    • 110/TCPのポートを使う
    • メールをクライアント側で管理するので、ネットワークに接続していない環境でもメールを読むことができる
    • ディスクスペース・処理の負荷をクライアント側で行っているので、サーバー側の負担が少ない
  • メール格納形式
    • Mailbox(mbox)形式
      • 全てのメールを1つのファイルに格納
      • /var/spool/mail/[ユーザ名]
    • Maildir形式
      • メール1つ1つを別々のファイルに格納
      • /home/[ユーザ名]/Maildir/new

POPの基本的な動作

f:id:masayuki_kato:20170521132631p:plain

POPは大きく分けて、認証・トランザクション・アップデートの3つのステージに分けることができる。

  1. クライアントがサーバー側にUSERコマンドでユーザー名を送信する
  2. 続けてPASSコマンドでパスワードを送信する
  3. クライアントがサーバー側にLISTコマンドでメールの受信されているメールの一覧を表示する
  4. RETRコマンドで閲覧したいメールを取り込む
  5. DELEコマンドで削除したいメールに削除フラグをつける
  6. QUITコマンドでアップデート状態に遷移、またはセッションを終了する

上記の1と2は「認証」のステージに該当し、3から5の操作が「トランザクション」ステージに該当する。

メーラーから依頼された処理(DELE等)は6のアップデート状態の段階で実行される。

LISTコマンドでは各メールの識別子である「UID(Unique ID)」を使って未読メールだけを読み出すことができる。

プロトコル

POP3の代表的なコマンドは下記表に記載。

コマンド 説明
USER 認証するユーザー名を指定
PASS 認証するユーザーのパスワードを指定
LIST メール一覧を表示する
RETR 指定されたメッセージ番号のメッセージ全体を表示
DELL 指定されたメッセージ番号のメッセージを削除
QUIT アップデート状態に遷移、またはセッションを終了する

POPの問題点

最新のバージョンであるPOP3でも、全てのやり取りを平文で通信するため、パスワードや本文を盗聴される危険性がある。

POP3のセキュリティ対策技術として下記が挙げられる。

  • APOP(Authenticated POP)
    • パスワードのみ暗号化し通信し、その他は平文で通信する
    • 本文を盗聴される危険性は残る
  • POP3s(POP3 over SSL)
    • 995/TCPを利用する
    • 全てのやり取りを暗号化する
    • パスワードや本文を盗聴される危険性は低い

IMAP(Internet Message Access Protocol)

概要

IMAPはユーザーがメールサーバー内のメールボックスにアクセスする際に使用する、メール受信のためのアプリケーションプロトコルである。

POPと異なり、メールのヘッダ情報(件名や送信者情報)と既読・未読の情報のみを転送できる。

IMAPは143/TCPのポートを使用する。

主な機能

サーバー上でのメールメッセージの管理を行う。

  • メールをサーバー上に保存
  • メールメッセージの管理
    • メールの取得・削除
    • メールボックスの移動
    • メールの部分的な取り出し
    • メールボックス内の検索
    • etc…
  • メールボックスの管理
    • 1アカウントに対し、サーバー上で複数のメールボックスを所有できる
  • メールボックスの共有
    • ACL(Access Control List)の利用により安全に複数のユーザーで1つのアカウントを共有することができる

プロトコル

プロトコルの特徴としては下記の3つが挙げられる。

  • 並列処理の許容
    • 送った順にコマンドが実行されるわけではない
  • 認証から切断までにできることが多岐にわたる
  • サーバーからの応答も複数の情報が返ってくる

また、POPと異なる特徴として下記の3つが挙げられる。

  • メールサーバー側でメールのデータを管理する
  • コマンドの種類が豊富で、同じ操作をするにも複数のやりかたがある
  • 同時に複数のクライアントが接続できる

IMAPのコマンドは下記のように入力する。

  • コマンドフォーマット
    • [タグ] [コマンド] {コマンド引数}
      • ex:0010 SELECT “INBOX”
  • サーバーレスポンスのフォーマット
    • [タグ or “*”] [ステータス] ( [応答コード] ) [説明文]
      • ex:1868 OK LIST complited

IMAPの基本的な動作

f:id:masayuki_kato:20170521152311p:plain

POPと同様に「認証」「トランザクション」「アップデート」の3段階で通信を行っている。