Copyright © 2000-2005 eazyfox. All Rights Reserved.
HOME| Firewall | Security| 製品紹介| SecuTool| Forest| Hello| Link| 掲示板| 雑談掲示板| SiteMap| Contact
Home > Firewall製品紹介 > PktFilter

Project PktFilter - PktFilter

PktFilterはWin32で動作するパケットフィルタ型FirewallでWindows 2000/XP/Server 2003を対象としている。いまだにベータ版であるがSourceForgeで開発されておりこちらから最新版がDownloadできる。

インストールモジュールは無くDownloadしてきたZipモジュールを展開するだけ。展開後にサービスへの登録とサービスの設定を行う必要がある。まずZipを展開すると

  • 「doc」は説明書などのドキュメントが入っている。
  • 「pktctl」は設定・制御プログラムのpktctl.exeが入っている。
  • 「pktfltsrv」にはFirewallの実行モジュールが入っている

サービスへの登録

PktFilterを実行させるには「PktFilter」をサービスに登録する→PktFilterのサービスを起動するという手順をとる。まずサービスへ登録しよう。コマンドラインからpktfltsrvのフォルダに移動して

pktfltsrv.exe -i ルール定義ファイル名 ログファイル名

と入力するだけである。筆者は導入時にテストを行う際、何度もこのコマンドを入力するのが面倒だったのでバッチファイルを作っていた。ここでは
"C:\Program Files\PktFilter\pktctl\rules.txt"・・・ルールを定義したファイルのフルパスのファイル名
"C:\LogData\Packet Filter\PktFilter.log"・・・ログのフルパスのファイル名
と定義している

CD C:\Program Files\PktFilter\pktfltsrv
pktfltsrv.exe -i "C:\Program Files\PktFilter\pktctl\rules.txt" "C:\LogData\Packet Filter\PktFilter.log"
pause

サービスの定義と起動

登録されたPktFilterのサービスの定義を変更する。これはStartUpで自動起動させるためと、何らかのエラーが発生したときにサービスを再起動させるためである。

サービスマネージャで「Stateless Packet Filter」を選ぶ。「スタートアップの種類」が「手動」になっているので「自動」に変更する。これでWindows起動時にPktFilterが自動起動するようになる。

次に「回復」タブを選んでエラー時の対応を設定する

PktFilterがエラーとなることは筆者は経験していないのだが万が一のためにエラー時はサービスを再起動するように設定する。「何もしない」を「サービスを再起動する」に変更するだけ。左図の例では一日2回までのエラーであれば再起動しているが、3回目はそのまま終了としている。「その後のエラー」も再起動にしてもなんら問題はない。
いままでPktFilterサービスの終了を経験していないので、あまり気にしなくてもいいかもしれない。もしOSその他の相性でサービスが停止するようだとエラー時の再起動は必須となる。なおサービスの再起動も0分の設定でもよい。

これでPktFilterの準備は完了である。PktFilterのデフォルトルールではすべてのパケットがDropされるのでサービスが起動しているのならネットワークが使えない状態になっているはず。

ルールの設定

ではFirewallの要であるルールの定義を行う。その前にPktFilterはNIC(ネットワークインターフェイスカード)にeth0,eth1と識別のための番号を使う。この番号を知る必要があるので設定・制御プログラムのpktctl.exeを実行する

C:\Program Files\PktFilter\pktctl>pktctl.exe -I
eth0: (SiS NIC SISNIC): 192.168.1.1
eth1: (PCI Bus Master Adapter): 202.225.xxx.yyy
Pktctl.exeに"-I"の引数を与えて実行する。筆者のPCはNIC2枚挿なのでeth0とeth1の2つが表示される。通常はeth0だけだと思われるが確認のために必ず行うほうがよい

NICを2枚以上挿入している場合、このeth0やeth1は再起動すると入れ替わることがある。NICの入れ替えやドライバの更新を行ったときには必ずpktctl.exeを実行して確認しなければいけない。(そのためeth0とeth1を入れ替えたルールを作っておくと焦らなくてすむ・・・というか筆者が大変焦ったので後から対策として用意しておくことにした)

では肝心のルールを作成してみよう。ルールを作るうえで基本的な設定は

# drop packets composed of small fragments
option small_frags on eth0
option small_frags on eth1
フラグメント化(細分化)されたパケットはDropする
# default behavior = deny everything
block in on eth0 all
block out on eth0 all

