動的フィルタ

動的フィルタを使用すると、パケットがフィルタルールにマッチした際に、動的に生成・削除されるパスルールのフィルタステートを生成することができます。

動的フィルタ

filter コマンドにて "state enable" を指定すると、パケットがフィルタルールにマッチした際に、 そのパケットに関連するパケットをパスさせるための優先的なパスルールのフィルタステートを生成することができます。 ブロックルールのフィルタと組み合わせることで、 IN方向は通常はブロックとし、OUT方向のパケットをトリガーとして一時的にIN方向もパスする動的なフィルタとすることができます。
  • 処理内容にパスを指定したフィルタルールでのみ動作します。
  • 同じIDを持つ、INとOUTの二つのパスルール(フィルタステート)を生成します。
注:

設定変更時の注意

"filter modify" および "filter6 modify" コマンドによる設定変更は、生成済みのフィルタステートには反映されません。 必要に応じてステートをクリアしてください。

  • clear filter state(IPv4の場合)
  • clear filter6 state(IPv6の場合)
動的フィルタステートの上限(IPv4,IPv6それぞれ)
機種 上限
SEIL/B1 16384
SEIL/X1 16384
SEIL/X2 32768
SEIL/x86 Fuji 65536
SEIL BPV4 65536
  • 動的フィルタステートは、動的フィルタ機能および、アプリケーションゲートウェイ機能が生成します。
  • filterおよびfilter6コマンドの設定行数はフィルタステートの数に含みません。

生成条件

次の条件を満たす場合にフィルタステートを生成します。

  • 生成済みの動的フィルタステートの数が上限に達していないこと
  • "state enable" であるIPパケットフィルタ設定行の、以下の条件全てにパケットが適合すること
    • interface
    • direction
    • protocol
    • icmp-type(ICMP あるいは ICMPv6 の場合のみ)
    • src
    • srcport(TCP あるいは UDP の場合のみ)
    • dst
    • dstport(TCP あるいは UDP の場合のみ)
    • ipopts(IPv4の場合のみ)
    • exthdr(IPv6の場合のみ)

生成されたフィルタステートのprotocolパラメータについて

生成元となるフィルタ設定のprotocolパラメータがanyやtcpudpであっても、ルールに一致したパケットがTCPであるならば、 生成されたフィルタステートのprotocolパラメータはTCPとなります。

例外対応

  • TCPおよびUDPに一致するフィルタステートは、当該ステートに関係する次のパケットをパスします。
    • ICMP エラーパケット(IPv4の場合)
    • ICMPv6 エラーパケット(IPv4の場合)
  • TCP 21番ポート(FTP 制御ポート)を含むフィルタルールにFTPパケットが一致すると、FTPのモードによってデータポート(20番ポートまたは任意ポート)に対応するステートも生成します。

フィルタステートの削除条件

  • フィルタステートは生成時に設定されたTTL(有効時間)値が0になると削除されます。
  • "clear filter state"(IPv4)または"clear filter6 state"(IPv6)コマンドが実行されると、該当プロトコルの全てのフィルタステートが削除されます。

フィルタステートのTTL

  • フィルタステートのTTLは、ステート生成時に初期値となり、ステートが存在する間は1秒経過ごとに1づつ減算されます。
  • 当該フィルタステートに一致するパケットをパスすると、TTLは初期値に戻されます。
  • 不要となったフィルタステートの削除を早めるため、条件によってTTL値を小さな値に変更します。
    • TCPの場合において、当該セッションに関係するTCP FINまたはTCP RSTをパスしたならば、当該TTLの初期値を5秒に変更します。
    • IPv4の場合において、当該セッションに関係するICMPエラーパケットをパスしたならば、当該TTLの初期値を5秒に変更します。
    • IPv6の場合において、当該セッションに関係するICMPv6エラーパケットをパスしたならば、当該TTLの初期値を5秒に変更します。

TTLの初期値は、フィルタステート生成のトリガーとなったパットの種類によって既定値が異なります。

注: 初期値は "state-ttl" パラメータの設定によりルールごとに任意の値を指定できますが、 設定した場合は、パケットの種類ごとの値が全て指定値と同じになりますのでご注意ください。
表 1. パケットの種類ごとのTTLの初期値
パケットの種類 "state-ttl normal" の場合 state-ttl に数値を指定した場合
ICMP の Echo Request 10秒 指定した秒数
ICMPv6 の Echo Request 10秒 同上
ICMPv6 の Neighbor Solicitation 10秒 同上
ICMPv6 の Router Solicitation 10秒 同上
UDP 53 番ポート(domain) 15秒 同上
UDP 123 番ポート(ntp) 15秒 同上
上記以外のUDP 180秒 同上
TCP 180秒 同上
上記以外 180秒 同上

フィルタルールの評価順序について

動的に生成されたパスルールを先に評価し、その次にパケットフィルタ設定のルールを順番に評価します。

