Fortimail loopback利用時の注意

メーカー製品

Fortimailのloopbackインターフェースを利用したことはありますか?

一般的なメールサーバとしての使い方だと、利用する必要がそもそも無いケースが多いと思いますが、スパム判定を2重制御したい場合などに使えます。

しかし、そのような設定をした際にドツボにはまって、Fortinet社へ問い合わせしても調査結果が出るまで半年かかった事象があったので、記事にしました。参考にしてください。

loopback interface 利用経緯

以下の記事の仕様変更に基づくものなので、詳細は割愛しますが、

FortiOSのファームウェアのバージョンアップで仕様変更があり、スパム判定のIPレピュテーションとFortiGuardスキャン(URLフィルタ)の判定順序が逆転(正確にはマルチアクション化)したために、それを回避する策としてloopback interfaceを使うことになりました。

loopback interface を利用した判定順序逆転の回避方法

今までのスパム判定設定

  • 受信者ポリシーのアンチスパムプロファイルで判定
    • IPレピュテーション時は「Rejcet」
    • URLフィルタ時は「迷惑フラグを付けてそのまま配送」
イメージサンプル図(矢印はどちらかだけが動作)

新しいスパム判定設定

  • 受信者ポリシーのアンチスパムプロファイルで判定
    • IPレピュテーション時は「Reject」
    • URLフィルタ時は「迷惑フラグを付けて、loopback interfaceへリレー」
  • IPポリシーで「loopback interface」が送信元か判定
    • 予め作成した辞書プロファイルで、辞書スキャンで合致すれば「Discard」
イメージサンプル図(赤と青の矢印部分は両方動作、青と青の矢印部分は片方だけが動作)

マルチアクション化によって、送信元MTAにはReject通知が行われているので、2段階目の判定では、「Discard」で破棄させる

X-FEAS-SLB ヘッダーはFortiGuard AntiSpam-IPで検知した場合に付与されるヘッダー

動作説明の補足

  • IPが正常で、メールがスパムだった場合
    • URL検査により迷惑フラグを付与して、loopback interfaceへリレー
    • 辞書スキャンで「X-FEAS-SLB」ヘッダーが無いので、通常リレー
  • IPがスパムで、メールもスパムだった場合
    • スキャンIPで外部MTAにはReject通知
    • マルチスキャン動作のため、URL検査により迷惑フラグを付与して、loopback interfaceにもリレーされる
    • 辞書スキャンで「X-FEAS-SLB」ヘッダーが有るので、メールは破棄

以上で、ファームアップによる仕様変更で問題となった、判定順序の逆転・マルチアクション化の動作をクリアし、今までどおりの動作となるようになりました。
が、また別の問題が発生する結果となりました

Fromアドレスが内部ドメイン時にloopbackへ配送できずTimeout

※Fortimailの環境設定に依存するので、あくまで私の環境で発生した事象となります。

スパムの送信者はFromアドレスを詐称することは多々ありますが、そのアドレスに内部ドメインを使われた場合に、loopbackへ配送できず、Timeoutを繰り返し、最終的にはFromアドレスへエラーメールを返してしまうという事象です。

to=<hoge@naibu-domain.jp>, delay=00:00:30, xdelay=00:00:30, mailer=esmtp, pri=120317, relay=[192.168.254.254], dsn=4.0.0, stat=Deferred: Connection timed out with [192.168.254.254]

FromアドレスとToアドレスを同じにするケースも多々有り、お客様からの申告(送信した記憶の無いエラーメールが来た。と)で発覚しました。

事象パターン例

Fromアドレス:外部ドメイン ⇒ Toアドレス:内部ドメイン

  • SPAMメール判定され、正常にloopbackへリレーした後に配送される

Fromアドレス:内部ドメイン ⇒ Toアドレス:内部ドメイン

  • SPAMメール判定され、loopbackへリレーされるが、TimeOutを繰り返し、Fromアドレスへエラーメールを返す

loopbackへのリレーがTimeOutする理由

この調査に約半年かかりました。。。結論は、

メール送信時にIPプールでNATしていたため

設定箇所(GUIでの説明)

  • [ドメイン&ユーザー]-[ドメイン]
  • [高度な設定]-[その他]
  • IPプール「*****」、方向「送信」

設定意図

送信と受信のIPを分けるためです。分けておかないと、意図せずバウンスメールを大量に返してしまうような場合になった際、IPが汚れてしまって、通常のメール送信ができなくなる可能性があるからです。

TimeOutの理由

Fromアドレスが内部ドメインだった場合、リレー時にIPプールでNATする動きになってしまい、そのIPでloopback用の「192.168.254.254」に配送するとSYN/ACKが成り立たず、TimeOutになる。

loopbackへのリレーTimeOut解消方法

対応方法は至ってシンプルで、設定を1行追加するだけでOK。
内容は、local配送時にIPプールを使わせないとするだけ。

fortimail # config system mailserver
fortimail # set ip-pool-direction exclude-internal-to-internal
fortimail # end

感想

解決までに半年は本当に長かった。。。色んなトコから責められるよね。。。心にも無いけど「すまん」って謝罪しまくった。

保守サポート側では再現性が無いと言われ、こちらの本番環境で何度も試験をさせられた。結果、IPプール設定さえしてれば再現できたはずなのだが、それを問い詰めても言い訳しかしてなかった。。。素直に謝罪せぇよ。言い訳するベンダーは信用ならん。まぁ元からソフバンは1mmも信用してないけど。

なんにせよ、無事解決したので、良い勉強にはなった。(もう勉強する年じゃなくて、管理すべき年齢やけど、どっちもしなきゃならない会社の状況に嫌気がさしてる。。。課長補佐的な人たちも夜勤しまくってるし、どーなってんやウチの会社)

コメント