メールサーバーの認証(SPF・DKIM・DMARC)の紹介&実装方法

各認証方法の概要

メールサーバーの認証には、

  • SPF(Sender Policy Framework)
  • DKIM(DomainKeys Identified Mail)
  • DMARC(Domain-based Message Authentication, Reporting, and Conformance)

の3つの主要な技術があります。

これらは、メールのなりすましやフィッシングを防ぐために使用されます。それぞれの技術の概要と役割を説明していきましょう。

  1. SPF(Sender Policy Framework):
    • 設定: DNSレコードの追加
    • 概要: SPFは、メール送信者が正当な送信者かどうかを確認するための技術です。
    • 役割: ドメイン所有者が「このドメインからのメールは、これらのIPアドレスから送信されるべきである」という情報をDNSレコードに公開します。メール受信サーバーは、その情報を基に、メールが正当なサーバーから送信されたかどうかを検証します。
  2. DKIM(DomainKeys Identified Mail):
    • 設定: 電子署名 + DNSレコード
    • 概要: DKIMは、メールが改ざんされていないかどうかを確認するための技術です。
    • 役割: メール送信時に、送信者のドメインがメールにデジタル署名を追加します。受信サーバーはこの署名を用いて、メールが途中で改ざんされていないかを検証します。署名は、送信者ドメインの公開鍵(DNSに登録されている)を用いて確認されます。
  3. DMARC(Domain-based Message Authentication, Reporting, and Conformance):
    • 設定: DNSレコードの追加
    • 概要: DMARCは、SPFとDKIMの結果を組み合わせ、メールの認証ポリシーを定める技術です。
    • 役割: ドメイン所有者は、メールがSPFやDKIMの検証に合格しなかった場合の処理方法(拒否、隔離、レポートのみなど)を指定できます。また、受信サーバーは、DMARCポリシーに基づいて処理を行い、送信者にレポートを送ることができます。

これらの技術は、メールセキュリティを向上させるために連携して機能し、メールによるなりすましやフィッシング攻撃を防ぐのに役立ちます。

各認証の設定方法

SPFの設定:

SPF(Sender Policy Framework)の設定は、DNSレコードを通じて行われます。DNSレコードには、そのドメインからメールを送信することが許可されているIPアドレスやIPアドレスの範囲が含まれます。以下にSPFの設定方法と一般的なDNSレコードの例を示します。

  1. v=spf1: これはレコードがSPFレコードであることを示します。
  2. IPアドレスの指定: 例えば、ip4:192.168.0.1 は特定のIPv4アドレスを指定します。範囲も指定できます。
  3. メールサーバーの指定: 例えば、include:_spf.google.com はGoogleのメールサーバーを許可します。
  4. ポリシーの指定: -all~all?all などがあり、それぞれ「許可されていないIPからのメールは拒否」「許可されていないIPからのメールは疑わしいが拒否しない」「このポリシーは中立」という意味を持ちます。

DNSレコードの例:

例1: 特定のIPアドレスからのみメールを送信する場合

v=spf1 ip4:192.168.0.1 -all

例2: 特定の範囲のIPアドレスと、特定のメールサービスプロバイダ(例: Google)からのメールを許可する場合

v=spf1 ip4:192.168.0.1/24 include:_spf.google.com ~all

例3: すべてのメールサーバーからのメールを許可する場合(非推奨)

v=spf1 +all

これらの例では、-all は「これらの条件に合致しないメールは全て拒否する」、~all は「これらの条件に合致しないメールは疑わしいが、拒否はしない」という意味を持ちます。

SPFレコードを設定する際は、ドメインが使用するメール送信ポリシーに適した設定を選択することが重要です。また、誤ったSPF設定は正当なメールの配信に影響を与える可能性があるため、慎重に設定する必要があります。

DKIMの設定:

DKIM(DomainKeys Identified Mail)の設定プロセスは、やや複雑ですが、以下のステップに分けて説明します。これらのステップを通じて、メールサーバーにDKIM署名を追加し、DNSに公開鍵を登録します。

ここでは、Postfixでメールサーバーを設定する流れで説明します。

ステップ1: OpenDKIMのインストール

  • OpenDKIMをインストールします。これはほとんどのLinuxディストリビューションで利用可能です。例えば、Debianベースのシステムでは次のようにします:
sudo apt-get update
sudo apt-get install opendkim opendkim-tools

ステップ2: DKIMキーペアの生成

  • DKIMキーペア(公開鍵と秘密鍵)を生成します。これは、opendkim-genkey ツールを使用して行います。例えば:
opendkim-genkey -t -s mail -d yourdomain.com

このコマンドは、mail というセレクタを使用して、yourdomain.com 用のキーペアを生成します。これにより、mail.private(秘密鍵)とmail.txt(公開鍵を含むDNSレコード)が作成されます。

ステップ3: DNSレコードの設定

  • 生成された公開鍵をDNSに登録します。mail.txt ファイルに含まれる内容をDNS管理システムにTXTレコードとして追加します。レコード名は通常mail._domainkey.yourdomain.comの形式です。

ステップ4: OpenDKIMの設定

  • OpenDKIMを設定します。OpenDKIMの主要な設定ファイルは /etc/opendkim.conf です。このファイルに以下のような設定を追加します:
Socket          inet:8891@localhost
Mode            sv
Syslog          yes
UMask           002
KeyTable        /etc/opendkim/key.table
SigningTable    refile:/etc/opendkim/signing.table
ExternalIgnoreList  refile:/etc/opendkim/trusted.hosts
InternalHosts   refile:/etc/opendkim/trusted.hosts

ここで、KeyTableSigningTable、およびtrusted.hostsの各ファイルに対して適切な設定を行います。

