[ どうでもいいよね > 小細工PCいぢり > Kerio/Tiny Personal Firewall > もっと理解してKPFを使う ]

もっと理解してPersonal Firewallを使う

少しだけ詳しく書きます。
ここでの話しは基本的に全てのパーソナルファイアーウォールに共通のことです。

KPFを使う上で、ネットワークの基本と仕組みを知っておくと
効率の良いフィルタールールを作ったり、未知のプログラムに出会っても
フィルタールールで迷ったりする事がなくなります。

データのカプセル化とカプセル化の解除(逆カプセル化)を通じて
フィルタールールのエッセンスを説明します。

ネットワークの世界は社会と同じで、いくつかの階層に分けて考える方法がとられています。
今回はDARPAモデルという、TCP/IPの4階層を使って説明をします。

アプリケーション層
トランスポート層
インターネット層
ネットワークインターフェース層
(物理層)

※DARPAモデルによるTCP/IPの4階層

※上位・下位層の特徴
アプリケーション層は名前の通りソフトが通信するための方法を定義しています。
上位層(アプリケーション層)になるほど、アプリケーションを作るプログラマーしだいでいくらでも仕様を変更できます。
例えば画像はGIFで、文字はJISで、SSLで暗号化しながら通信する、といった仕様などなど。
KPFを使う上ではアプリケーション層はあまり気にする必要はありません。

ネットワークインタフェース層はより物理的な仕様を定義しています。
下位層(ネットワークインタフェース層やそれ以下の物理層)になると、国際基準によって規格が整備されています。
例えばLANケーブルのカテゴリ(種類)、実際に通信する際に送る、電気信号の送り方などなど。
KPFを使う上ではネットワークインタフェース層はあまり気にする必要はありません。

ネットワークを流れるデータはロシアの人形、マトリョーシカのように
上位にある層のデータはその下位層にあるデータでカプセルの様に包まれています。
「箱を空けたら、また箱」という状態です。

KPFを使いこなす上で重要なのは、アドレスやポート、プロトコルは何のためにあるか、
またそれはどの層で働いているかと言う事を理解してフィルタールールを設定する事です。
ただ闇雲に「なんとなく設定して動けばいい」でやり過ごし続けると
無駄なルールを作ってしまったり、新しいアプリケーションを入れたりOSを替えたりすると
どのように設定すればよいのか分からずに教えてクンになってしまいます。

カプセル化とカプセル化解除のプロセス

1台のパソコンがホームページを見るためにブラウザを開き、
http://www.yahoo.co.jp/index.html へ接続する場合を想像してみましょう。
パソコンとyahooにあるサーバとの間にはどんなパケットがやり取りされるのでしょうか。

このページでは、インターネットなどで流れる情報の単位を「パケット」としましょう。

パケットにはさまざまな情報が含まれます。
パケットの行き先や、どのプログラムのパケットか。そして誰のパケットか、などなど。
メールを送る時も、生の本文だけでは送りようがないのと同じです。ルールが必要です。

それではどうやって送るか?なのですが、先ほど述べたようにネットワークは階層構造です。
階層構造を実現するために 、データを送る時はカプセル化を行い、データが着信した場合はカプセル化解除を行います。
カプセル化は主にOSが担当していると思っていいでしょう。

カプセル化

ブラウザでホームページを開く時のプロセスを見てみましょう。

【自分のパソコン → Webサーバ】への通信が発生します。

1.アプリケーション層 (OSI7階層の上位層)

目的のデータ

ブラウザが目的のデータを作成します。
今回の場合、目的のデータには「HTTPリクエストヘッダ」という
『index.htmlというファイルを送ってください。』というコマンドが入っています。

2.トランスポート層

TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ
※カプセル化のイメージ

次に、TCP/UDPヘッダとトレーラで目的のデータをカプセルの様に包みます。
上に示した図がカプセル化のイメージです。
今回の場合、TCP/UDPヘッダには「TCPを使います。」という識別番号と「ポート番号は80番です。」が入っています。

KPFは「TCPとUDP、どちらを使っているのか」と「TCP/UDPヘッダのポート番号」をフィルタールールと一致するか調べます。

フィルタルールで、たとえば「ブラウザが使うプロトコルがTCPで、送信先のポート番号が80番」と設定するのは上記の仕組みがあるからです。
どうしてポート番号が必要なのか?は別の機会に説明したいと思います。

3.インターネット層 (ネットワーク層)

IPヘッダ
TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ
IP
トレーラ

インターネット層では送信先のIPアドレスと送信元のIPアドレスがカプセル化されます。
手紙を出す時に宛先と差出人の住所を書くのと似ています。

今回の場合、IPヘッダには「送信先アドレスは211.14.15.5(www.yahoo.co.jp)、送信元アドレスには自分のパソコンのIPアドレス」が入っています。

KPFは「送信先アドレス」と「送信元アドレス」をKPFのフィルタールールと一致するか調べます。

