次のページ 前のページ 目次へ

8. SOCKS プロキシサーバ

8.1 プロキシサーバのセットアップ

SOCKS プロキシサーバは ftp://sunsite.unc.edu/pub/Linux/system/Network/misc/socks-linux-src.tgz から入手できます。同じディレクトリに設定ファイルのサンプル "socks-conf"も置いてあります。入手したシステムを展開して、 指示に従って make してください。私がコンパイルした際はいくつか問題が起 きました。まず Makefile が正しいか確認することをお勧めします。

一つ重要なことがあります。プロキシサーバは /etc/inetd.conf にエント リが必要です。以下の行を加えて、inetd がプロキシサーバを起動するよう に設定してください。

  socks  stream  tcp  nowait  nobody  /usr/local/etc/sockd  sockd

8.2 プロキシサーバの設定

SOCKS プログラムには 2 つの独立した設定ファイルが必要です。一つはアク セス許可を記述するもので、もう一つはリクエストを適切なプロキシサーバに 転送するための設定です。アクセス許可を記述したファイルはサーバに置かね ばなりません。リクエストを転送するためのファイルは SOCKS を使う全ての Un*x マシンに必要です。DOS と、多分 Macintosh も、独自のリクエスト転送 機能を持っているはずです。

アクセス許可ファイル

socks4.2 Beta ではアクセス許可を記述するファイルは "sockd.conf"です。このファイルには最低でも permit(許可)と deny(拒否)の 2 行が必要です。各行は以下のような 3 つのエントリを持ちま す。

識別子は permit か deny のどちらかです。permit と deny の両方が必要で す。

IP アドレスは 4 バイトの一般に使う IP アドレスの記述法で記述します。こ れは 192.168.2.0 のような形式です。

アドレスの修飾子も普通に使う 4 バイトの IP アドレスの書式になり、この 指定がネットマスクのように使われます。この数字を 32 ビットの 1 か 0 の マスクと考えた場合に 1 の部分は IP アドレスフィールドで指定したアドレ スと一致しなければいけません。例えば、

    permit 192.168.2.23 255.255.255.255

とした場合、192.168.2.23 という IP アドレスのみを許可することになりま す。もし 192.168.2.3 という IP アドレスも許可したい場合は、

    permit 192.168.2.0 255.255.255.0

と設定します。こうすれば 192.168.2.0 から 192.168.2.255 までのクラス C のアドレス全てからのアクセスを許可することになります。

こういう風に設定してはいけません。

    permit 192.168.2.0 0.0.0.0

これでは全てのアドレスからの接続を許可することになるので意味がありませ ん。

まず許可したいアドレスを全て記述します。そして残りのアドレスは拒否する ように設定しましょう。192.168.2.xxx からのアクセスのみを許可する場合、 以下のような設定になります。

    permit 192.168.2.0 255.255.255.0
    deny 0.0.0.0 0.0.0.0

deny 行の最初の "0.0.0.0" に注意してください。アドレス修飾 子で 0.0.0.0 を指定しているので、IP アドレスの設定には意味はなく、単に タイプしやすい番号を選んでいるだけです。

これらの設定を複数指定することも可能です。

SOCKS では特定のユーザのみに接続を許可したり拒否したりすることも可能で す。そのためには ident を用いた認証を組み合わせます。Trumpet Winsock も含めて、必ずしも全てのシステムが ident をサポートしているわけではな いので、ここではこれ以上触れません。ident を使う方法は socks に付属の ドキュメントに詳しく記載してあります。

経路制御ファイル

サービスリクエストの転送先を指定する経路制御ファイルは紛らわしいことに "socks.conf"という名前になっていますので、アクセス許可を設 定する"sockd.conf"と混同しないように注意してください。

経路制御ファイルは SOCKS のクライエントにいつ socks を使うべきかを指示 します。例えば、私たちのネットワークでは、192.168.2.3 のアドレスから 192.168.2.1 の firewall へ talk する場合、両者はイーサネットで直結され ていますので socks を使う必要はありません。また、127.0.0.1 というルー プバックアドレスを使って自分自身に接続する場合も socks を使う必要はあ りません。経路制御ファイルにも 以下の 3 つのエントリがあります。

拒否(Deny)のエントリでリクエストを拒否する場合を指定します。このエント リには sockd.conf と同様に、識別子、アドレス、修飾子、という 3 つの欄 があります。通常、どういうリクエストを拒否するかの設定は(プロキシサー バに用意した) sockd.conf で処理するので、修飾子の欄は 0.0.0.0 にしてお きます。どこにも接続したくないのであれば、あらかじめここで設定すること も可能です。

direct エントリは socks を使わないアドレスを指定します。ここにはプロキ シーサーバを使わないで接続できる全てのアドレスを指定します。ここにも識 別子、アドレス、修飾子の 3 つの欄があります。私たちの例では以下のよう になります。

    direct 192.168.2.0 255.255.255.0