block in on eth1 all
block out on eth1 all
未定義のすべてのパケットをDropする。

ここでは細分化されたパケットの拒否とルールに未定義のパケットをDropする指定を行う。ルールには当然Dropの指定を記述してもいいのだが、慣例として許可するルールのみ記述を行い、ルールに一致しないパケットはすべてDropすることとする。

ルール記述の文法

Action 方向 インターフェイス番号 プロトコル from IP from Port to IP to Port オプション
許可/遮断を設定する
pass/blockで指定する
inまたはoutを指定する
受信はin、送信はout
pktctl.exeで得られた番号。eth0、eth1... プロトコルを指定する。
tcp.udp,icmpとプロトコル番号
送信元のIPアドレスを指定。
単一のIPかサブネットで指定
送信元ポート番号 送信先のIPアドレスを指定。
単一のIPかサブネットで指定
送信先ポート番号 プロトコルがICMPのときはTypeが指定可能。TCPのときはestablishedが指定可能

ややこしいので例を挙げてみる。

pass out on eth0 proto tcp from any port = 80 to 192.168.1.0/24 port > 1023 established

設定項目 設定値 説明
Action pass 許可するルールということ
方向 out 出て行くパケットを指定する
インターフェイス番号 eth0 eth0のインターフェイスでルールを適用する
プロトコル tcp プロトコルはTCPなので"proto tcp"と指定する
from IP any 送信元のIPは特定しない。anyとする
from Port = 80 送信元のポートは80番を指定
to IP 192.168.1.0/24 送信先は192.168.1.0/24つまりLAN内のPCを指定している
to Port > 1023 送信先のポートは1024以上
オプション established establishedの指定はセッションが確立後のパケットのみ通過させるという意味。

ポートの指定は

= 単一のポートを指定する。"= 21"で21番ポートだけを指定したことになる
>= 〜以上のポートを指定する。
> 〜より大きなポートを指定する
<= 〜以下のポートを指定する
< 〜より小さいポートを指定する
>< ポートの範囲指定。"100 >< 200"で101〜199番のポートを指定したことになる

オプションのestablishedはTCPの接続要求であるSyn以外のパケットという意味になる。つまり指定しなければ「セッション開設要求」〜「セッションClose応答」までのすべてのフェーズのパケットが対象となる。establishedを付加すると「セッション開設要求」は該当せず「データ転送」〜「セッションClose応答」までが対象となる。

establisheの使い方の例は
・httpサーバを公開する場合
  pass in on eth1 proto tcp from any port > 1023 to any port = 80・・・(1)
  pass out on eth1 proto tcp from any port = 80 to any port > 1023 established・・・(2)
・外部のhttpサーバへのアクセスを行う場合
  pass out on eth1 proto tcp from any port > 1023 to any port = 80・・・(3)
  pass in on eth1 proto tcp from any port = 80 to any port > 1023 established・・・(4)

(1)は見知らぬIPから自PCの80番ポートへの着信を許可している。自PCが固定IPなら"to any"ではなくIPの指定も可能
(2)は自PCのhttpサーバから見知らぬIPへの応答を許可している。
(3)は自PCから外部のhttpサーバへの接続を許可している。
(4)は外部httpサーバから自PCへの応答を許可している。
このようにセッションの確立要求を含む発着信には"establishe"は指定しないが、セッション確立後の応答だけに限定するときに"establishe"を指定する。
実際にはPktFilterはSynフラグとAckフラグの有無でestablishを判断している。Syn無+Ack有=establishedということになる。

具体的な例として筆者が設定したフィルタルールを下記に示す。

サーバ機として公開用のhttpサーバとMailサーバがインストールされている。またルーターとして動作するためNICの2枚挿しでRRASのルーター機能を設定している。RRASがLAN側に対してはDHCPサーバとDNS-Proxyとして動作する。
Internet側はDHCPでグローバルIPを接続時に1つ割り当てられる。

# drop packets composed of small fragments
option small_frags on eth0
option small_frags on eth1

# eth0: (SiS NIC SISNIC): 192.168.1.1
# eth1: (VIA Ethernet Adapt): aaa.bbb.ccc.ddd
分割パケットはDropする。インターフェイス番号は間違えないためのメモとしてコメントしているだけ。
# default behavior = deny everything
block in on eth0 all
block out on eth0 all

