メールフィルタのセキュリティ周りを触ってみたいと思いました。
よく目にするのがm-Filterですが無償版は法人にしか提供していないようです。
他にないかchatGPTに聞いてみると色々あるようです。FortiMailをみて「そういやFortigateにもメールフィルタの機能あったな」って思いFortigateのメールフィルタの検証をしてみたという感じです。


↓参考にした記事
https://dev.classmethod.jp/articles/how-to-deploy-fortigate-on-ec2
今回検証時の構成図

■1.Fortigateのデプロイ
EC2のサービスから[インスタンスを起動]をクリックし、
AMIはライセンス付き且つCPUのアーキテクチャがARMの安い方を選択しました。
(BYOLは別途自分でライセンスの調達が必要となるため選択しません。)
あとはキーペアとパブリックサブネット、セキュリティグループを設定してウィザードを終わらせました。

普段と気にすべきところは複数nicしているかですね。今回私は固定のグローバルipを使いたかったので、
Elastic IPを割り当てました。

ENIの送信元/送信先チェックを無効化します。

■2.ForiMailのデプロイ
EC2のサービスから[インスタンスを起動]をクリックし、
PAYG(Pay-As-You-Go:使うたびに支払う)を選択します。PAYGじゃないほうを最初デプロイしましたがライセンスが適用されておらずBYOLと判明しました。
あとはキーペアとパブリックサブネット、セキュリティグループを設定してウィザードを終わらせました。

nicは一つだけでパブリックipを持たせてないです。

ENIの送信元/送信先チェックを無効化します。

■3.メールサーバのデプロイ
Amazon Linux2023のインスタンスタイプt4g.nanoをデプロイしました。
ネットワーク設定はプライベートnicを一つだけ持たせています。

■4.ルーティングの設定
あとはサブネットのルーティングテーブルの設定を行います。
パブリックサブネットはデフォルトルートがインターネットゲートウェイを向いているかですね。
↓パブリックサブネットのルーティング


プライベートサブネットはメールサーバですが、デフォルトルートをFortigateのプライベートENIを指定します。
↓プライベートサブネットのルーティング


■5.メールサーバの構築
下記ページでメールサーバの構築ができます。
ドメインはfan-ria.comでメアドは@fan-ria.comで作成しました。

■6.FortiMailの構築
下記で管理画面にアクセスします。
URL:https://[パブリックIPアドレス]/admin
ログイン情報:admin/<インスタンスid>

使用するドメイン名とプライベートサブネットに建てたメールサーバを指定します。

今回検証でuser002@fan-ria.comを使用するため登録しました。

■7.Fortigateの構築
下記で管理画面にアクセスします。
URL:https://[パブリックIPアドレス]/

プライベート側のnicについて[サーバからデフォルトゲートウェイを取得]を無効にする必要があります。
有効の場合デフォルトゲートウェイが二つある状況となります。

時間と言語を日本に変更しました。


ポリシーを作成していきます。
まずは外部からメールを受信するためにVIPの設定です。外部ipをforitagateのプライベートipにして、
内部ipをFortiMailにします。

着信と発信インタフェースはどちらもport1(パブリック側のnic)にしています。
FortiMailはパブリックのnicしか持っていないためです。

■8.メールの送受信確認
Gmailから送ってみます。

メールサーバに届いていることが確認できました。

user002@fan–ria.comからGmailあてにメールを送ってみます。
sendmail -f user002@fan-ria.com <送信先メアド>@gmail.com <<EOF
From: user002@fan-ria.com
To: <送信先メアド>gmail.com
Subject: Test Email From AWS Mail Server
Reply-To: user002@fan-ria.com
X-Custom-Header: CustomHeaderValue
X-Mailer: sendmail
Date: $(date -R)
This is Test email From AWS
EOF

Gmailに届いていることが確認できましたね。

以上です。