この設定で内部のネットワーク上のホストへは全て直接接続できることになり ます。

sockd のエントリは socks サーバデーモンがあるホストのありかを指定しま す。書式は以下のようになります:

  sockd @=<serverlist> <IP address> <modifier>

@= エントリに注意してください。ここにプロキシサーバの IP アドレスを列 挙します。私たちの例では一つのプロキシサーバしか使いませんが、負荷が高 い場合や冗長性を高めるために複数のプロキシサーバを列挙することも可能で す。

IP アドレスと修飾子の欄は他の例と同じで、どのアドレスへはどこを経由し て接続するかを指定します。

8.3 プロキシサーバを使う

Unix

プロキシサーバごしにアプリケーションを使うためには、アプリケーションは あらかじめ「SOCKS 化」されていなければなりません。直接接続用とプロキシ サーバ経由用の2 つの telnet コマンドを用意しなければいけないかも知れま せん。SOCKS パッケージには、あらかじめ SOCKS 化されたいくつかのプログ ラムと共に、プログラムを SOCKS 化する方法について解説した文書が付属し ています。直接接続できる相手に SOCKS 化したコマンドを使おうとすれば SOCKS は自動的に直接接続用のコマンドを起動します。このため、全てのコマ ンドを rename して SOCK 化したバージョンで置き替えることも可能です。た とえば"finger"を"finger.orig"にし、 "telnet"を"telnet.orig"にする、などです。元の コマンドがどこにあるかは include/socks.h で指定します。

自前の経路制御機能と socks 機能をもつプログラムもあります。例えば Netscape もその一つです。Netscape では Proxies オプションの SOCKS フィー ルドにサーバのアドレス(私たちの例では 192.168.2.1)を指定することでプロ キシサーバを使うことが可能です。プロキシサーバをどのように扱うかに関係 なく、それぞれのアプリケーションごとの設定には多少悩む必要があるかも知 れません。

Trumpet Winsock を使った MS Windows

Trumpet Winsock にはプロキシサーバ機能が組みこまれています。 "setup"メニュでサーバの IP アドレスを指定して、直接接続で きるコンピュータも指定します。こうしておけば Trumpet は自動的に外部へ のパケットをサーバへ送るようになります。

プロキシサーバと UDP パケット

SOCKS パッケージは TCP 用になっており UDP のパケットは通しません。その ため多少不便になっています。talk や archie といったプログラムは UDP を 使っているため SOCKS 経由では使えません。Tom Fitzgerald <fitz@wang.com> 作の UDPrelay という UDP パケット用のプロキシサー バもありますが、残念なことに執筆時点では Linux で使えませんでした。

8.4 プロキシサーバの欠点

プロキシサーバはきわめて安全な仕組みですが、プロキシサーバを使って限定 した IP アドレスにのみインターネットへのアクセスを許可する方法にはいく つもの欠点があります。プロキシサーバを使えば内部のネットワークから外部 へのアクセスはかなり自由に行いながら、外部からのアクセスを完全に遮断す ることが可能です。すなわち、talk や archie といった接続、あるいは内部 のコンピュータへ送られたメールも通さないということです。これらはたいし た欠点ではないように思えるかも知れませんが、こういう風に考えてみてくだ さい。

FTP もプロキシサーバにとっては問題です。ftp でgetするときや lsするとき、 FTP サーバは接続してきたマシンのソケットをオープン して、そこを経由して情報を送ります。プロキシサーバはこれを許可しないの で、FTP はきちんとうごきません。

プロキシサーバを経由すると接続は遅くなります。プロキシサーバにはかなり オーバヘッドがあるので、あらゆる種類の接続が遅くなります。

基本的に、インターネットに常時接続していても(公式な IP アドレスを持っ ていても)それほどセキュリティにこだわらないならばファイアウォールやプ ロキシサーバを使わないほうがいいでしょう。インターネットに常時接続して いなくて、それほどセキュリティにこだわらないという場合は Term やSlirp, TIA といったシリアル回線で IP 接続をエミュレートするソフトを使えばいい でしょう。Term はftp://sunsite.unc.eduから、Slirp は ftp://blitzen.canberra.edu.au/pub/slirp から、TIA は marketplace.comからそれぞれ入手可能です。これらのパッケージは プロキシサーバを経由するよりも速く、より多くのサービスが利用でき、イン ターネットから内部のネットワークへ接続することも可能です。プロキシサー バは、内部のネットワーク上に多数のホストがあって、それぞれのホストから インターネットへ接続したいが、必要な設定は一箇所にまとめて可能な限り少 くしたい、という場合に適しています。


次のページ 前のページ 目次へ