block in on eth1 all
block out on eth1 all
基本はすべてDropする(両インターフェイス共)
##############################
# eth0 rules Local network #
##############################
#DHCP Server
pass in on eth0 proto udp from any port = 68 to any port = 67
pass out on eth0 proto udp from any port = 67 to any port = 68
ここからeth0:LAN側のインターフェイスの設定。
最初にDHCPサーバとして動作させるための設定でサーバとローカルPC間で67と68のudpを許可する。
#DNS Proxy
pass in on eth0 proto udp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53
pass out on eth0 proto udp from 192.168.1.1 port = 53 to 192.168.1.0/24 port > 1023
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53
pass out on eth0 proto tcp from 192.168.1.1 port = 53 to 192.168.1.0/24 port > 1023
DNS Proxyとして内部PCからDNS問い合わせと回答を許可する
#http https
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port = 80
pass out on eth0 proto tcp from any port = 80 to 192.168.1.0/24 port > 1023 established
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port = 443
pass out on eth0 proto tcp from any port = 443 to 192.168.1.0/24 port > 1023 established
内部PCから外部http/httpsサーバへの接続要求と応答を許可する
#Smtp Pop3
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port = 25
pass out on eth0 proto tcp from any port = 25 to 192.168.1.0/24 port > 1023 established
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port = 110
pass out on eth0 proto tcp from any port = 110 to 192.168.1.0/24 port > 1023 established
内部PCから外部smtp/pop3サーバへの接続要求と応答を許可する
#passive FTP
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port = 21
pass out on eth0 proto tcp from any port = 21 to 192.168.1.0/24 port > 1023 established
pass in on eth0 proto tcp from 192.168.1.0/24 port > 1023 to any port > 1023
pass out on eth0 proto tcp from any port > 1023 to 192.168.1.0/24 port > 1023 established
内部PCから外部ftpサーバへの接続要求と応答を許可する。PASVモードで外部ftpサーバへのデータ転送を許可する
#################################
# eth1 rules Internet network #
#################################
#DHCP Server
pass out on eth1 proto udp from any port = 68 to any port = 67
pass in on eth1 proto udp from any port = 67 to any port = 68
Internet側インターフェイスの定義。最初はDHCPクライアントとして動作するための設定
#DNS
pass out on eth1 proto udp from any port > 1023 to any port = 53
pass in on eth1 proto udp from any port = 53 to any port > 1023
pass out on eth1 proto tcp from any port > 1023 to any port = 53
pass in on eth1 proto tcp from any port = 53 to any port > 1023
外部DNSサーバへの問い合わせと応答を許可する
10 #http https(Outside)
pass out on eth1 proto tcp from any port > 1023 to any port = 80
pass in on eth1 proto tcp from any port = 80 to any port > 1023 established
pass out on eth1 proto tcp from any port > 1023 to any port = 443
pass in on eth1 proto tcp from any port = 443 to any port > 1023 established
外部http/httpsサーバへの接続要求と応答を許可する
11 #http https(Inside)
pass in on eth1 proto tcp from any port > 1023 to any port = 80
pass out on eth1 proto tcp from any port = 80 to any port > 1023 established
自PCの公開httpサーバへの接続要求と応答を許可する
12 #Smtp Pop3(Outside)
pass out on eth1 proto tcp from any port > 1023 to any port = 25
pass in on eth1 proto tcp from any port = 25 to any port > 1023 established
pass out on eth1 proto tcp from any port > 1023 to any port = 110
pass in on eth1 proto tcp from any port = 110 to any port > 1023 established
外部smtp/pop3サーバへの接続要求と応答を許可する
13 #Smtp Pop3(Inside)
pass in on eth1 proto tcp from any port > 1023 to any port = 25
pass out on eth1 proto tcp from any port = 25 to any port > 1023 established
自PCの公開smtpサーバへの接続要求と応答を許可する
14 #passive FTP
pass out on eth1 proto tcp from any port > 1023 to any port = 21
pass in on eth1 proto tcp from any port = 21 to any port > 1023 established
pass out on eth1 proto tcp from any port > 1023 to any port > 1023
pass in on eth1 proto tcp from any port > 1023 to any port > 1023 established
外部ftpサーバへの接続要求と応答を許可する。PASVモードで外部ftpサーバへのデータ転送を許可する
15 # ICMP Type 0(echo reply)
#pass out on eth1 proto icmp from any to any icmp-type echorep
#pass in on eth1 proto icmp from any to any icmp-type echorep
# ICMP Type 3(Destination Unreachable)
pass out on eth1 proto icmp from any to any icmp-type unreach
pass in on eth1 proto icmp from any to any icmp-type unreach
# ICMP Type 4(Source Quench)
pass out on eth1 proto icmp from any to any icmp-type squench
pass in on eth1 proto icmp from any to any icmp-type squench
# ICMP Type 8(echo req)
#pass out on eth1 proto icmp from any to any icmp-type echo
#pass in on eth1 proto icmp from any to any icmp-type echo
# ICMP Type 11(ime Exceeded)
pass out on eth1 proto icmp from any to any icmp-type timex
pass in on eth1 proto icmp from any to any icmp-type timex
ICMPはDestination Unreachable(3)、 Source Quench(4)、Time Exceeded(11)の通過を許可する。ICMPのTypeはicmp-type+名前で設定できる
"echorep","unreach","squench"
"redir","echo","router_adv"
"router_sol","timex","paramprob"
"timest","timestrep","inforeq"
"inforep","maskreq","maskrep"

