ToraNoAna

フィルタ

SEILがIPv4/IPv6 ルータとして動作するとき、及び、SEILがend-to-end でIPv4/IPv6 通信を行なうとき、セキュリティ向上のために適用可能なパケットフィルタリング機能を提供しています。

SEILのフィルタ機能の概要

SEILは設定されたフィルタルールに従い、SEILが中継しようとするパケットやSEILが送受信しようとするパケットを、通過(PASS)させる、または拒否(BLOCK)することができます。フィルタルールは、パケットが持つアドレスやプロトコル等の情報を条件として複数設定でき、パケットが通過しようとするインタフェースごとに優先度の高い順に評価されます。また、どのフィルタルールにもマッチしなかったパケットは通過します。 TCP/UDPのパケットに対しては、フィルタルールの適用により動的に生成・消滅する通過ルールを生成することも可能です。(動的フィルタ) なお、工場出荷状態ではフィルタルールは設定されていませんので、SEILを導入するネットワークのセキュリティポリシーにあわせて適切なフィルタ設定を行うことをお勧めします。
フィルタ設定範囲
[T1] [128] [2FE] [ATM] IPv4(filter),IPv6(filter6) 各64個
[Plus] IPv4(filter),IPv6(filter6) 各512個
[Turbo] IPv4(filter),IPv6(filter6) 各1024個

フィルタ設定コマンド

フィルタルールを設定するコマンドについて、次の入力例を元に各キーワードについて説明します。
 1| # filter add HTTP interface pppoe0 direction in action pass protocol tcp dst 192.168.0.8/32 dstport 80
 2| # filter add Default interface pppoe0 direction in action block logging off
1行目 pppoe0インタフェースへの入力パケットが、ホスト192.168.0.8のTCP 80番ポートへのアクセスであれば通過させます。
2行目 pppoe0インタフェースへの入力パケットはすべて拒否します。1行目にマッチしなかったパケットが評価対象です。

フィルタルールの管理コマンド

 1| # filter add HTTP interface pppoe0 direction in action pass protocol tcp dst 192.168.0.8/32 dstport 80
 2| # filter add Default interface pppoe0 direction in action block logging off
