FortiGate の非対称ルーティング
非対称ルーティングとは
行きのパケット
と帰りのパケット
が異なる経路(L3機器)を通る通信のこと。
Firewall は通信のセッション管理を行っており、非対称ルーティング
とは相性が悪い。
例えば行きのパケットが無いのに、帰りのパケットだけ来ても通信の整合性が合わなくなり許可すべき通信か判断できない。また通信の内容を見てセキュリティチェックを行うUTM機能も不能となる。
場合によっては、PINGは通るがTCP通信ができないこともある。これはTCPのほうがステートフルな通信を行っていることからチェックが厳しくなるためである。よって疎通確認はPINGだけに頼らず、できる限りTCPによる確認も行うべきである。
NG なケース
下図のように、「行き」はLANインターフェースからDMZインターフェースを通ってサーバーに到着するが、「帰り」はサーバーから直接LAN側のPCと通信をしてFortiGateを通らないパターン。
このようにFortiGateで異なるインターフェース間を通る通信で、「行き」または「帰り」のいずれかの通信がFortiGateを通らないとFortiGateは次に続くパケットをブロックし通信ができなくなります。
回避策
- FortiGateのポリシーで LAN -> DMZ の通信をNATにする。送信元IPがFortiGateとなり、帰りのパケットもFortiGateに向かう。
- Webサーバーへの通信はLAN側のIP宛で行う。
- FortiGateで非対称ルーティングを許可する。(非推奨)set asymroute enable
OK なケース
非対称ルーティングでも通信ができる場合があります。
それはFortiGateのインターフェース間通信が発生しない場合です。
下図はLANインターフェースで受けたパケットが、同じLANインターフェースから出ていくだけなので、FortiGateとしてはセッション管理をする必要がないため、OK となります。
ICMP Redirectについて
FortiGateはデフォルトでICMP Redirectが有効になっており、本ケースでは最初のパケットのみFortiGateを経由し、以降のパケットは直接ルータを通るため、非対称ルーティングは最初のパケットのみ
となります。
もしかするとICMP Redirectによって非対称ルーティングでもたまたま通信できているだけかもしれないので、FortiGateのICMP Redirectを無効にして検証してみました。
結果は変わらずTCPでも通信できていたので、ICMP Redirectの影響
はないことがわかりました。