この定義ではNATルータとして動作するため内部PCから外部httpサーバへのアクセスなどはLAN側とinternet側の2回フィルタにかかることになる。LAN側のフィルタを無くしてもいいのだがスループットがそれほど変わらなかったので精神衛生上2重フィルタとした。

どうしても気になるのがPASVモードのFTPのルール。
pass out on eth1 proto tcp from any port > 1023 to any port > 1023←これでは万が一Spywareが仕組まれたときに外部へのアクセスを防げない。できればNATで20番を内部のPCに転送するようにしてアクティブモードで使用したほうがいいと思う。制御ポートは変更する必要が無いのでデータ転送用の20番のほうだけを次のように変更する。
pass in on eth1 proto tcp from any port = 20 to any port > 1023
pass out on eth1 proto tcp from any port > 1023 to any port = 20 established

サーバ機の構成上内向きと外向きの2種類の設定を行っているが、単にhttpサーバやsmtpサーバとして動作させるならグローバル定義のNo.1,2とNo.8以下の外向きの定義だけでよい。

外部からIPを詐称(Spoofing)して内部に侵入するのを防ぐために接続要求のIPアドレスを限定する設定があるので参考のために挙げておく。WAN側のインターフェイスに設定する。

* #Spoofing IP Deny
block in on eth1 proto tcp from 192.168.0.0/16 port > 1023 to any port any
block in on eth1 proto tcp from 172.16.0.0/16 port > 1023 to any port any
WAN側インターフェイスにプライベートアドレスでの接続を拒否する

pktctl.exeのコマンド

設定制御用のpktctl.exeは引数を設定することで下記のような動作を行う。

ルール追加 -a [ルール] ルールを1行追加するときに使う
ルール削除 -d [ルール] [インターフェイス番号] 指定したインターフェイスのルールを1行削除する
ファイルからルール適用 -f [ルール定義ファイル名] ルールファイルからルールを追加する
コマンドモード -i インタラクティブモードらしいが、できることは他のコマンドと同じ。
ルールの再設定 -F [ルール定義ファイル名] 指定のルールファイルでルールを再設定する(これまでのルールは消える)
ルールの一覧 -l [インターフェイス番号] インターフェイスごとのルールをリスト表示する
番号付ルールの一覧 -L [インターフェイス番号] インターフェイスごとのルールを"rule nnn"の番号付でリスト表示する
状態表示 -s [インターフェイス番号] 統計情報を表示する
詳細な状態表示 -S [インターフェイス番号] 詳細な統計情報を表示する。ルールごとにマッチした数が表示される
ルールの再設定(NIC毎) -Fa [インターフェイス番号] 指定のインターフェイスのルールを再設定する(これまでのルールは消える)
NIC番号の表示 -I NICの番号表示

実際にDosウィンドウで実行してみると

C:\>pktctl.exe -L eth0
# global options
option small_frags on eth0

# default policy
block in on eth0 all
block out on eth0 all

# input rules
rule 1: pass in on eth0proto udp from any port = 68 to any port = 67
rule 2: pass in on eth0proto udp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53
rule 3: pass in on eth0proto tcp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53
 
