本記事はアフィリエイトリンクを含んでいます。
Gmail ガイドライン更新に伴う DKIM 対応の必要性
Gmail のメール送信者ガイドラインが更新され、2024年2月以降は Gmail 宛にメール送信を行う側での SPF、DKIM メール認証の仕組みを導入する必要があります。これを行わない場合、Gmail 側でメール受信が拒否される可能性があります。
これに伴い、世の中のインフラエンジニアたちは各エンドユーザのメールサーバにて SPF、DKIM、DMARC への対応に迫られているのではないでしょうか。
本記事では、Fortinet 社の Eメールセキュリティ・アプライアンスである FortiMail を使用して内部からの送信メールに対して DKIM 署名を行うための設定方法について説明します。
想定シナリオ
既存構成ではメールクライアントから Gmail へのメール送信経路は以下のようになっています。
- メールクライアント
- 内部メールサーバ
- 外部メールサーバ
- Gmail

Gmail ガイドライン更新によって送信メールへの DKIM 署名が必要になったため、内部メールサーバと外部メールサーバの間に FortiMail を挟み、FortiMail で DKIM 署名を行うこととします。新しいメール送信経路は以下のようになります。
- メールクライアント
- 内部メールサーバ
- FortiMail (DKIM 署名)
- 外部メールサーバ
- Gmail

なお、FortiMail のオペレーションモードはデフォルトの「ゲートウェイモード」として動作させます。
検証環境
- FortiMail VM v7.4.2
- 内部メールサーバ
- CentOS Stream 9
- Postfix 3.5.9-24
- Dovecot 2.3.16-11
- cyrus-sasl 2.1.27-21
- 外部メールサーバ
- CentOS Stream 9
- Postfix 3.5.9-24
FortiMail 基本設定
FortiMail の設定をしますが DKIM 署名用の設定の前に基本的な設定をしていきます。本記事では設定は基本的に管理用 GUI から行うこととします。ただし、初期設定時の IP アドレス等のインターフェース設定のみ CLI で行います。
初回ログインとインターフェース初期設定
FortiMail VM を VMware ESXi 上にインストールして起動後、コンソールを表示します。ログインプロンプトが表示されたら以下の情報でログインします。
- ユーザ名: admin
- パスワード: 無し (何も入力せずにEnter)
初回ログイン後、パスワードの設定が必須のため、admin ユーザに対して設定したいパスワードを2回入力します。なお、このときキーボード配置が US キーボードとして認識されるため注意してください。パスワード設定後は「<ホスト名> #」のプロンプトが表示され CLI 操作が可能になります。

CLI のコマンド体系及びコンフィグ構造は FortiGate と同じなので、FortiGate に慣れている人であれば比較的操作はし易いかと思います。
次にインターフェース初期設定を行います。show system interface
コマンドを実行すると現在のインターフェース設定を確認できます。以下の出力結果のように port1 と port2 にはデフォルトで IP アドレス設定と管理アクセス許可設定がされています。本記事のシナリオでは port1 を使用することとし、このアドレスを 192.168.75.101/24 に変更します。また管理アクセス許可プロトコルに telnet を追加します。

インターフェース設定用のコマンドは以下の通りです。
config system interface
edit port1
set ip 192.168.75.101/24
set allowaccess https ping ssh telnet
next
end
以下は投入時のコンソール画面です。

設定後、show system interface
コマンドを実行して想定通り設定変更できていることを確認します。

管理用 GUI へのアクセス
FortiMail にはメールユーザ用の GUI と管理用の GUI があります。管理用 GUI にアクセスするためにはブラウザで以下 URL にアクセスします。
- https://<FortiMailのアドレス>/admin
初回アクセス時はブラウザの警告画面が表示されますが接続を続行します。すると以下のログイン画面が表示されるため admin ユーザと初回ログイン時に設定したパスワードでログインします。

ログイン後は以下のようなダッシュボード画面が表示されます。

