【Fortigate】Session-helper(ALG)の設定と動作確認 FortiOS6.4.3

Fortigateでは、session-helperという機能により、動的ポートの追加セッションが開始されるような通常処理ではないプロトコルについて、接続を許可することができます。この機能はALG(アプリケーションレイヤーゲートウェイ)と言われることもあります。

今回は、FTPのパッシブモードを例に動作を確認します。

スポンサーリンク

FTP パッシブモード

FTPはファイル転送用プロトコルで、コントロール用とデータ用の2つのコネクションを確立し、ファイル転送します。

コネクションの作り方には、アクティブモードパッシブモードの2種類があり、以下はパッシブモードの例です。

初回のコントロールはTCP21番でコネクションを張り、FTPサーバからFTPクライアントへデータコネクション用のポート番号が通知されます。

FTPクライアントは通知されたポート番号に対して、データコネクションを張ります。

スポンサーリンク

通常ポート(TCP21番)でのFTPパッシブポートでの接続

Fortigate経由で、端末から通常ポート(TCP 21番)を使用して、パッシブモードでFTP接続するものとします。

ファイアウォールポリシーでは、FTPのみ許可します。

ポリシー&オブジェクト >> ファイアウォールポリシー

端末からFTPサーバへパッシブモードで接続します。すると、FTPサーバからFTPクライアントへデータコネクション用のポート番号(以下の場合は49725番)が通知されます。

FTPクライアントはデータコネクションをTCP 49725番で張りにいきます

トラフィックログを確認すると、TCP49725番ポートの通信が確認できます。

ログ&レポート >> 転送トラフィック

確認いただきたいのは、ポリシーID 4 では、FTPしか許可していないにも関わらず、動的に割り当てられたプライベートポート(今回はTCP49725番)の通信も許可しているということです。

実際にファイル転送も問題なく動作します。

なぜ、動的に割り当てられたプライベートポートも許可されるのかというと、TCPのポート番号21はsession-helper機能により、FTPプロトコルとして追跡しなさい と定義されているからです。

設定はCLIで確認できます。TCP(プロトコル番号6番)のポート番号21をFTPとして追跡するよう、デフォルトで設定されています。

config system session-helper
    edit 9
        set name ftp
        set protocol 6
        set port 21
    next
end
スポンサーリンク

カスタムポートによるFTPパッシブポートでの接続

FTPサーバを通常のTCP21番からカスタムポート(今回はTCP 8021番とします)に変更されたとします。この場合に問題が発生します。

session-helper設定無しでの接続

Fortigateで、あらかじめサービスオブジェクトを作成し、TCP8021番ポートをポリシーで許可します。

ポリシー&オブジェクト >> ファイアウォールポリシー

端末からFTPサーバへパッシブモードで接続すると、FTPのコネクションは張れますが、データ転送ができる状態になりません

TCP 8021番は許可されていますが、動的に割り当てられたプライベートポート(今回はTCP 49727番ポート)の通信は拒否されています。

これは、TCP 8021番の通信がFTPプロトコルとして追跡するように、Fortigateに設定していないので、TCP 49727番ポートは別のセッションと認識され、後続のポリシーで拒否されています。

ログ&レポート >> 転送トラフィック

session-helper設定と動作確認

Fortigateで、TCP 8021番の通信がFTPプロトコルとして追跡するよう、session-helperの設定をします。まず、現在、いくつのsession-helperが設定されているか、editの数で確認します。

FortiGate # config system session-helper
FortiGate (session-helper) # show | grep edit
    edit 1
    edit 2
    edit 3
    edit 4
    edit 5
    edit 6
    edit 7
    edit 8
    edit 9
    edit 10
    edit 11
    edit 12
    edit 13
    edit 14
    edit 15
    edit 16
    edit 17
    edit 18
    edit 19
    edit 20
FortiGate (session-helper) #

以上の通り、20個設定されていますので、21個目として、TCP(プロトコル番号6番)ポート番号 8021をFTPプロトコルとして追跡するよう設定します。

FortiGate # config system session-helper
FortiGate (session-helper) # edit 21
new entry '21' added
FortiGate (21) # set name ftp
FortiGate (21) # set protocol 6
FortiGate (21) # set port 8021
FortiGate (21) # end
FortiGate #

設定内容を確認すると、以下になります。

FortiGate # config system session-helper
FortiGate (session-helper) # edit 21
FortiGate (21) # show
config system session-helper
    edit 21
        set name ftp
        set protocol 6
        set port 8021
    next
end
FortiGate (21) #

ポリシーは変更せず、TCP8021番ポートだけが許可されているように設定します

端末からFTPサーバへパッシブモードで接続すると、問題なく接続ができます。

ポリシーでは、TCP8021番しか許可していないにも関わらず、動的に割り当てられたプライベートポート(今回はTCP 49734番ポート)の通信も許可しています。実際にファイル転送も問題なく動作します。

ログ&レポート >> 転送トラフィック

session-helper機能はFTP以外にも、SIPやH323など、複数プロトコルのサポートされています。

参考

  • Configure session helper. – CLI Reference FortiOS 6.4.3
  • コメント