「迷惑メールフォルダ」という名の墓場
こんにちは!「リナックス先生」です。
PostfixとDovecotの構築、お疲れ様でした。これで送受信の機能自体は完成しました。
しかし、ここからが本当の戦いです。
- 第1回:設計・DNS編 – 初心者でもGmailに届くインフラ作り
- 第2回:送信編 (Postfix) – 不正中継を防ぐSMTP-AuthとSubmissionポート
- 第3回:受信編 (Dovecot) – 盗聴不可能なIMAP環境とSSL/TLS
- 第4回(今回):信頼性編 – SPF・DKIM・DMARCフル装備
- 第5回:防衛編 – スパムとウイルスを撃ち落とす
先生、聞いてください…。
前回作ったサーバーから友達の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回まとめ:信頼はお金では買えない
お疲れ様でした!
今回の作業は、目に見える機能追加ではありませんが、メールサーバー管理者としての「責任」を果たすための最も重要な工程でした。
- SPF: 許可されたIPからの送信であることを証明した。
- DKIM: 電子署名で改ざんされていないことを証明した。
- DMARC: 偽物メールの扱いを宣言した。
先生!Gmailで確認したら、赤い警告が消えてました!
ちゃんと受信トレイに届いてます!
「PASS」の文字を見た時、思わずガッツポーズしちゃいました。
よくやったわね。
これであなたのサーバーからのメールは、世界中のどこへでも堂々と届くようになったわ。
でも、まだ終わりじゃない。
最終回は、逆に「外から来る悪意(スパムメールやウイルス)」からサーバーを守る「防衛編」よ。
自分のポストがゴミだらけにならないよう、フィルターを設置するわよ!
▼電子署名処理も軽快なVPS
DKIMの署名処理はCPUを使います。メール量が増えても遅延なく署名・配送できる、十分な処理能力を持った推奨VPSはこちらです。


コメント