【メールサーバー構築 第4回】信頼性編 – Gmailへの到達率100%を目指せ!SPF・DKIM・DMARC電子署名フル装備ガイド

「迷惑メールフォルダ」という名の墓場

こんにちは!「リナックス先生」です。
PostfixとDovecotの構築、お疲れ様でした。これで送受信の機能自体は完成しました。
しかし、ここからが本当の戦いです。

【連載】Postfix+Dovecotで作る 最強のセキュアメールサーバー構築
コウ君

先生、聞いてください…。
前回作ったサーバーから友達のGmailに「テストだよ!」って送ったら、「迷惑メール」に入っちゃいました。
しかも「このメールはなりすましの可能性があります」なんて赤い警告が出てて…ショックです。

リナックス先生

当然の結果ね。
今のGmailやYahoo!は、「送信ドメイン認証」が無いメールを容赦なく弾くわ。
現実世界で言えば、封筒に差出人の名前だけ書いて、印鑑も身分証も無しに送りつけているようなものよ。
今回は、サーバーに「実印」と「免許証」を持たせて、正規のメールだと証明する仕組みを導入するわ!

1. 3つの神器:SPF, DKIM, DMARCとは?

作業に入る前に、これから導入する3つの技術を理解しましょう。

  • SPF (Sender Policy Framework):
    「IPアドレス」による認証。「このIPアドレスから送られたメールは本物ですよ」とDNSで宣言する仕組み。
  • DKIM (DomainKeys Identified Mail):
    「電子署名」による認証。メールにデジタルの封蝋(シーリングワックス)をし、途中で改ざんされていないことを証明する仕組み。
  • DMARC (Domain-based Message Authentication, Reporting, and Conformance):
    「ポリシー」の宣言。「もしSPFやDKIMの認証に失敗したら、このメールを捨ててください(または迷惑メールに入れてください)」と受信側に指示する仕組み。

現在、Googleのガイドラインでは、この3つ(特にSPFとDKIM)の導入が強く推奨されています。

2. Step 1: SPFレコードの設定

これは一番簡単です。サーバーの設定は不要で、DNSレコードを追加するだけです。
ドメイン管理会社のDNS設定画面を開いてください。

DNS TXTレコードの追加

前提: 送信サーバーのIPが 203.0.113.10 の場合

ホスト名 種別
@ (空欄) TXT v=spf1 ip4:203.0.113.10 -all

解説:
v=spf1: SPFのバージョン宣言
ip4:203.0.113.10: このIPからの送信を許可する
-all: それ以外のIPからの送信は「絶対拒否(Hard Fail)」する(~all にすると「たぶん拒否(Soft Fail)」になる)

3. Step 2: OpenDKIMの導入と鍵作成

ここが今回の山場です。Postfixと連携してメールに電子署名を付けるツール「OpenDKIM」を導入します。

インストール

AlmaLinux / RHEL系: (EPELリポジトリが必要です)

dnf install opendkim opendkim-tools

Ubuntu / Debian系:

apt install opendkim opendkim-tools

秘密鍵と公開鍵の作成

電子署名に使う鍵ペアを作ります。
ここではセレクタ名(鍵の名前のようなもの)を default とします。

# 鍵保存用ディレクトリの作成
mkdir -p /etc/opendkim/keys/example.com
cd /etc/opendkim/keys/example.com

# 鍵の生成 (2048ビット推奨)
opendkim-genkey -s default -d example.com -b 2048

# 権限の変更 (opendkimユーザーが読めるように)
chown -R opendkim:opendkim /etc/opendkim/keys

これで2つのファイルが生成されます。
default.private(秘密鍵:サーバーに置く)
default.txt(公開鍵:DNSに登録する)

4. Step 3: OpenDKIMの設定

設定ファイル /etc/opendkim.conf を編集し、どのドメインにどの鍵を使うかを指定します。

vi /etc/opendkim.conf

以下の箇所を変更・追記してください。
(UbuntuとRHEL系でデフォルト値が少し違いますが、以下に合わせれば動きます)

# 動作モード (s=署名, v=検証)
Mode    sv

# 通信ソケット (Postfixと連携する場所)
# RHEL系はファイルソケット、UbuntuはTCPソケットがデフォルトの場合あり
# ここでは「UNIXドメインソケット」に統一します
Socket  local:/run/opendkim/opendkim.sock