注: "show status filter" コマンドおよび "show status filter6" コマンドのルールの表示順番と評価順番が異なります。

フィルタステートの参照

IPパケットフィルタの設定と、それに対応して生成されるフィルタステートは次のようになります。

1: フィルタ設定の内容
# show config filter
filter add HTTP interface pppoe* direction out action pass protocol tcp srcport 0-65535 dstport 80 state enable logging off enable
filter add Default interface pppoe* direction in action block state disable logging on enable
2: 生成されたフィルタステート
# show status filter
page prenat id HTTP pass out l2 l3 on pppoe* proto tcp from any to any port 80 script STA count 258118
page postnat id Default block in l2 l3 log on pppoe* proto any from any to any count 24684
page dynamic ttl 91/180 id HTTP-003825a1 pass in l2 l3 on pppoe1 proto tcp from 203.0.113.162 port 54474 to 192.168.10.40 port 80 option accept-icmperr script UPD,TCP count 23 S=1,SA=0,A=22,F=0,R=0
page dynamic ttl 88/180 id HTTP-003825b0 pass in l2 l3 on pppoe1 proto tcp from 198.51.100.253 port 15912 to 192.168.10.40 port 80 option accept-icmperr script UPD,TCP count 12 S=1,SA=0,A=11,F=0,R=0
page dynamic ttl 87/180 id HTTP-003825c1 pass in l2 l3 on pppoe1 proto tcp from 192.0.2.0.226 port 34173 to 192.168.10.40 port 80 option accept-icmperr script UPD,TCP count 26 S=1,SA=0,A=25,F=0,R=0
page dynamic ttl 91/180 id HTTP-003825a1 pass out l2 l3 on pppoe1 proto tcp from 192.168.10.41 port 80 to 203.0.113.162 port 54474 option accept-icmperr script UPD,TCP count 15 S=0,SA=1,A=14,F=0,R=0
page dynamic ttl 88/180 id HTTP-003825b0 pass out l2 l3 on pppoe1 proto tcp from 192.168.10.41 port 80 to 198.51.100.253 port 15912 option accept-icmperr script UPD,TCP count 11 S=0,SA=1,A=10,F=0,R=0
page dynamic ttl 87/180 id HTTP-003825c1 pass out l2 l3 on pppoe1 proto tcp from 192.168.10.41 port 80 to 192.0.2.0.226 port 34173 option accept-icmperr script UPD,TCP count 17 S=0,SA=1,A=16,F=0,R=0

フィルタステートはIDで管理します

IDは、"show status filter" コマンドの表示上では、生成元となったIPパケットフィルタ設定名と、 ステート生成ごとに割当られた16 進数8 桁の数字列がハイフン("-")で繋げられており、 対となるINとOUTのステートでは同じ値になります。 また、TCP 21番ポートのステートに対応して生成されたTCP 20番ポートのステートには "ftpdata" という文字列が付加されます。

注: ログの記録上はステート(state)では無く "SESSION" と表記されます。

フィルタステートと通信セッション

TCP あるいは UDP の場合
  • src,srcport,dst,dstportが一致するパケットを生存中の同じセッションからさがします。一致した場合同じセッションに関係すると判断します。
  • directionが逆向きの場合 src,srcport と dst,dstport を逆にして同じセッションに関係するかを判断します。
  • IPv4 の場合 ICMP エラーメッセージを IPv6 の場合 ICMPv6 エラーメッセージを監視しています(icmp port unreach errorなど)
ICMP あるいは ICMPv6 の場合
  • src,dst,icmp-type が一致するならば同じセッションに関係すると判断します。
  • direction が逆向きの場合、src,dstのアドレスを逆にして一致して、対応する icmp-type であるならば、同じセッションに関係すると判断します。
    • Echo Request と Echo Reply
    • Neigbor Solicitation と Neighbor Advertisement
    • Router Solicitation と Router Advertisement
上記以外の場合
  • src,dst が一致するパケットを同じセッションに関係すると判断します。
  • direction が逆向きの場合 src,dst のアドレスを逆にして同じセッションに関係するか判断します。
補足

動的に生成されたTCPのフィルタステートのTTLと、TCPセッションの寿命は異なります。 例えばTCPセッションを開始し、フィルタステートが生成されたとします。生成後すぐに "show status filter" コマンドを実行すると、 SYNフラグが立ったパケットをいくつパスしたかを示す計数値(S=)が正の数になっていることがわかります。 その後TTLの残時間、当該フィルタステートに一致するTCPの通信が無かった場合、TCPセッションの状態によらずフィルタステートは削除され "show status filter" の結果にも表示されなくなります。

注: このとき、フィルタステートは削除されますが、TCPセッションを切断させる動作を行うわけではありません。

続いて、既にセッションが確立しているTCPについて、生成元のパケットフィルタのルールに一致する方向で通信を再開すると、 フィルタステートを改めて生成します。先のステートと同様のパスルールとなりますが、管理上のIDは新規の割り当てとなり、統計情報も初期値となります。