アドバンスドビューの有効化と GUI の日本語化
デフォルトでは GUI の設定項目表示が Simple View になっていて基本的な項目しか表示されません。これを Advanced View に変更します。GUI 画面右上の目のマークをクリックして「Advanced View」をクリックすることで設定変更できます。

次に GUI の言語表示を日本語に変更します。FortiMail での GUI の言語設定は管理者ユーザ毎に行います。GUI 左側のメニューから「System > Administrator」をクリックします。表示された画面で admin ユーザの行をクリックして選択状態にした後「Edit」をクリックします。

表示された設定画面で「Language」を日本語に変更し、「OK」をクリックします。

設定後、以下のように GUI 表示が日本語になったことを確認します。

オペレーションモードの設定確認
オペレーションモードがデフォルトのゲートウェイモードになっていることを確認します。
GUI のダッシュボード画面のシステム情報欄の「動作モード」がオペレーションモードの設定です。以下の通りデフォルトではゲートウェイモードになっています。

ホスト名およびローカルドメインの設定
GUI 左側のメニューから「システム > メール設定」をクリックし表示される画面にてホスト名とローカルドメイン名を設定できます。

スタティックルートと DNS サーバ設定
スタティックルートの設定
GUI 左側のメニューから「システム > ネットワーク」をクリックして表示される画面にて「ルーティング」タブを開き「新規」をクリックします。

以下設定画面が表示されるため、ルートの宛先、出力インターフェース、ゲートウェイアドレスを設定します。

スタティックルートが追加されたことを確認します。

DNS サーバの設定
GUI 左側のメニューから「システム > ネットワーク」をクリックして表示される画面にて「DNS」タブを開きます。この画面でプライマリDNSサーバとセカンダリDNSサーバを設定できます。デフォルトでは以下画像のように FortiGuard のサーバが設定されています。セカンダリDNSサーバの設定も必須のため、設定したいDNSサーバが1台のみの場合はセカンダリDNSサーバ欄にもプライマリDNSサーバと同じアドレスを入力します。

タイムゾーンと NTP サーバ設定
GUI 左側のメニューから「システム > 設定」をクリックし表示される画面の「時刻」タブにてタイムゾーンと NTP サーバを設定できます。デフォルトでは以下画像の通りの設定となっています。

リレーメールサーバの設定
FortiMail が外部宛メールを受信したときの転送先となるリレーメールサーバを設定します。本記事のシナリオでは外部メールサーバをリレーメールサーバとして設定します。
GUI 左側のメニューから「システム > メール設定」をクリックして表示される画面にて「リレーホストリスト」タブを開き「新規」をクリックします。

以下の設定画面が表示されるため各項目を設定します。本記事のシナリオでは外部メールサーバで特に認証は設定していないため、名称、リレータイプ、IP アドレスのみ設定しています。

設定後、リストにリレーホストが追加されたことを確認します。

次に「メールサーバー設定」タブを開き、「送信メール」を展開して表示される「リレーホストへ配送」のトグルを有効化してドロップダウンの中から先ほど設定したリレーホストを選択します。その後「適用」をクリックして設定を確定します。

アクセス制御ポリシーの設定
FortiMail のデフォルト動作では、「ドメイン&ユーザー > ドメイン」にて設定していないドメイン宛のメールについては拒否されるため、外部宛のメールが転送されません。本記事のシナリオでは外部宛のメールをリレーさせたいため、アクセス制御ポリシー設定を追加します。
GUI の左側メニューから「ポリシー > アクセス制御」をクリックします。表示された画面の「受信」タブを開き、「新規」をクリックします。

以下の設定画面が表示されます。送信者や受信者等を細かく設定することもできますが、本記事のシナリオではすべてリレーすることにして「アクション」のみ「リレー」と設定し、その他項目はデフォルトにします。

設定後、リストにアクセス制御ポリシーが追加されたことを確認します。