# 署名に使うテーブルを指定
KeyTable      refile:/etc/opendkim/KeyTable
SigningTable  refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

マッピングファイルの作成

3つの補助ファイルを設定します。

1. /etc/opendkim/KeyTable
「鍵の名前」と「ファイルの場所」を紐付けます。

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private

2. /etc/opendkim/SigningTable
「誰からのメール」に「どの鍵」を使うか指定します。

*@example.com default._domainkey.example.com

3. /etc/opendkim/TrustedHosts
署名を許可するホストを指定します。

127.0.0.1
::1
localhost
mail.example.com
example.com
203.0.113.10

OpenDKIMの起動

systemctl enable --now opendkim

※エラーが出る場合、/run/opendkim/ ディレクトリの権限を確認してください。

5. Step 4: PostfixとOpenDKIMの連携

Postfixに「メールを送る前に、OpenDKIMに渡してハンコをもらってこい」と指示します。

vi /etc/postfix/main.cf

末尾に以下を追記します。

# --- DKIM Settings ---
# OpenDKIMのソケットを指定
smtpd_milters = unix:/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

重要:権限設定 (RHEL系でよくハマる罠)
PostfixユーザーがOpenDKIMのソケットファイルを読めずにエラーになることがあります。
Postfixをopendkimグループに追加しておきましょう。

usermod -aG opendkim postfix
systemctl restart postfix opendkim

6. Step 5: DNSへのDKIM公開鍵登録

作成した公開鍵 /etc/opendkim/keys/example.com/default.txt の中身をDNSに登録します。

cat /etc/opendkim/keys/example.com/default.txt

出力例:
default._domainkey IN TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..." )

これをDNSに登録します。

ホスト名 種別
default._domainkey TXT v=DKIM1; k=rsa; p=MIIBIjANBgkqh… (長い文字列)

注意点:
2048ビットの鍵は文字列が長すぎて、DNS管理画面によっては一度に入力できない場合があります。
その場合は、p= の値を途中で分割して登録する必要があります(プロバイダの仕様を確認してください)。

7. Step 6: DMARCレコードの設定

最後にDMARCです。これはDNS登録だけなので簡単です。
「もしSPFかDKIMの認証に失敗したらどうするか」を宣言します。

ホスト名 種別
_dmarc TXT v=DMARC1; p=none; rua=mailto:admin@example.com

解説:
p=none: 認証失敗しても何もしない(最初はこれで様子見)。
p=quarantine: 迷惑メールフォルダに入れる。
p=reject: 受け取りを拒否する(自信がついたらこれにする)。
rua=...: 認証結果のレポートをこのメアドに送る。

8. 最終確認:Gmailに送ってみよう

全ての設定が完了しました!
自分のGmail宛てにテストメールを送信してください。

届いたメールをGmailで開き、右上の「︙」メニューから「メッセージのソースを表示」をクリックします。

成功の証:

SPF: PASS (IP: 203.0.113.10)
DKIM: PASS (ドメイン: example.com)
DMARC: PASS

この3つの PASS が揃っていれば、あなたのサーバーはGoogleから「信頼できる正規のサーバー」として認められたことになります!


第4回まとめ:信頼はお金では買えない

お疲れ様でした!
今回の作業は、目に見える機能追加ではありませんが、メールサーバー管理者としての「責任」を果たすための最も重要な工程でした。

  1. SPF: 許可されたIPからの送信であることを証明した。
  2. DKIM: 電子署名で改ざんされていないことを証明した。
  3. DMARC: 偽物メールの扱いを宣言した。
コウ君

先生!Gmailで確認したら、赤い警告が消えてました!
ちゃんと受信トレイに届いてます!
「PASS」の文字を見た時、思わずガッツポーズしちゃいました。

リナックス先生

よくやったわね。
これであなたのサーバーからのメールは、世界中のどこへでも堂々と届くようになったわ。
でも、まだ終わりじゃない。
最終回は、逆に「外から来る悪意(スパムメールやウイルス)」からサーバーを守る「防衛編」よ。
自分のポストがゴミだらけにならないよう、フィルターを設置するわよ!

▼電子署名処理も軽快なVPS

DKIMの署名処理はCPUを使います。メール量が増えても遅延なく署名・配送できる、十分な処理能力を持った推奨VPSはこちらです。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント