戻る目次次へ

WinXPをネットから隔離して、不便にして安全に運用しよう

前回は、「WinXPをネットから隔離して仮想マシンの上で運用しよう」ということで、ネットアクセスはすべてLINUX上で行う設定方法について記載しました。
しかし、非力なPCでは、ホストマシンとしてXP運用は可能でも、仮想マシンのXPでは動きがギクシャクして実用に耐えない場合があります。
そこで、本稿では、完全にオフラインではありませんが、 メールだけができる「実質オフラインWinXP」の実現方法について説明します。

・WinXPだけでなく、古いWin2000でも可能です。
・ネットワークプリンタもホワイトリストに加えれば、印刷もできます。
・社内のファイルサーバーをホワイトリストに加えれば、ファイルの共有も可能です。

1、実質的にオフラインでWinXPを使い続ける

具体的には、パケットフィルターにより、WinXPのOS本体に行く前に、メール関係以外のパケットを開封せずにあて先だけ見て廃棄して、実質オフラインのWinXPを実現します。

インターネット上での通信はIPパケット((Internet Protocol)で行われています。
ネットにつなぐことによりPCが被害を受けるのは、IPパケットを送受信することにより生じます。
しかし、IPパケットは単なる「データを包み込む小包」ですので、単純にIPパケットを送受信しただけで被害が発生することはありません。IPパケットを開封して、中身を解釈して、悪意あるプログラムが実行されることで初めて、被害が発生することになります。
WindowsというOSは、ある意味賢いので、ソフトウエアのアップデートのお知らせや、PCの状態を送信して、最適なプログラムを自動的にダウンロードしてインストールするなど、利用者の知らないところで、IPパケットを開封して、中身を解釈して、いろいろな処理を行っています。
オフラインにするということは、これらのサービスの恩恵を放棄するという意味で「不便」さを受け入れるということです。その代わりに、PC遠隔操作、スパムの踏み台など、インターネット経由の恐怖からは開放されることになります。

2、ホワイトリストにある送受信に限定

メール関連のパケットのIPアドレスをホワイトリストに登録して、パケットフィルターを起動します。

これだけで、登録したアドレス(ホワイトリスト)以外のパケットは送受信ともに廃棄しますので、WinXPのOS本体が勝手にネットにアクセスすることはありません。この環境で、安心できる相手とだけ通信をして、受信した内容が安全であることを確認しながら運用すれば、リスクを未然に防げるわけです。

3、準備するもの

pktFilter
ダウンロードして解凍して、適当なフォルダ、たとえば D:\PktFilter に解凍した pktfltsrv.exe を入れます。

nPOP
ダウンロードして、適当なフォルダ、たとえば D:\nPOP に解凍します。

Thunderbird
デフォルトのまま、あるいは適当なフォルダを指定してインストールします。

pktFilter のホワイトリストの作成 、nPOP、Thunderbirdの設定を行います。(後述)
* 私が使用しているホワイトリストやバッチファイルはこちらから。

4、使い方

・pktFilterStart.bat を起動時に1回だけ実行
注)パケットフィルターを中止する場合には、
pktFilserStop.bat を実行します。

・nPOPでメールチェック
メール受信時には、まずnPOPで新着メールのタイトルと本文の先頭100バイト程度を受信し表示します。テキストでの表示なので、ウイルス感染のメールであっても感染する恐れはない。怪しいメールはこの段階で削除します。

・Thunderbirdでメール受信
その後、Thunderbirdでメールを受信して、添付ファイルを保存など、今までとおりのメールを活用します。

万が一、添付ファイルがウイルスに感染していても、IPフィルタがあるので、内部のデータが外部(メールサーバ以外)に出力される恐れはありません。

5、設定手順

<メール関連の設定>

メール関連の設定を ThunderbirdnPOPともに行います。

nPOP は起動して「アカウント」 - 「設定」
 アカウントの名前:適当な名前
 POP3サーバ:pop.gmail.com  (gmailの場合)
  Yahoo メールの場合は、pop.mail.yahoo.co.jp
  Hotmailの場合は、pop3.live.com
 ポート番号:995
 ユーザ名:メールアドレスの@の手前の部分
 SSLを使用するにチェック
です。

<ホワイトリストの作成>

ホワイトリストは、D:\PktFilter 内の rules.txt に記載します。
自分のPCのアドレスを調べます。

スタート - プログラム - アクセサリ - コマンドプロンプト
ipconfig コマンドを実行

>ipconfig
IP Address. . . . . . . . . . . . : 192.168.1.25
Subnet Mask . . . . . . . . . . . : 255.255.255.0

上記のような内容が表示されます。
この場合、Subnet Mask が 255.255.255.0 ということは、IPアドレス32ビット中の「上24ビットの、192.168.1という3つの数字が固定」で、「下8ビットの25 はたまたま、割り振られた番号」という意味です。つまり別の日に ipconfig を実行すると、192.168.1.17とか、192.168.1.29などのIPアドレスが割り振られる可能性があるということです。

そこで、確実に自分のPCに割り振られるアドレスをホワイトリストに登録するには、
 198.168.1.0 から198.168.1.255
までの256個のIPアドレスをまとめた

 198.168.1.0/24

という記述を使います。
 最後の /24 は「IPアドレス192.168.1.0 の上位24ビットが固定」という意味になります。

次に、nslookup コマンドを使って、通信相手(メールサーバー)のIPアドレスを調べます。

>nslookup pop.gmail.com
Addresses: 74.125.25.109, 74.125.25.108
Aliases: pop.gmail.com
上記のような内容が表示されます。
この例では、 74.125.25.109 と 74.125.25.108 の2つのIPアドレスが対応することがわかります。これらはまとめると
 74.125.25.108/31 (74.125.25.108 の上位31ビットが固定)
となります。これに対応するホワイトリストは

# GMAILの場合 pop.gmail.com 74.125.25.108-109
pass out on eth0 proto tcp from 192.168.1.0/24 to 74.125.25.108/31
pass in on eth0 proto tcp from 74.125.25.108/31 to 192.168.1.0/24 established


の3行となります。
1行目はコメント、
2行目は、「PCからpop.gmail.com へのパケットは許可」、
3行目は、「pop.gmail.comからPCへの応答の パケットであれば許可」
という意味になります。
最後の「established」をつけないと、PCからの応答のIPパケット以外の勝手に送りつけられたパケットも受信許可する設定になります。
これらの値を rules.txt に記載すれば完成です。
これらの設定を記載したファイル を用意してありますので、参考に使用ください。

参考: 使用中のホワイトリスト、バッチファイルの中身

rules.txtの中身 (IPアドレスの部分は要修正)

# drop packets composed of small fragments
option small_frags on eth0
# default behavior = deny everything
block in on eth0 all
block out on eth0 all

# allow DNS resolution to our nameserver
# pass out on eth0 proto udp from 192.168.1.1 port > 1023 to 192.168.1.254 port = 53
# pass in on eth0 proto udp from 192.168.1.254 port = 53 to 192.168.1.1 port > 1023
# 無線LANの DNSサーバーアドレス: 192.168.1.1
# 端末に割り振られるIPアドレス 192.168.1.0/24 --- 上24ビットは固定の意味
pass out on eth0 proto udp from 192.168.1.0/24 port > 1023 to 192.168.1.1 port = 53
pass in on eth0 proto udp from 192.168.1.1 port = 53 to 192.168.1.0/24 port > 1023

# allow inbound ICMP traffic (ping)
# pass in on eth0 proto icmp from any to 192.168.1.1 icmp-type echo
# pass out on eth0 proto icmp from 192.168.1.1 to any icmp-type echorep

# allow RDP (Terminal Services) administration from our administration subnet
# pass in on eth0 proto tcp from 10.42.42.0/24 port > 1024 to 192.168.1.1 port = 3389
# pass out on eth0 proto tcp from 192.168.1.1 port = 3389 to 10.42.42.0/24 port > 1024 established

# allow DHCP
pass out on eth0 proto udp from 0,0,0,0 to 255,255,255,255
pass in on eth0 proto udp from 192.168.1.1 to 192.168.1.0/24
# pop.mail.yahoo.co.jp 114.111.75.150, 114.111.79.140
pass out on eth0 proto tcp from 192.168.1.0/24 to 114.111.75.150
pass in on eth0 proto tcp from 114.111.75.150 to 192.168.1.0/24 established
pass out on eth0 proto tcp from 192.168.1.0/24 to 114.111.79.140
pass in on eth0 proto tcp from 114.111.79.140 to 192.168.1.0/24 established

# GMAILの場合 pop.gmail.com 74.125.25.108-109 74.125.129.108-109
pass out on eth0 proto tcp from 192.168.1.0/24 to 74.125.25.108/31
pass in on eth0 proto tcp from 74.125.25.108/31 to 192.168.1.0/24 established

pass out on eth0 proto tcp from 192.168.1.0/24 to 74.125.129.108/31
pass in on eth0 proto tcp from 74.125.129.108/31 to 192.168.1.0/24 established

# Hotmailの場合 pop3.live.com 157.55.1.215
pass out on eth0 proto tcp from 192.168.1.0/24 to 157.55.1.215
pass in on eth0 proto tcp from 157.55.1.215 to 192.168.1.0/24 established

PktFilterON.bat の中身 (フォルダ名の部分は要修正)

pktfltsrv -i d:\pktfilter\rules.txt d:\pktfilter\ log.txt
net start pktfilter

PktFilterOFF.bat の中身

net stop pktfilter
pktfltsrv -u

戻る目次、 次へ