ステップ5: KeyTable、SigningTable、およびTrustedHostsの設定

  • KeyTableSigningTable、およびtrusted.hostsファイルを設定します。
    • KeyTable: 秘密鍵の位置とドメイン/セレクタの関連付けを定義します。
    • SigningTable: メールアドレスと使用するキー(ドメイン/セレクタ)の関連付けを定義します。
    • trusted.hosts: ローカルネットワークや信頼できるホストをリストアップします。

/etc/opendkim/key.table の例:

mail._domainkey.yourdomain.com yourdomain.com:mail:/etc/opendkim/keys/yourdomain.com/mail.private

/etc/opendkim/signing.table の例:

*@yourdomain.com mail._domainkey.yourdomain.com

/etc/opendkim/trusted.hosts の例:

127.0.0.1
yourdomain.com

ステップ6: PostfixとOpenDKIMの統合

  • Postfixの設定ファイル (/etc/postfix/main.cf) に、OpenDKIMとの接続に関する設定を追加します。これには、PostfixがOpenDKIMミルターと通信するための設定が含まれます。以下の行を追加します:
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = $smtpd_miltersn

これらの設定は、Postfixがメールを受信または送信する際に、OpenDKIMに接続してDKIM署名を行うよう指示します。

ステップ7: サービスの再起動

  • 設定を有効にするために、OpenDKIMサービスとPostfixサービスを再起動します。
sudo systemctl restart opendkim
sudo systemctl restart postfix

ステップ8: 設定のテスト

  • テストメールを送信し、受信側でDKIM署名が適切に検証されているかを確認します。

これらのステップを完了することで、PostfixにDKIMが正しく設定され、稼働します。ただし、実際の環境や特定の要件に応じて、追加の設定や調整が必要になる場合があります。また、セキュリティ上の理由から、構成ファイルの変更やサービスの再起動には注意が必要です。必要に応じて、システム管理者やセキュリティ専門家と協力して設定を行うことをお勧めします。

DMARCの設定:

DMARC(Domain-based Message Authentication, Reporting, and Conformance)の設定は、ドメインのメール認証ポリシーを定義し、それをDNSレコードとして公開することによって行われます。DMARCはSPFとDKIMの結果に基づいて動作し、不正なメールをどのように取り扱うかを指定します。以下にDMARCの設定プロセスと一般的なDNSレコードの例を示します。

DMARC設定のステップ:

  1. ポリシーの決定: DMARCポリシーは、ドメインから送信されるメールがどのように扱われるべきかを定義します。主なポリシーは以下のとおりです:
    • none: DMARCチェックに失敗したメールに対して特別な処理は行わない。
    • quarantine: DMARCチェックに失敗したメールを隔離(例: スパムフォルダに移動)。
    • reject: DMARCチェックに失敗したメールを拒否。
  2. レポートの受信先の設定: DMARCレコードには、DMARCチェックの結果を送るメールアドレスを指定します。

DNSレコードの例:

以下は、example.com ドメインのための一般的なDMARC DNSレコードの例です。

ポリシーが none の場合:

v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com

この設定では、DMARCチェックに失敗したメールは通常通り処理され、レポートは dmarc-reports@example.com に送信されます。

ポリシーが quarantine の場合:

v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc-reports@example.com

この設定では、DMARCチェックに失敗したメールは隔離され、すべてのメール(pct=100)がチェックの対象となります。レポートは dmarc-reports@example.com に送信されます。

ポリシーが reject の場合:

v=DMARC1; p=reject; pct=100; rua=mailto:dmarc-reports@example.com

この設定では、DMARCチェックに失敗したメールは拒否されます。レポートは dmarc-reports@example.com に送信されます。

これらのDNSレコードは、ドメインの TXT レコードとして追加されます。レコード名は _dmarc.example.com のようになります。

DMARCの設定を行う際には、初期段階で p=none から始め、DMARCレポートを分析した後、徐々にポリシーを厳格化することが一般的です。これにより、誤った設定による正当なメールの拒否を避けることができます。また、DMARCの設定はSPFとDKIMの設定が正しく行われていることが前提となるため、これらの設定も適切に行う必要があります。

まとめ

メールサーバーのセキュリティと認証を強化するために、SPF(Sender Policy Framework)、DKIM(DomainKeys Identified Mail)、DMARC(Domain-based Message Authentication, Reporting, and Conformance)の3つの主要な技術を設定するプロセスをまとめます。

  1. SPF設定:
    • SPFは、特定のドメインからのメール送信が許可されたIPアドレスからのみ行われることを確認するために使用されます。
    • DNSにTXTレコードを追加し、許可されたIPアドレスやIP範囲、他のドメインのSPFレコードを含めます。
    • 例: v=spf1 ip4:192.168.0.1/24 include:_spf.google.com ~all
  2. DKIM設定 (PostfixとOpenDKIMを例に):
    • DKIMは、メールが途中で改ざんされていないことを確認するために使用されます。
    • 秘密鍵と公開鍵のペアを生成し、秘密鍵をメールサーバーに設定します。
    • 公開鍵をDNSレコードにTXTレコードとして追加します。
    • PostfixとOpenDKIMを統合し、適切に設定します。
    • 例: v=DKIM1; k=rsa; p=MIGfMA0GC...(公開鍵の文字列)
  3. DMARC設定:
    • DMARCは、SPFとDKIMの結果に基づいて、メールの扱い方を決定するために使用されます。
    • DNSにTXTレコードを追加し、ポリシー(none、quarantine、reject)、レポートの受信先を定義します。例: v=DMARC1; p=reject; pct=100; rua=mailto:dmarc-reports@example.com

これらの技術は相互に補完しあい、メールのなりすましやフィッシング攻撃からドメインを保護します。