# output rules
rule 128: pass out on eth0proto udp from 192.168.1.1 port = 67 to any port = 68
rule 129: pass out on eth0proto udp from 192.168.1.1 port = 53 to 192.168.1.0/24 port > 1023
rule 130: pass out on eth0proto tcp from 192.168.1.1 port = 53 to 192.168.1.0/24 port > 1023
番号付のルール一覧
rule xx:というのが各ルールの前についている。一覧はInputとOutputに分かれて表示される
C:\>pktctl.exe -S eth0
Interface: eth0
Global:
Fragmented packets dropped : 0
Input filters:
Default action: block
Active filters: 10  ←有効になっているルールの数
Dropped packets: 4827  ←ドロップしたパケット数
Details of rules matches:
pass in on eth0proto udp from any port = 68 to any port = 67 : 1400 matches
pass in on eth0proto udp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53 : 4932 matches
pass in on eth0proto tcp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53 : 0 matches
次に状態表示。各ルールの後ろにxxxx matchesと一致した数が表示される。DNS問い合わせはUDPばかりだな・・・

状態表示でルールにマッチした数がわかるので数日運用してみてマッチ数が0であれば該当ルールは不要として削除したほうがいいと思う。ルール数は少ないほど管理も楽だし、負荷も少ないからだ。

ログの表示

サービス登録時にログファイルを指定しているのでDropしたパケットのログが指定のフォルダに出力されている。

03/20/2004 18:00:13.582 eth1 @0:0 b 81.168.90.184 -> 202.225.243.xxx PR icmp len 20 92
03/20/2004 18:01:16.021 eth1 @0:0 b 218.162.127.105,1995 -> 202.225.243.xxx,445 PR tcp len 20 48 -S

こんな感じ。内容は

03/20/2004 日付
18:01:16.021 時間
eth1 インターフェイス番号
@0:0 適用したルール番号。ここでは該当ルール無しなので0
b Blockの意味。ちなみにAllowログは無い
218.162.127.105,1995 FromのIPとポート。218.162.127.105がIPで1995がポート
202.225.243.xxx,445 toのIPとポート。202.225.243.xxxがIPで445がポート
PR tcp プロトコル。TCPかUDPかICMPが表示される
len 20 ヘッダのレングス。20バイトということ
48 パケットのレングス。48バイトということ
-S Synフラグが付いていたことをあらわす

残念ながらICMPのログはタイプとコードがわからない。説明書にはタイプの記載があるのだが、現行バージョンでは見たことが無い(説明書には判定できたときだけと書いてあるせいかな)

その他の情報

・PktFilterのログ出力について

PktFilterはログの出力を行うために4096バイトのLog出力用バッファを確保している。しかし短時間に猛烈な数のDrop対象のパケットが飛んできたときにはバッファからログファイルへの出力が追いつかず、バッファからあふれてしまうケースが考えられる。このときにはログに

%u packets logged, %u packets lost, used buffer size was %u, total buffer size is %u(%uは各項目の数値)

が出てくるので、レジストリを編集してログサイズを拡張したほうがよい。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PktFilter\
  キー値: LogBufferSize
  設定値:ログバッファサイズ(バイト) 規定値4096

WindowsXPで使用するとログに何もでないという現象が発生する。メーリングリストに流れた情報で、筆者が確認したところうまくいかなかったのだがトライしてみる価値はあるかと思う。その方法はダイナミックリンクライブラリ・リダイレクションと言うらしい

・PktFilterのサービス起動順序の変更について

PktFilterは起動からフィルタが適用されるまで2分かかるということが言われている。これを少しでも早くするためにサービスの依存関係を定義するという情報があったので記載しておく。筆者はまだ試していないので効果は不明。

この情報はhttp://assarbad.net/stuff/pktfilter_inst.txtから引用した。

必要なツール
LoadOrder from http://www.sysinternals.com/
Service Manager from http://www.nttools-online.de/

"HKLM\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder"にPNP_TDIとTDIがあることを確認する

LoadOrderを起動して右上にある「Service」と「Device」の選択は"Service"を選ぶ。リストにはサービスが起動される順に一覧で表示される
LoadOrderを使うとPNP_TDI(TCP/IP,NBT)→TDI(DHCP,DNS・・)の順でLoadされることがわかる。

つぎにサービスに依存関係を設定する。