フィルタルールで、「送信元アドレス」と「送信先アドレス」を設定するのは上記の仕組みがあるからです。
IPアドレスってなんなの?は別の機会に説明したいと思います。

4.ネットワークインターフェース層 (データリンク層)

イーサネット
ヘッダ
IPヘッダ
TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ
IP
トレーラ
イーサネット
トレーラ

物理的に一番近くにある機器へのMACアドレスと自分のパソコンのMACアドレス等が入りますが、
イーサネットヘッダの実際の中身については、KPFの範疇ではありません。

(5).ハードウェア (物理層)

電圧・電磁波・光などを使って、遠くにある機器へ物理的な信号を送ります。
モデム・NIC(LANカード)はカプセル化したデータを信号に変換します。
これも、KPFの範疇ではありません。


カプセル化して送信したパケットがWebサーバに届きます。
Webサーバはカプセル化の解除を行い、目的のデータを読み込みます。

相手サーバは届いたパケットのポート番号を調べ、80番と分かるとWebサーバプログラムへ目的のデータを渡します。
また、IPヘッダにある「送信元アドレス」から、誰に返信するべきか分かります。

そして、Webサーバが自分のパソコンに返信してきました。
実際の自分のパソコンに着信した場合のカプセル化解除を考えてみましょう。


カプセル化の解除

【Webサーバ → 自分のパソコン】への通信です。
ようするに、上で説明した「カプセル化」の逆のことをするだけです。

(0.)ハードウェア (物理層)

電圧・電磁波・光などを使って、離れた機器から物理的な信号が送られてきます。
モデム・NIC(LANカード)はその信号を解析してネットワークインターフェース層へ渡します。

1.ネットワークインターフェース層 (データリンク層)

イーサネット
ヘッダ
IPヘッダ
TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ
IP
トレーラ
イーサネット
トレーラ

あなたのパソコンはイーサネットヘッダを調べて自分のパソコン宛か調べます。
LAN上などでは他のパソコンのデータが着信することもありますが、自分宛ではないデータの場合はそのフレームを破棄します。
自分のパソコン宛であった場合は着信フレームを受け取り、イーサネットヘッダとイーサネットトレーラを外して次にIPヘッダの処理を行います。

KPFはイーサネットヘッダについては特に関与しません。

2.インターネット層 (ネットワーク層)

IPヘッダ
TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ
IP
トレーラ

IPヘッダには「送信元アドレス」や「送信先アドレス」などが含まれています。

ここからKPFの出番です。
KPFは 「送信元アドレス」と「送信先アドレス」を解析してフィルタールールと一致するか調べます。

3.トランスポート層

TCP/UDP
ヘッダ
目的のデータ
TCP/UDP
トレーラ

TCP/UDPヘッダーには、そのセグメント(パケット)が 「TCPなのか、UDPなのか」についての識別番号や
そのセグメント(パケット)の 「ポート番号」などが含まれています。
これらの情報を取得したコンピュータは、その処理に適切なプログラムを動かします。
そしてTCP/UDPヘッダ・トレーラを外して上位層へデータを渡します。

ポート番号はアプリケーションの識別番号だと思ってください。
例えば、ブラウザからホームページを見るときはHTTPというプロトコル(アプリケーション)を使いますが
HTTPの送信先ポート番号は基本的に80番を使います。
HTTPの送信元ポート番号は、ブラウザを複数個開いた時に個々のブラウザを識別するためにブラウザが任意に決めます。

KPFは「送信先ポート番号」と「送信元ポート番号」、及び「TCPなのか、UDPなのか」を調べます。

4.アプリケーション層 (OSI7階層の上位4層)

目的のデータ

全てのヘッダ・トレーラを外して、目的のデータを取得します。
ブラウザがホームページを表示するために、HTMLのソースを解析するのは上記のようなヘッダ・トレーラを外した後です。

 

プログラム制御によるフィルタリング

以上を踏まえた上でKPFではさらに、プログラム制御によるフィルタリングが可能です。
例えると、ホームページを見るためのウェブブラウザは基本的に送信先ポートに80番を使いますが
プログラム制御を使うことで、ポート80を使う複数異種のブラウザであっても
「IEでは通信できても、Netscapeでは通信できない」といった細かいフィルタールールを作成できます。
これは単に「80番ポートに向かって通信できる」と言った静的なルールでは実現できない方法です。

 

KPFはネットワークインターフェース層とインターネット層の間でパケットをフィルターします。

アプリケーション層
トランスポート層
インターネット層
Kerio Personal Firewall low-level driver
ネットワークインターフェース層
※下から二番目にKPFがある

ただし、プログラムが送る実際のデータは分からないので
それについてはそのソフトについて少しだけ研究する必要があるでしょう。
もしくはIDSの出番?と言ったところでしょうか。

基本は「必要であれば許可し、分からなければ拒否して様子をみる」です。


[ Tiny Personal Firewall ] [ 小細工PCいぢり ]