• 更新:
  • 投稿:
  • カテゴリィ:

特定のプログラムのみ接続不可にする

Warning, cats! - Attenti al gatto! CreativeCommons Attribution-NonCommercial-ShareAlike License, Marco Bernardini

問題・Windows XP で以下の条件を満たすには どうすればいいか?:

ある特定のプログラムのみ「インターネットに接続しない」状態で起動する

なお、環境は下の通りとする:

  • OS は Windows XP SP2 Professional
    • (Home Edition は検証していない)
  • そのプラグラムとは、ゲームやブラウザなどの一般的なものである
    • 一応書いておくが「オフライン作業」で起動したいわけではない
  • ファイアウォール機能を使わないこと
    • ファイアウォールソフトも利用しない
  • 「ある特定のプログラム」以外には(極力)影響しないこと

Windows 標準のファイアウォール機能やファイアウォールソフトを使えば一発で解決するが、それは避けたかった。なぜなら、たかだか数個のプログラムのために、システム全体に影響を及ぼすファイアウォール機能を動かしたくないからだ。

ということで、以下の文章には「ウィルスバスターでいいじゃん」「i-フィルタ使え」などのご意見はカンベンしてほしい。

Windows 標準の機能とフリーソフトを使って、上記の条件を満たす方法を見つけたので紹介する。「もっと良い方法がある」という人のコメントを待っています。

自分がやりたいこと

まず、なぜこれができないのか不思議なのだが……。

一番ラクなのは、アプリケーションの実行ファイル(.exe)を右クリックして「プロパティ」を開き、「セキュリティ」タブあたりに「このアプリケーションがインターネットに接続するのを制限する」みたいなチェックがあること。チェックを入れると、この実行ファイルだけがインターネットに接続できなくなる、というもの。

しかし、そんな項目はない

ユーザアカウントで制御する

次に考えたのが、「ユーザアカウント」を利用する方法だ。特定のアプリケーションを実行する際は、インターネットへの接続を制限したユーザに切り替えて実行する。切り替えが面倒だが、こちらは簡単にできそうだ。

Windows 2000 以降では「制限付きユーザ」という、いかにもそれらしいアカウントを作れる。

制限付きユーザー アカウントを作成するには

しかし、この「制限」はプログラムの追加などに対するもので、「インターネットへの接続を制限」は できない。

──いやいや、管理者がユーザへ制限をかけたい心のベスト 10 第一位は やはりインターネット接続ではないか? いくら新規プログラムのインストールを制限しても、インターネットに つなぎ放題では、管理がザルだろう。と文句を言いたくなる。

Microsoft からすると、インターネットへの接続を制限するにはファイアウォールを使え、ということなのか……。

RUNASA を利用する

さて、さんざん引っ張ってきたが、そろそろ解決編を書こう。

「RUNASA」というパスワード入力なしで別ユーザによる実行を行うアプリケーションソフトを使う。

RUNASA(WindowsNT/2000/XP/Vista / ユーティリティ)

ちょうど分かりやすい記事を見つけた。下のページ(3 ページ分あり)を参考にして、RUNASA のインストールとユーザアカウント(制限付きユーザではなくて良い)の作成まで進んで欲しい。

RUNASAネット接続するソフトは制限付きユーザー権限で安全に

もう一工夫で解決

さて、これで「ユーザ A」でログインしながら、「ユーザ B」の権限でプログラムを簡単に起動できるようになった。しかし、この状態では、けっきょくプログラムはインターネットに接続できる。

そこで、いったん「ユーザ B」でログインする。コントロールパネルから「ネットワーク接続」を開き──「ローカルエリア接続」を無効にする、などでインターネットの接続を切ってしまう

そして「ユーザ A」でログインし直し、RUNASA で作成したショートカット(実行ファイル)を開くと「ユーザ B」として実行されるのだが──なんと、起動したプログラムはインターネットへ接続できない!

確認のため、「ユーザ B」でログインしてローカルエリア接続を有効、「ユーザ A」にログインして上記の実行ファイルを起動すると、今度は接続できる。

つまり、インターネットへ接続する状態はユーザアカウントごとに決まっている、ということだ。当たり前のようで、ちょっと意外に感じた。MTU と RWIN の調整なども、ユーザ単位で変わってくるのだろうか?

オチ

さて、賢明なる読者の皆さんは、もうお気づきだろうが──けっきょく、ファイアウォール機能を使ったほうが早い。もしくは、上の例でいうと「ユーザ B」にログインして接続を切ったままプログラムを実行する、とか。

それに、RUNASA はサービスとして常駐するので、「ある特定のプログラム」以外には(極力)影響しないこと」はギリギリ満たしていない。タスクマネージャを見ると、RUNASA は最大で 2Mbyte ほどメモリを使っているようだ。これより軽いファイアウォールソフトがあれば、そちらのほうが良いだろう。

しかし、ユーザごとに接続状態が決まっている・別のユーザにログインしていても保持される、と発見できて良かった。応用すると、何か面白いことができそうだ。

ここまで可能なら「接続を許可しないプログラム・ユーザ」ができないのか疑問は残った。

[2] このページの一番上へ戻る