運用
常時接続時代のパーソナル・セキュリティ対策(第2回)

8.パケット・フィルタの設定(4)

デジタルアドバンテージ
2001/01/17


 次は、いよいよルールに沿ってフィルタを設定する。まず外向きのTCP接続はすべて許可するが外部からの接続要求は拒否する。ただしソース・ポート番号が20番(FTPのデータ・ポート)の接続要求だけは許可する(次のリスト1行目と2行目)。

 UDPは、DNS(ソース・ポート:53番)、BOOTP/DHCP(ソース・ポート:67番と宛先ポート:68番)、NTP(ソース・ポート:123番)の3つを許可する(3〜5行目)。

 ICMPは、Echo(type:8)、Echo Reply(type:0)の2つだけを許可する(6〜7行目)。

1: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp-est srcport=0 dstport=0
2: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=tcp srcport=20 dstport=0
3: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=53 dstport=0
4: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=67 dstport=68
5: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=udp srcport=123 dstport=0
6: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=0 code=0
7: add filter name="インターネット 接続" filtertype=input srcaddr=0.0.0.0 srcmask=0.0.0.0     dstaddr=0.0.0.0 dstmask=0.0.0.0 proto=icmp type=8 code=0
※先頭の1:などは説明のために付けた行番号なので実際には入力する必要はない。また、表示の都合上1行が複数の行に分かれているが、実際には1行で入力しないとエラーとなる。以上のコマンド列を ここ に用意したので、テキストをすべて選択、コピーして、netshのコマンドラインに貼り付けると実行できる。ただしあらかじめ“routing ip”コンテキストに変更しておくこと。

 これらのルールはかなり複雑に見えるかも知れないが、よく見ると簡単な構造であることが分かる。

 「name="インターネット 接続" filtertype=input」は、先ほどのset filterコマンドと同じであり、インターネット側のインターフェイスのインバウンド・フィルタを設定することを表している。

 「srcaddr=0.0.0.0 srcmask=0.0.0.0 dstaddr=0.0.0.0 dstmask=0.0.0.0」は全コマンドに共通であるが、パケット中のソースIPアドレスと宛先IPアドレス(およびそれらのネットマスクの値)を表している。これらはすべて0なので、どんなIPアドレスにもマッチする。つまりIPアドレスは任意(関知しない)ということである。もともとインターネット側のIPアドレスはDHCPで割り当てられるので不定であり、特定の値に限定することはできない。もし固定的なIPアドレスを割り当てているのなら、その値をこの宛先アドレス部分に記述することにより、より限定的な接続のみを許すように設定できる。

 その次にある「proto=」はネットワークのプロトコルの種類を表し、tcp/tcp-est/udp/icmp/any、および数値が指定できる。これらのうちtcp/udp/icmpはそれぞれのプロトコルを表すが、それら以外のプロトコルの場合は数値で指定する。anyはどんなプロトコルでもかまわないことを表す(anyは、IPアドレスだけで例外ルールを決めるような場合に使用する)。tcp-estは、接続が「確立済み(established)」のTCPコネクションのみを表す。「確立済み」とは、以下のようなTCPにおけるパケットのやり取りのうち、一番最初のSYNのみのパケットを“除いた”パケットを表す。つまり2番目以降のパケットすべてのことを指す。インバウンドのパケット・フィルタにおいて、確立済みのTCPパケットだけを許可するということは、言い換えると、TCP通信の先頭にあるパケットは受け付けない、ということである。これは結局、外部からの接続要求(TCPのアクティブ・オープン)を拒否しつつ、内部から外部への接続はそのまま通すという意味になる。

TCPコネクションの確立

TCPはステートフルな(状態を持つ)通信プロトコルである。サーバ側とクライアント側(ここでいうサーバ/クライアントとは、TCPの接続を待ち受けする側と呼び出す側のこと)の2つがきちんと区別されており、どちらから接続要求を出すかによってサーバになったり、クライアントになったりする。サーバ側では、あるポートに対して待ち受け(パッシブ・オープン)しており、そこにクライアント側から接続要求を送ると(アクティブ・オープン)、通信が開始される。全二重通信をサポートしているので、SYNを送ってACKを待つのは、両方の側から行う必要がある。「proto=tcp」とするとこれらすべてのパケットにマッチするが、「proto=tcp-est」とするとA以降のパケットにのみマッチする。
  クライアントからサーバに対して、SYNを送って、TCP接続の開始を要求する。
  サーバ側はSYNに対してACKを送り、受け付けたことを表明する。と同時に、サーバ側からクライアント側へのSYNも送る。
  クライアント側からサーバ側へ、SYNに対するACKを送る。この3回のやり取りで、TCPの接続が確立する。

 「srcport=nnn dstport=mmm」は、それぞれソース・ポート番号と宛先ポート番号を表している。「0」ならば任意のポートを表すが、そうでなければ、特定のポート番号を持つパケットのみを表すことになる(ポート番号として、ある範囲を表すような指定はできない。複数のポートをフィルタリングしたい場合は、ひとつずつルールを追加する必要がある)。ただしICMPプロトコルの場合は、srcportとdstportではなく、ICMPのtypeとcodeを使う。

省略形式コマンドによるフィルタ設定

 以上のコマンドをnetshで実行すればパケット・フィルタが設定されるが、実際にこのような長いコマンド列を入力するのは大変なので、先ほどのように省略形式を使ってみよう。

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 tcp-est 0 0
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 tcp 20 0
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 udp 53 0
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 udp 67 68
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 udp 123 0
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 icmp type=0 code=0
OK

routing ip>add filter "インターネット 接続" input 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 icmp type=8 code=0
OK

routing ip>
 以上のコマンド列を ここ に用意したので、テキストをすべて選択、コピーして、netshのコマンドラインに貼り付けると実行できる。ただしあらかじめ“routing ip”コンテキストに変更しておくこと。

 このように、省略形を使うと容易に入力することができるが、1つだけ注意点がある。最後の2つのコマンドはICMPに関するフィルタであるが、ここでは「type=」と「code=」を省略することができない(ヘルプ・メッセージには省略できるように記述されているにもかかわらずである)。


 INDEX
  [運用]常時接続時代のパーソナル・セキュリティ対策(第2回)
    1.Routing and Remote Accessサービスとその使い方(1)
    2.Routing and Remote Accessサービスとその使い方(2)
    3.Routing and Remote Accessサービスとその使い方(3)
    4.Routing and Remote Accessサービスとその使い方(4)
    5.パケット・フィルタの設定(1)
    6.パケット・フィルタの設定(2)
    7.パケット・フィルタの設定(3)
  8.パケット・フィルタの設定(4)
    9.パケット・フィルタの設定(5)
   10.パケット・フィルタの設定(6)
 
 運用


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間