1行目 filter [add|delete|modify] <filter name> [IPv4用]
2行目 filter6 [add|delete|modify] <filter name> [IPv6用
フィルタルールを追加(add)、削除(delete)、変更(modify)するコマンドです。 filter(filter6)コマンドに続いてフィルタリング条件や処理方法を指定し、フィルタルールを設定します。<filter name>は、識別子として、削除や変更時のキーワードとなります。フィルタルールを追加するときに順位の指定が無い場は最下行に追加されますが、追加位置(評価順位)を指定して追加することもできます。"filter delete <filter name>"もしくは"filter delete all"で、指定した<filter name>もしくはすべてのフィルタルールを削除できます。 また、既存のルールは"filter modify <filter name>"に続き、変更したいパラメータを入力することで対象範囲や処理方法を変更することができます。 filter [enable / disable] <filter name> filter6 [enable / disable] <filter name> フィルタルールの有効/無効を指定します。"disable"は、"delete"と異なり設定を削除することなくルールを無効にします。"filter disable <filter name>"や、"filter enable all"(allはすべてのルールに適用)"といった入力で状態を変更することができます。"filter add <filter name> disable"として無効な状態で追加することも可能です。入力例の様にadd時に指定が無い場合はenableとなります。

フィルタ条件

# filter add HTTP interface pppoe0 direction in action pass protocol tcp dst 192.168.0.8/32 dstport 80
# filter add Default interface pppoe0 direction in action block logging off
通過を許可/拒否したいパケットを特定する条件を、キーワードとパラメータの対で指定します。 1行のフィルタルール中の条件にすべてマッチするパケットについて、許可/拒否の処理を行います。 フィルタルールには以下の条件を指定することができます。

interface [lanX|wanX|pppoeX|pvcX|lisX|tunnelX|vlanX|ipsecX]
lan0やpppoe0といった、SEIL各機種が搭載している物理/論理インタフェースを指定し、指定したインタフェースを通過しようとするパケットを評価対象とします。
※ interfaceの指定を省略することはできません。

direction [in|out|in/out]
インタフェースに対する、指定した入出力方向のパケットを評価対象とします。"in/out"を指定した場合は、入力・出力どちらも評価対象とします。
※ directionの指定を省略することはできません。

protocol [any|icmp|igmp|tcp|tcp-established|tcp-synonly|tcpudp|udp <protocol number>]

パケットのプロトコル(プロトコル番号)が指定と一致するか評価します。TCPについては、接続要求パケット(tcp-synonly)やセッション確立済みパケット(tcp-established)であるかの評価が可能です。指定を省略した場合"protocol any"の扱いになり、すべてのIPパケットがマッチします。

src / dst [<IP address/prefixlen>]
パケットのSourceアドレス、Destinationアドレスが指定と一致するか評価します。NAT/NAPTが適用される通信をフィルタする場合は、NAT/NAPT変換後のアドレスを指定します。指定を省略した場合は、アドレスを条件にしません。

srcport / dstport [<port (0-65535), or port range (e.g. 137-139)>]
パケットのプロトコルがTCP/UDPの場合に、Sourceポート番号、Destinationポート番号が指定と一致するか評価します。ポート番号は"-"を使用して範囲指定が可能です。指定を省略した場合は、ポート番号を条件にしません。

条件にマッチしたパケットの処理方法の指定

# filter add HTTP interface pppoe0 direction in action pass protocol tcp dst 192.168.0.8/32 dstport 80
# filter add Default interface pppoe0 direction in action block logging off
action [pass|block]
条件にマッチしたパケットの通過を許可(pass)するのか、拒否して破棄(block)するのかを指定します。 ※ actionの指定を省略することはできません。

logging [on|off]
条件にマッチした場合にログを出力する(on)、または出力しない(off)指定をします。 指定を省略した場合は"logging on"となります。

評価順位の指定

フィルタルールは設定が記述されている行の順に評価を行いますので、設定行の位置がそのまま評価順位となります。設定行の位置は、下記のパラメータで設定追加時に指定したり、既存の設定の位置を変更することができます。
filter[add|modify|move]<filter name>[top| bottom|above|below][]・・・
追加時/変更時の位置を、top(最上位)、bottom(最下位)、above(の前)、 below(の次)で指定します。 add(追加)時に指定を省略した場合はbottom扱いとなり、modify(パラメータ変更)時に省略した場合は順位を変更しません、また、move(移動)時は指定の省略はできません。

動的フィルタ

TCP/UDPのパケットがフィルタルールにマッチしたときに、そのパケットのプロトコル番号、Sourceアドレス及びポート番号、Destinationアドレス及びポート番号の組み合わせの、有効期限付き通過(pass)ルールを自動的に生成することができます。
state [enable|disable]
state-ttl [normal|<timeout number (5-999999 [second])>]
"state enable"が指定されたフィルタルールにパケットがマッチすると、該当するパケットの送信元と宛先情報を元に、該当ホスト間で送受信されるパケットの通過を許可するルールを動的に生成します。state-ttlでは、生成された動的ルールの有効期間を指定可能です。指定した期間、生成された通過ルールにマッチする通信が無いと、生成された動的ルールは消去されます。
フィルタルール追加時に指定を省略した場合は "state disable" / "state-ttl normal"(表示されない)となります。 基本Blockのポリシーでフィルタを設定すると、通信に使用するポートが動的に変動するようなアプリケーションを使用するためには想定される使用範囲のポートをPassするルールを設定する必要があったり、FTPのPassive modeでの使用が制約されてしまう事があります。"protocol tcp-established"や"protocol tcp-synonly"を指定することでTCPの通信に関してはある程度対処可能ですが、UDPの通信には適用されません。動的フィルタ機能を使用すると、通信の発生をトリガーとして、一時的なPassルールを自動生成することができます。例えばUDPを使用するストリーミングでは、クライアントからのリクエストをきっかけに、サーバからの応答がPassされる様なルールが生成されます。

FTP通信の補助機能

SEILの動的フィルタでは、FTPの制御コネクション(TCP21番ポート)を検知すると、PORT,PASV,EPRT,EPSV各モードに対応した動的ルールを生成します。 静的フィルタではPASVモードのFTPを使用可能とするには、データコネクションのために不特定かつ広範囲ポートを常時オープンにする必要があり基本Blockのポリシーと競合してしまう場合があります。動的フィルタ機能を使用すると、FTP制御コネクションの発生をトリガーとして、該当ホスト(アドレス)間のFTP各モードに対応したPassルールを動的に生成しますので、基本Blockのポリシー上でもFTPの可用性を損ないません。

動的フィルタの留意事項

  • "state enable"の指定は、"action pass"のルールでのみ可能です。動的に生成されるルールも通過を許可するルールですので、有効に活用するには例の様に拒否ルールを併用してください
  • パケットが生成された動的ルールにマッチした際、元のルールの設定によらずログは記録されません

NAT/NAPT併用時の注意

NAT/NAPTを使用すると、パケットがインタフェースを通過する際にパケットの持つアドレスやポート番号の情報が書き換えられます。 SEILのフィルタ処理はNAT/NAPT変換処理より後に行われるため、アドレスやポート番号を条件とするフィルタを設定する際は、NAT/NAPT変換を見越して変換後のアドレスやポート番号を指定する必要があります。

フィルタの動作確認

設定したフィルタの動作状況や、ログの参照について説明します。

ステータスの確認

"show"コマンドで、設定から展開されたフィルタの動作状況を確認することができます。
# show status filter
page 0 id filter0 block out on pppoe0 protocol tcp/udp from any to any port 134-139
page 0 id filter1 block out on pppoe0 protocol tcp/udp from any to any port 445
page 1 id Default block in log on pppoe0 protocol any from any to any
page 2 ttl 180 id SSH_0-0000990b pass out on pppoe0 protocol tcp from 192.168.0.1 port 22 to 172.16.0.1 port 44137 script UPD,TCP
"page 0"はインタフェースからの出力について、 "page 1"はインタフェースへの入力について動作しているフィルタの情報です。 "page 2"は動的フィルタにより生成された、有効期限つきpassフィルタの情報です。

ログの確認

フィルタルールの設定で"logging on"を指定している場合、そのルールにマッチする通信が発生するとログに記録されます。

pppoe0インタフェースへの入力パケットをすべて拒否するルール

# show config filter
filter add Default interface pppoe0 direction in action block state disable logging on enable

上記のフィルタルールにHTTPの通信がマッチした際のログの例

info filter pppoe0 @1:38[Default] b 10.0.0.2,3917 -> 172.16.0.1,80 PR tcp len 20 48 IN
(a)          (b)         (c)     (d)     (e)              (f)             (g)       (h)
(a) Level,Function
パケットフィルタによるログで、infoレベルであることを示します。 Pass,Blockともinfoレベルで記録されます。また、IPv4,IPv6ともファンクションはfilterとなります。
(b) Interface
パケットがフィルタにマッチしたインタフェースを示します。
(c) Filter Name
"filter add","filter6 add"コマンドで設定された識別子が表示されます。前半は内部的な処理番号です。
(d) Action
マッチしたパケットをb=Blockもしくはp=Passしたことを示します。
(e) Address,Port
マッチしたパケットの送信元と宛先を、"送信元アドレス","ポート番号" → "宛先アドレス","ポート番号"で示します。
(f) Protocol
マッチしたパケットのプロトコルを示します。
(g) Length
パケットのヘッダ長とペイロード長を示します。
(h) Direction
フィルタがマッチした入出力方向を示します。
※ フィルタログの内容はプロトコルにより記録される項目が異なる場合があります。

フィルタ基本設定例

フィルタの基本的な設定例を紹介します。 コマンド入力例では省略することが問題とならないパラメータの入力を省いているため、実際にConfigに反映される内容とは異なります。ログの有無等は必要に応じて明示的に指定してください。

紹介するコマンド例

# filter add HTTP interface pppoe0 direction in action block protocol tcp dstport 80

上記を入力した場合に反映されるConfig

# show config filter [Enter]
filter add HTTP interface pppoe0 direction in action block protocol tcp srcport 0-65535 dstport 80 state disable logging on enable
srcport 0-65535
srcportを指定しない場合「すべての送信元」が設定されます。 ("dstport"の指定もない場合は表示されず、ポート番号を条件にしません)

state disable
"state"の指定がない場合、動的フィルタは無効になります。("action block"の場合にも無効になります)

logging on

"logging"の指定がない場合、ログを取得する状態になります。

enable
キーワードに"disable"を指定しない場合、コマンド確定次第フィルタが有効になります。

SEILのUIへのアクセスを制限する例

インターネット側からSEILの各ユーザインタフェースに対するアクセスのみを拒否し、その他の通信は許可する設定例です。 ファイアウォール機器をSEILのLAN側に設置する場合等、ネットワーク内のセキュリティをSEILが関知する必要の無い場合の設定例です。また、参考としてインターネット側の特定の管理用ホストからのアクセスを許可する設定を加えます。アドレスやポート番号を変えることで、任意のホストに対するアクセスの制御に応用できます。
アドレス情報
SEILのグローバルアドレス 172.16.0.1
管理ホストのアドレス 10.0.0.1
フィルタ計画(interface pppoe0)
direction action protocol src : srcport dst : dstport =Comment=
in pass --- 10.0.0.1/32 --- 管理ホストからのアクセスを許可
in block tcp --- 172.16.0.1/32 : 22 SSHでのアクセスを拒否
in block tcp --- 172.16.0.1/32 : 23 TELNETでのアクセスを拒否
in block tcp --- 172.16.0.1/32 : 80 HTTPでのアクセスを拒否

コマンド例

 1| # filter add KANRI interface pppoe0 direction in action pass src 10.0.0.1/32
 2| # filter add SSH interface pppoe0 direction in action block protocol tcp dst 172.16.0.1/32 dstport 22
 3| # filter add TELNET interface pppoe0 direction in action block protocol tcp dst 172.16.0.1/32 dstport 23
 4| # filter add HTTP interface pppoe0 direction in action block protocol tcp dst 172.16.0.1/32 dstport 80
2行目
~4行目
SEILのグローバルアドレスに対して、SSH(TCP22),TELNET(TCP23),HTTP(TCP80)を宛先とするアクセスがあった場合にはblockします。pppoe0インタフェース以外の、lan0インタフェース等からのアクセスについてはマッチしません。また、ポート番号の22と23は連続しているため、"22-23"とまとめて1行で記述することも可能です。
1行目 管理ホストのアドレスから、SEILのグローバルアドレスへのアクセスがあった場合にはpassします。フィルタは上の行から評価されるため、管理ホストからのアクセスも含まれる2,3,4行目のblockルールよりも上位に記述する必要があります。

WAN側IPアドレスが固定でないサービスを利用する場合等

SEILのグローバルアドレスがインターネット接続のたびに動的に変わる接続サービスを使用する場合には、pppoe0インタフェースのアドレスを指定することができませんので、次の例の様に宛先アドレスの指定をせずに設定します。
# filter add HTTP interface pppoe0 direction in action block protocol tcp dstport 80
# filter add TELNET interface pppoe0 direction in action block protocol tcp dstport 23
# filter add SSH interface pppoe0 direction in action block protocol tcp dstport 22
pppoe0インタフェースから入力されたパケットについて、SSH,TELNET,HTTP宛の通信は宛先アドレスを問わず全てblockされますが、こういった動的にアドレスを割り当てるサービスでは、NAPTを使用してインターネット側からLAN側へのアクセスを想定しないため問題とはなりません。 静的NAT/NAPTを使用してSSH,TELNET,HTTPのサービスを公開する場合には、該当のフィルタを削除します。インターネット側からSEILへのアクセスは指定されたホストへ転送されるため、SEILのユーザインタフェースへのアクセスは防がれます。

動的フィルタ基本設定例

動的フィルタでLAN内の端末からインターネット接続を許可する例

インターネット側からのアクセスを基本的にすべて拒否しつつ、LAN内からのインターネット利用を基本的にすべて可能にする場合の設定例です。通常はインターネット側からの入力を拒否すると、サーバからクライアントホストに対する正当な応答も拒否することになってしまいます。 動的フィルタ機能を使用すると、クライアントからリクエストがあったときに限りアクセス先サーバからの応答を通過させるようなフィルタを自動生成させることができ、安全性の向上と設定工数の削減が可能です。
フィルタ計画(interface pppoe0)
direction action protocol src,srcport,dst,dstport state =Comment=
out pass tcpudp --- enable TCPとUDPの通信を許可
in pass icmp --- --- ICMPの通信を許可
in block --- --- --- パケットをすべて拒否

コマンド例

 1| # filter add DYNAMIC interface pppoe0 direction out action pass protocol tcpudp state 
enable
 2| # filter add ICMP interface pppoe0 direction in action pass protocol icmp
 3| # filter add DEFAULT interface pppoe0 direction in action block
1行目 pppoe0インタフェースから出力するTCPかUDPのパケットがあった場合に動的フィルタを生成します。
2行目 動的フィルタはTCPとUCPの通信にのみ対応しているため、ICMPなど他のプロトコルを使用する場合にはpppoe0インタフェースからの入力を個別に許可する必要があります。
3行目 pppoe0インタフェースから入出力されるパケットをすべて拒否します。
この設定例では、入力方向のパケットを許可する設定が無いため、通常は外部からの通信はすべて拒否します。LAN側からインターネット側へTCPかUDPの通信が発生すると、1行目のフィルタにより、通信相手への送信が可能になる動的ルールと、通信相手からの受信が可能になる動的ルールが生成されます。src/dst, srcport,dstportの指定で通信相手や利用可能サービスを絞ることも可能です。

ステータスの参照

動的フィルタが生成されているときの動作情報は下記の様になります。例ではdateコマンドを使用してNTP(UDP:123)の通信により動的フィルタが生成されています。
 1| # show status filter
 2| page 0 id DYNAMIC pass out log on pppoe0 proto tcp/udp from any to any script STA count 2
 3| page 1 id ICMP pass in log on pppoe0 proto icmp from any to any  count 82
 4| page 1 id DEFAULT block in log on pppoe0 proto any from any to any  count 126
 5| # date ntp
 6| # show status filter
 7| page 0 id DYNAMIC pass out log on pppoe0 proto tcp/udp from any to any script STA count 2
 8| page 1 id ICMP pass in log on pppoe0 proto icmp from any to any  count 38
 9| page 1 id DEFAULT block in log on pppoe0 proto any from any to any  count 53
10| page 2 ttl 180 id DYNAMIC-00000002 pass in log on pppoe0 proto udp from 10.0.0.1 port 123 to 172.16.0.1 port 123 script UPD count 1
11| page 2 ttl 180 id DYNAMIC-00000002 pass out log on pppoe0 proto udp from 172.16.0.1 port 123 to 10.0.0.1 port 123 script UPD count 0
1行目
~4行目
平常時の動作情報です。設定したフィルタと同様の情報のみ表示されます。このとき、インターネット側からのTCP,UDPの通信はすべて拒否されます。
5行目 dateコマンド(時刻合わせ)でNTPの通信を発生させます。
10行目
~11行目
クライアント(SEIL自身)からのNTPの通信が"DYNAMIC"のフィルタにマッチして生成された動的なpassフィルタの動作情報です。
(172.16.0.1はSEILのアドレス、10.0.0.1はNTPサーバのアドレス)
クライアントとサーバ間の通信が途絶えると消滅します。

その他フィルタ設定例

インターネット接続時に、インターネット側とLAN側とで通信することが一般的に好まれない通信を blockする例を紹介します。 基本ポリシーをblockとし、必要最低限の通信をpassしている場合には不要です。

外部ネットワークからのなりすまし(Spoofing)アクセスを防ぐ

 1| # filter add Spoofing_0 interface pppoe0 direction in action block src 127.0.0.0/8
 2| # filter add Spoofing_1 interface pppoe0 direction in action block src 10.0.0.0/8
 3| # filter add Spoofing_2 interface pppoe0 direction in action block src 172.16.0.0/12
 4| # filter add Spoofing_3 interface pppoe0 direction in action block src 192.168.0.0/16
 5| # filter add Spoofing_4 interface pppoe0 direction in action block src XXX.XXX.XXX.XXX/29
1行目 ループバックアドレス
2行目
~4行目
プライベートアドレス
3行目 払い出しを受けた割当IPアドレス(アドレス空間)
これらを送信元とするパケットがインターネット側から入ってきた場合には、誤った通信や悪意のある通信である可能性が高いため遮断します。

ファイル共有プロトコルやリモート管理プロトコルを遮断する

 1| # filter add RPC interface pppoe0 direction in/out action block protocol tcp dstport 135
 2| # filter add NETBIOS interface pppoe0 direction in/out action block protocol tcp dstport 137-139
 3| # filter add SMB interface pppoe0 direction in/out action block protocol tcp dstport 445
1行目
~3行目
LAN内で使用しており、インターネット側と疎通することが好ましくないサービスについては遮断しておきます。
Page Top