FortiMail の基本設定は以上です。ここまで設定すれば FortiMail は単純なリレーサーバとして動作できます。
続いて以下では DKIM 署名を行うための設定方法を説明します。
FortiMail で DKIM 署名を行うための設定
FortiMail で DKIM 署名を行うためには、「ドメイン&ユーザー > ドメイン」欄にてメール送信元ドメイン毎に保護されたドメインの設定を作成し、ドメイン毎に DKIM 署名を有効化する設定を行います。
GUI 左側メニューから「ドメイン&ユーザー > ドメイン」画面を表示し、ドメイン画面で「新規」をクリックします。

以下の設定画面が表示されます。ドメイン名とリレータイプのみ設定して「作成」をクリックします。
- ドメイン名: DKIM 署名を行う対象メールの送信元ドメイン
- リレータイプ: このドメイン宛のメールを送信する際のリレー先 SMTP サーバを指定

ドメインリストに設定したドメインが追加されたことを確認します。

対象ドメインをクリックして選択状態にし、「編集」をクリックします。

設定画面にて「高度な設定」の [+] をクリックして展開し、「DKIMとARC設定」をクリックします。

DKIM キーセレクターを作成します。これは DKIM 署名で使用する秘密鍵と権威 DNS サーバに登録する公開鍵に該当します。
以下の DKIM 設定画面にて「キーセレクター」欄の「新規」をクリックします。

以下の画面が表示されます。DKIM キーは FortiMail で自動生成するか、または外部で作成したキーをインポートすることができます。本記事のシナリオでは FortiMail で自動生成します。セレクタ名を入力し、キーとして「自動生成」を選択した状態で「OK」をクリックします。

リストにキーセレクタが追加されたことを確認します。

DNS に登録する DKIM レコードの内容に該当するテキストをダウンロードします。
キーセレクター欄の「ダウンロード」右の[▼]をクリックします。レコード形式としてマルチとシングルを選択できます。DNSサーバの仕様に合わせて形式を選んでください。
- マルチ形式: TXTレコードの値が255文字以内の文字列に分割された形式
- シングル形式: TXTレコードの値が一つにまとめられた形式

以下のような内容のテキストがダウンロードできます。
#シングル形式の場合
KEY_20240504._domainkey IN TXT "k=rsa; p=<鍵文字列>"
#マルチ形式の場合
KEY_20240504._domainkey IN TXT ("k=rsa; p=" "<鍵文字列>" "<鍵文字列>")
アクティベートしたキーが DKIM 署名で使用されます。対象キーセレクターをクリックして選択状態にした上で「アクティベート」をクリックします。

以下の確認画面では「OK」をクリックします。

キーセレクターのステータスが「アクティブ」になったことを確認します。

「送信メールのDKIM署名」のトグルを有効化し、「OK」をクリックして DKIM 設定を終えます。

ドメイン設定画面で「OK」をクリックして設定を確定します。

以上で FortiMail での DKIM 署名用の設定は完了です。
FortiMail で自動生成される DKIM 鍵の鍵長は 2048bit 固定です。この鍵長を変更することはできません。ただし、外部で作成した鍵をインポートする場合は 1024bit、2048bit、4096bit の鍵をインポート可能です。
権威 DNS サーバでの DKIM 用レコードの追加
内部ドメインの権威 DNS サーバに対して DKIM レコードを登録します。このとき FortiMail の DKIM 設定の中でダウンロードしたキー情報テキストの内容を使用します。
本記事のシナリオではお名前ドットコムの DNS サーバを権威 DNSとして使用していますが、TXTレコードとして以下のような内容を登録しました。

