Q

セキュリティ上の弱点やウイルス/ワームの侵入がないか調べるために,社内のマシンが開いている通信ポートを調査したいと思っています。簡単に調べられる便利なツールはありませんか?

A

ローカルのマシンについては,標準のnetstatコマンドで開いている通信ポートを調査することができます。しかし,ネットワーク経由で他のマシンについても調べたい場合はマイクロソフトがWebサイト上で無償公開している「Portqry」というツールが便利でしょう(該当サイト)。


△ 図をクリックすると拡大されます
図6●コマンド・プロンプトからPortqryをローカル・マシンについて実行するとポートを開いているサービスなどが分かる
 Portqryは,コンピュータで開いている通信ポートを調べるポート・スキャン・ツールです。コマンド・ラインから利用するツールで,ローカルで利用する場合とリモートで利用する場合で動作が大きく異なります。

 まずローカルでは,「portqry -local」と実行するとマシンで開いているTCPとUDPのポートの一覧と,各ポートを開いているプロセスID,実行ファイル名,サービス名などnetstatより詳しい情報が表示されます(図6)。


Portqryはリモートでも利用可能
 Portqryは,ローカル・マシンについて詳しく調査できるだけでなく,ネットワーク上の他のマシンについても開いているポートをスキャンすることができます。例えば,「portqry -n192.168.1.1」のようにIPアドレスを指定したり,「portqry -n server1」のようにマシン名を指定したりすれば,リモートのマシンについてポートの状態を調査できます。

 マシン名だけの指定ではTCPの80番ポートしか調査しませんが,「-e」スイッチで特定のポートを,「-r」スイッチでポートの範囲を指定して調べることができます。例えば,192.168.1.1というIPアドレスのマシンについて10~100番までのポートを調べる場合は以下のように入力します。

portqry -n 192.168.1.1 -r 10:100

 調査結果は,通信ができた「LISTENING」,通信できなかった「NOTLISTENING」,無反応だった「FILTERED」の3種類で表示されます。

 Portqryは,「-p」スイッチでUDPやTCPとUDPの両方について調べられます。これにより,例えばUDPを使うLDAP(ライトウェイト・ディレクトリ・アクセス・プロトコル)やDNSについても調べることができます。

典型的なサーバー向けにGUIを提供
 Portqryは基本的にコマンド・ラインから利用しますが,GUIから操作する「Portqryui」という関連ツールもマイクロソフトから無償で提供されています(ダウンロード)。


△ 図をクリックすると拡大されます
図7●PortqryをGUI画面から実行するツールも公開されている
 このPortqryuiツールの一番上のフィールドにマシン名またはIPアドレスを入力し,[Query Type]で[Manuallyinput query ports:]を選んでポート番号とTCP/UDPの種類を指定すれば,それに基づいてPortqryを実行して結果を表示してくれます(図7)。

 Portqryuiでは典型的なサーバーの用途を想定して,ポートの状態をまとめて調査することも可能です。あらかじめ定義済みのものとしては,Domains and Trusts(ドメインと信頼関係),IPSec,ネットワーク,SQL Server,Webサービス,Exchange Server,Net Meetingなどがあります。例えば,SQL Serverを選べばUDPの1434番とTCPの1433番といったSQL Serverの通信で使っているポートをまとめて調査します。

 この用途別に調査するポートはconfig.xmlというXMLファイルに定義されており,これを編集すれば自分の環境に合わせたカスタムのスキャン・パターンが作れます。

John Savill's FAQ for Windows