Service Managerで"Stateless Packet filter"を選んでPropertiesを見る。ここでは「Start Type」がAutomaticになっていることを確認して「Group」に"TDI"を設定する。

次に依存関係を設定する

Dependencies→Deviceを選択する。リスト中の「TCP/IPプロトコル ドライバ」をダブルクリックする。すると「Action」に"add"が現れる。
その後同様にGroupを選択してリストの"PNP_TDI"をダブルクリックする。これで変更終了。「適用」をクリックしてから「OK」でメイン画面に戻る。
次に右上の「Service」と「Device」の選択を"Device"にして"IP Traffic Filter Driver"を選択する。
ここでは「Group」に"PNP_TDI"を設定する。

つぎにRegeditでレジストリを編集する。このレジストリの編集が終了するまでは決してRebootしてはいけないそうだ。

  1. "HKLM\SYSTEM\CurrentControlSet\Services\PktFilter"にDWORDで"Tag"のキーを追加する。設定値は"1"。
  2. "HKLM\SYSTEM\CurrentControlSet\Control\GroupOrderList"にBinaryの"TDI"を無ければ追加する。
  3. TDIの値に 01 00 00 00 01 00 00 00 を設定。"01 00 00 00"はDWORDで"1"を意味する。

これでTDIグループのなかでPktFilterのLoad順序が1に設定される(らしい)。あとはRebootして完了と言うことだ。

・レジストリをいじるのはどうしても不安だがログを何とかしたいという方へ

事前に試してみれば難しいことではないのだが、やっぱりレジストリをいじるのは不安だという方は下記のバッチを参考にしてみてください。一時的にInternetとの接続を無効にするので2分間は外部から接続できなくなりますがログの改名を行います。

echo off
ipconfig /release
net stop "Stateless Packet Filtering"
set Logname=%DATE:~2,4%%DATE:~7,2%%DATE:~10,2%
set LogFile=%Logname%.log
D:
cd "D:\LogData\Packet Filter Log"
ren PktFilter.log %LogFile%
net start "Stateless Packet Filtering"

sleep.exe 130
ipconfig /renew

プロバイダから割当てされたIPを放棄にする
PktFilterのサービスを停止する
ログファイル用のファイル名(日付)取得
ログファイルをyyyymmdd.logとする

ログファイルのフォルダに移動
現在のログファイル名を変更
PktFilterのサービスを起動

130秒間なにもしない
プロバイダからIPを取得する

やっていることはPktFilterのサービスの停止・起動とログファイルの名前変更です。筆者の環境はCATVなのでNT系のipconfig.exeでDHCPで割り当てられたIPを放棄して一時的に接続できない状態にしています。ipconfig /renewでIPアドレスが変わる可能性があるのでDDNSを使った環境であればアドレスの更新が必要になります。sleep.exeはよくあるスリープするだけのモジュールです。

・CGI起動時のタイムラグ

NAT(RRAS)+PktFilterでhttpサーバを構築して掲示板のCGIを動作させたときにリクエスト→結果表示まで5〜10秒もかかる現象が出た。PktFilterを停止すると1秒もかからないで結果が表示される。原因を調べたところNICの接続ネゴシエーションがAutoになっていると再現することがわかった。現在は100MのFull Duplexに設定して解決している。

・WindowsのRRAS(Routing and Remote Access Service)との共用

PktFilterはRRASのパケットフィルタ機能と同じドライバ(API)を使用しているのでRRASを使ってルーター等を構成するときにはRRAS側のパケットフィルタを設定してはいけない。もし設定するとドライバをCallするときに衝突が発生しハングアップする可能性がある。またRRASをインストールしているだけでイベントログ(システム)に"RRAS service is running and may conflict with Stateless Packet Filtering service"が 出力されるが気にしなくてよい。

・感想

実際にPktFilterを運用開始して3ヶ月以上経過したが、サービスが実際に停止したのは同一ISPの他のユーザーからポートスキャンとWebサイトへの攻撃を同時に受けたときの2回だけであった。PktFilterのドライバの問題なのか、RRASとの絡みなのかは判断できていないのでPktFilterが弱いとは思っていない。(以降6ヶ月止まることなく動いている)
また毎日ログの切り替えを行っているが、サービスの再起動を行っている最中にポートスキャンを試みたがフィルタの適用に2分かかることもなく数秒間で復帰するようである。

・Firewall製品紹介に戻る