メールサーバとDNSサーバの連携

メールサーバとDNSサーバの連携

メールサーバとDNSサーバの連携を理解しよう

メールシステムを構築する際、多くの人はSMTPサーバやPOP3サーバ、IMAPサーバの設定に注目します。

しかし実際にはメールサーバ単体ではメールの送受信は成立しません。

メールシステムはDNSサーバと密接に連携して動作しています。

メール配送先の特定、送信元サーバの認証、なりすまし対策など、多くの処理でDNSが利用されています。

本記事ではメールサーバとDNSサーバがどのように連携しているのかを解説します。

メールサーバだけではメールは送れない

例えばPostfixでSMTPサーバを構築したとします。

しかし配送先メールサーバの場所が分からなければメールを送信できません。

そのためDNSサーバへの問い合わせが必要になります。

メールシステムの構成

一般的なメールシステムは次のような構成になります。

メールクライアント
       ↓
SMTPサーバ
       ↓
DNSサーバ
       ↓
配送先SMTPサーバ

DNSサーバが配送先特定を担当しています。

DNSの役割とは

DNSはドメイン名とIPアドレスを管理する仕組みです。

メールシステムでは以下の情報を提供します。

  • メール受信サーバ
  • メール送信元認証情報
  • 逆引き情報
  • 公開鍵情報

メール運用に不可欠な存在です。

メール送信時の流れ

例えば以下のメールを送信するとします。

student@example.com
↓
user@gmail.com

送信側SMTPサーバはgmail.comの情報を調べます。

MXレコード取得

最初にMXレコードを問い合わせます。

$ dig MX gmail.com

受信メールサーバを特定するためです。

DNSサーバがこの情報を返します。

MXレコード例

gmail.com.  IN MX 5 gmail-smtp-in.l.google.com.

Gmailのメール受信サーバを示しています。

Aレコード取得

MXレコードにはホスト名しかありません。

そのためさらにAレコードを問い合わせます。

$ dig A gmail-smtp-in.l.google.com

接続先IPアドレスを取得します。

Aレコード例

gmail-smtp-in.l.google.com.  IN A 74.125.xxx.xxx

SMTPサーバはこのIPへ接続します。

SMTP接続開始

取得したIPアドレスへ接続します。

74.125.xxx.xxx:25

ここからSMTP通信が開始されます。

受信側もDNSを利用する

実は受信側メールサーバもDNSを利用しています。

送信元サーバの信頼性確認を行うためです。

PTRレコード確認

送信元IPアドレスを逆引きします。

$ dig -x 203.0.113.10

送信元ホスト名を取得します。

スパム対策の一環として利用されます。

FCrDNS確認

逆引きしたホスト名をさらに正引きします。

203.0.113.10
      ↓
mail.example.com
      ↓
203.0.113.10

整合性確認に利用されます。

SPF確認

受信側メールサーバはSPFレコードを確認します。

$ dig TXT example.com

送信元IPアドレスが許可されているか確認します。

SPFレコード例

v=spf1 ip4:203.0.113.10 -all

登録されたSMTPサーバのみ送信を許可します。

DKIM確認

メールヘッダにDKIM署名がある場合です。

DNSから公開鍵を取得します。

mail._domainkey.example.com

DNSサーバが公開鍵を提供します。

DKIM公開鍵例

mail._domainkey
IN TXT
"v=DKIM1;
k=rsa;
p=MIGfMA..."

署名検証に利用されます。

DMARC確認

DMARCレコードもDNSから取得します。

_dmarc.example.com

認証失敗時の処理を確認します。

DMARC設定例

v=DMARC1;
p=reject

認証失敗メールを拒否する設定です。

メールサーバが参照するDNSレコード一覧

レコード用途
AIPアドレス取得
MXメールサーバ特定
PTR逆引き確認
TXT(SPF)送信元認証
TXT(DKIM)公開鍵取得
TXT(DMARC)認証ポリシー

DNSはメール運用の基盤となっています。

メールサーバ自身もDNSを利用する

PostfixなどのSMTPサーバにはDNS設定が必要です。

例えば以下です。

/etc/resolv.conf

DNSサーバへ問い合わせできなければ配送できません。

DNS障害が起きるとどうなるか

DNSサーバへ問い合わせできない場合です。

DNS障害
    ↓
MX取得失敗
    ↓
配送失敗

メール送信が停止する可能性があります。

メールキューへ蓄積される

配送先が分からない場合、メールはキューへ保存されます。

$ mailq

または
$ postqueue -p

SMTPサーバは後で再配送を試みます。

ローカルDNSサーバを利用する理由

企業環境ではローカルDNSサーバを利用することがあります。

理由は以下の通りです。

  • 高速化
  • キャッシュ利用
  • 可用性向上
  • ログ取得

メール配送性能にも影響します。

メールサーバ構築時の確認項目

  • Aレコード
  • MXレコード
  • PTRレコード
  • SPF
  • DKIM
  • DMARC
  • DNS疎通確認

DNS関連の設定確認は必須です。

確認コマンド一覧

MX確認です。
$ dig MX example.com

Aレコード確認です。
$ dig A mail.example.com

逆引き確認です。
$ dig -x 203.0.113.10

SPF確認です。
$ dig TXT example.com

DKIM確認です。
$ dig TXT mail._domainkey.example.com

DMARC確認です。
$ dig TXT _dmarc.example.com

実務でよくあるトラブル

メールサーバ設定は正しいのにメールが届かないケースがあります。

原因を調査するとDNS設定ミスだったという事例は非常に多くあります。

メールサーバとDNSサーバは一体で考えることが重要です。

まとめ

メールサーバとDNSサーバは密接に連携して動作しています。

メール配送ではMXレコードやAレコードが利用され、受信時にはPTR、SPF、DKIM、DMARCなどのDNS情報が参照されます。

現在のメールシステムはDNSなしでは成立しないと言っても過言ではありません。

メールサーバ構築や障害対応を行う際は、DNSとの連携を理解しておくことが重要です。