必要に応じて SPF レコード、DMARC レコードも追加します。
メール送信と DKIM 署名の確認
実際にメールクライアントからメール送信して受信側にてメールに DKIM 署名がされていることを確認します。
以下は実際にメール送信して、受信側で受信したメールのソースの内容です。
From - Sat May 4 15:09:38 2024
X-Account-Key: account11
X-UIDL: UID59-1635563406
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:
Return-Path: <mailuser01@kagenokouchikusya.xyz>
Delivered-To: 宛先メールアドレス
X-Virus-Status: clean(略)
Received: from outmail.kagenokouchikusya.xyz (送信元FQDN [送信元GIP])
by 宛先サーバFQDN (Postfix) with ESMTPS id ACB9DA0650E27
for <宛先メールアドレス>; Sat, 4 May 2024 15:09:35 +0900 (JST)
Authentication-Results: 宛先サーバFQDN;
dkim=pass header.d=kagenokouchikusya.xyz header.s=KEY_20240504 header.b=mrLMlK8c;
spf=softfail (宛先サーバFQDN: 送信元GIP is neither permitted nor denied by domain of mailuser01@kagenokouchikusya.xyz) smtp.mailfrom=mailuser01@kagenokouchikusya.xyz;
dmarc=pass (policy=none) header.from=kagenokouchikusya.xyz
Received: from fortimail.kagenokouchikusya.xyz (unknown [192.168.75.101])
by outmail.kagenokouchikusya.xyz (Postfix) with ESMTPS id 44C9120425E0
for <宛先メールアドレス>; Sat, 4 May 2024 15:09:35 +0900 (JST)
Received: from inmail.kagenokouchikusya.xyz ([192.168.75.102])
by fortimail.kagenokouchikusya.xyz with ESMTPS id 44469ZRX003319-44469ZRZ003319
(version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO)
for <宛先メールアドレス>; Sat, 4 May 2024 15:09:35 +0900
Received: from [192.168.75.1] (unknown [192.168.75.1])
by inmail.kagenokouchikusya.xyz (Postfix) with ESMTPA id DE0D1202EA34
for <宛先メールアドレス>; Sat, 4 May 2024 15:09:34 +0900 (JST)
Message-ID: <4922c09d-0f5c-425e-8734-7880296f6dde@kagenokouchikusya.xyz>
Date: Sat, 4 May 2024 15:09:33 +0900
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: mailuser01 <mailuser01@kagenokouchikusya.xyz>
Subject: test
To: "m.k." <宛先メールアドレス>
Content-Language: en-US
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Antivirus: Avast (VPS 240503-4, 2024/5/3), Outbound message
X-Antivirus-Status: Clean
X-FEAS-Client-IP: 192.168.75.102
X-FE-Policy-ID: 1:1:0:SYSTEM
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; d=kagenokouchikusya.xyz; s=KEY_20240504; c=relaxed/relaxed;
h=message-id:date:mime-version:from:subject:to:content-type;
bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;
b=mrLMlK8chp4DvGAKqElDUBb4yiAAcXI0R79RXkH9m2QfQUeRy6mmSvHs+BQpk2FVb9ClaO9nomP+
fMsAToc+Efu6ooq4SkThEWthvgylmnExn1oQnvaIr7gX8+BeISVNo/tDvPl+KmiX+KuzZDFHJFKK
seUhTxhuAnBSUNGUZOuUpO7xcDJjO4E0BFB1lDlD6ca8R+wK9mVY03c/bvwxP+WRrs13uyCNx2Lj
fQSsLfnVQ74OwvR6ccy3RwWK8bvlcVmEmU/jcMp1N6r/9OBFTha1Ar1IDvjg/Kmdl4V9Iesnp2fU
TAzla1Ms2X4XBI99tlveflzoe2udgAZbWqxsCQ==
X-Antivirus: Avast (VPS 240503-4, 2024/5/3), Outbound message
X-Antivirus-Status: Clean
XSRV-Filter: 宛先メールアドレス
X-Antivirus: Avast (VPS 240503-4, 2024/5/3), Inbound message
X-Antivirus-Status: Clean
test
13-16行目に DKIM、SPF、DMARC の結果が表示されています。DKIM と DMARC はパスし、SPF は失敗していることが分かります。
Authentication-Results: 宛先サーバFQDN;
dkim=pass header.d=kagenokouchikusya.xyz header.s=KEY_20240504 header.b=mrLMlK8c;
spf=softfail (宛先サーバFQDN: 送信元GIP is neither permitted nor denied by domain of mailuser01@kagenokouchikusya.xyz) smtp.mailfrom=mailuser01@kagenokouchikusya.xyz;
dmarc=pass (policy=none) header.from=kagenokouchikusya.xyz
41-48行目に DKIM 署名の情報があるため、FortiMail で DKIM 署名できていることが分かります。
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; d=kagenokouchikusya.xyz; s=KEY_20240504; c=relaxed/relaxed;
h=message-id:date:mime-version:from:subject:to:content-type;
bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;
b=mrLMlK8chp4DvGAKqElDUBb4yiAAcXI0R79RXkH9m2QfQUeRy6mmSvHs+BQpk2FVb9ClaO9nomP+
fMsAToc+Efu6ooq4SkThEWthvgylmnExn1oQnvaIr7gX8+BeISVNo/tDvPl+KmiX+KuzZDFHJFKK
seUhTxhuAnBSUNGUZOuUpO7xcDJjO4E0BFB1lDlD6ca8R+wK9mVY03c/bvwxP+WRrs13uyCNx2Lj
fQSsLfnVQ74OwvR6ccy3RwWK8bvlcVmEmU/jcMp1N6r/9OBFTha1Ar1IDvjg/Kmdl4V9Iesnp2fU
TAzla1Ms2X4XBI99tlveflzoe2udgAZbWqxsCQ==
また、FortiMail でメール送信ログを確認することができます。「モニタリング > ログ」画面で各種ログを確認できます。ただし、DKIM 署名をしたといったような詳細な内容まではログでは確認できないようです。

【補足】送信者評価 Sender-reputation のリセット
FortiMail でブロックされるメールを繰り返し送信している送信元については、送信者評価(Sender-reputation)の値が上昇していき、一定値を超えると該当送信者からのメールがブロックされるようになります。
FortiMail の検証をしていると送信者評価が上昇し、送信者評価によりブロックされるようになって検証が進められなくなることがあります。このような場合には以下コマンドにて送信者評価をリセットすることができます。
execute db info sender-reputation
以下は実行例です。
fortimail # execute db reset sender-reputation
This operation will reset database!
Do you want to continue? (y/n)y
reset database sender-reputation succeed.
まとめ
- Gmail のメール送信者ガイドラインが更新され、2024年2月からは送信側は SPF、DKIM、DMARC を導入する必要が発生した
- FortiMail を導入することで送信メールに対して DKIM 署名を行うことができる
- DKIM 署名の動作確認としてはメール受信側で対象メールのソースを見れば DKIM 署名の有無や認証結果を確認できる
参考資料


Amazon アフィリエイトリンク
以下は Amazon アフィリエイトリンクです。インフラエンジニアにそこそこおすすめなアイテムです。
note メンバーシップへの参加もお待ちしています!

【アフィリエイト】おすすめ WordPress テーマ【SWELL】
当サイトでは WordPress テーマとして SWELL を使用しています。以前は無料・高機能テーマとして知られる Cocoon を使用していて Cocoon も使いやすかったのですが、SWELL を使い始めてからは SWELL のほうが圧倒的に使いやすいなと思いました。そして何より読み込み速度が速い。SWELL を使い始めてから、過去の Cocoon のブログを見直したときに「あれ、こんなに表示遅かったっけ?」という感覚になりました。
また SWELL はデフォルトでもオシャレなデザインですが柔軟にカスタマイズすることもでき個性のあるサイトを作成できます。さらにブログパーツや広告タグといった再利用可能なブログの「部品」も作成することができ、ブログ作成効率も高いです。
技術ブログやアフィリエイト等での収益化を見据えたブログの作成に SWELL は最適です。初見では価格が高いなと思うと思いますが、私としては SWELL を採用して良かったしそれ以上の価値があると感じています。
ブログの新設やテーマ変更を考えている人は一度 SWELL を検討してみてください。
以下の画像リンクから詳細な情報を確認できます。
レンタルサーバーを探している人には安定性に定評のあるエックスサーバーをお勧めします。
当サイトもエックスサーバーを使用しています。WordPress のインストールも簡単にできます。
コメント