レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
  Firewall And Proxy Server HOWTO
  Mark Grennan, mark@grennan.com
  v0.83, August 21, 2000
  日本語訳: JF Project (jf@linux.or.jp)
  v1.0.0j  Sep. 22, 2001

  この文書はファイアウォールの基礎を説明すると共に、 Linux ベースのシス
  テムでフィルタ及びプロキシファイアウォールを構築するための詳細な情報
  を、幾つか紹介します。この文書の HTML バージョンは http://www.gren-
  nan.com/Firewall-HOWTO.html にあります。
  ______________________________________________________________________

  目次

  1. 紹介
     1.1 フィードバック
     1.2 責任放棄
     1.3 著作権
     1.4 この文書を書く理由
     1.5 更に読みたい人は

  2. ファイアウォールを理解する
     2.1 ファイアウォールのポリシー
        2.1.1 セキュリティポリシーの作成方法
     2.2 ファイアウォールの種類
        2.2.1 パケットフィルタリングファイアウォール
        2.2.2 プロキシサーバ
        2.2.3 アプリケーションプロキシ
        2.2.4 SOCKS プロキシ

  3. ファイアウォールのアーキテクチャ(基本設計)
     3.1 ダイヤルアップアーキテクチャ
     3.2 単一のルータのアーキテクチャ
     3.3 プロキシサーバを伴うファイアウォール
     3.4 冗長なインターネットの設定

  4. Linux フィルタリングファイアウォールを設定する
     4.1 最低限必要なハードウェアの条件

  5. 必要なソフトウェア
     5.1 カーネルの選択
     5.2 プロキシサーバを選択する

  6. Linux システムを準備する
     6.1 カーネルのコンパイル
     6.2 二枚のネットワークカードを設定する
     6.3 ネットワークアドレスの設定
     6.4 ネットワークを試してみる
     6.5 ファイアウォールを安全にする

  7. IP フィルタリングの設定(IPFWADM)
  8. IP フィルタリングの設定(IPCHAINS)
  9. 透過 squid プロキシをインストールする
  10. TIS プロキシサーバをインストールする
     10.1 ソフトウェアを入手する
     10.2 TIS FWTK をコンパイルする
     10.3 TIS FWTK をインストールする
     10.4 TIS FWTK を設定する
        10.4.1 netperm-table ファイル
        10.4.2 /etc/services ファイル

  11. SOCKS プロキシサーバ
     11.1 プロキシサーバを設定する
     11.2 プロキシサーバを設定する
        11.2.1 アクセスファイル
        11.2.2 ルーティングファイル
        11.2.3 ファイアウォールの後ろで DNS を動かす
     11.3 プロキシサーバを動かす
        11.3.1 Unix
        11.3.2 Trumpet Winsock を持った MS Windows
        11.3.3 UDP パケットで動かす為にプロキシサーバを入手する
     11.4 プロキシサーバの欠点

  12. 上級の設定
     12.1 安全性の重視が必要な大きなネットワーク
        12.1.1 ネットワーク設定
        12.1.2 プロキシ設定

  13. 簡単な管理の為に
     13.1 ファイアウォールツール
     13.2 汎用ツール

  14. プロキシファイアウォールをだめにする
  15. APPENDEX A - スクリプトの例
     15.1 GFCC を用いた RC スクリプト
     15.2 GFCC スクリプト
     15.3 GFCC を使わない RC スクリプト

  16. APPENDEX B - RedHat 用 VPN RC スクリプト
  17. 日本語訳について

  ______________________________________________________________________

  1.  紹介

  David Rudder さんがこの Firewall-HOWTO のオリジナルの文書を書きまし
  た。 4年前、そして今も作品を引き継ぐことを許してくれた彼に感謝します。

  親切にも、この失読症の筆者を手伝ってくれた Ian Gough さんにも感謝しま
  す。

  ファイアウォールは、今までインターネット上での究極のセキュリティとして
  の地位を得て来ました。今日、ファイアウォールは殆どのネットワークデバイ
  スの一部になっています。他の最新の話題と同様、しばしば誤解されがちで
  す。この文書では、ファイアウォールの実体と、構築方法を見ていきます。

  私はカーネル 2.2.14 と RedHat 6.1 をこの文書の作成に使っており、それ故
  に文中の例はこのディストリビューションを元にしております。もし、あなた
  のディストリビューションとの相違点がありましたら、 email をください。
  この howto を更新します。

  1.1.  フィードバック

  どんなフィードバックでも歓迎します。 この文書の間違いを教えてくださ
  い!!  私は人間ですから間違いをしがちです。何か間違いを見つけたら私に知
  らせてください。全ての e-mail に返答したいのはやまやまなのですが、忙し
  いので、返事をしなくても怒らないでください。

  私の email アドレスは mark@grennan.com <:mailto:mark@grennan.com> で
  す。

  1.2.  責任放棄

  時が経ちました。この部分は以前は、``私はセキュリティーのエキスパートで
  はなく、また、そうなる気もありません。'' となっていました。今や、私は
  エキスパートになってしまいました.私の公式の肩書はセキュリティーアナリ
  ストです。もしかすると、私は、以前より少しはまともな事を書いているかも
  しれません。でもわかって欲しいのは、この文書はあくまでも皆さんがこの分
  野を探求する際の助けになることを目指しているものなのです。私はこの文書
  の精度を上げる為に自分の人生を賭けるつもりはありません。もし、あなたの
  ファイアウォールの知識の全てがこの文書に基づくものであるならば、仕事を
  ファイアウォールに賭けないでください。私は、この文書に基づいた行動で
  負った全ての損害に対しての責任を負いません。

  1.3.  著作権

  特に記述が無い限り、 Linux HOWTO 文書は、それぞれの著者に著作権が有り
  ます。それは私です。 Linux HOWTO 文書は、この著作権表示が入っているな
  らば、一部または全部を再編集し、電子的或は物理的な方法にかかわらず配布
  することができます (むしろ、それが望ましい)。商用配布も歓迎されます。
  もし、この文書を配布する場合は、私にメールで知らせてください。 (印刷物
  に自分の名があるのを見るのが好きなもので)。

  翻訳や、派生した作品、Linux HOWTO 文書への集約はこの著作権表示にした
  がって行わなければなりません。これは、配布物に新たな制限を追加してはい
  けないということです。このルールに沿っていることを確信できる場合以外
  は、Linux HOWTO コーディネータに連絡を取ってください。

  要するに、我々は可能な限りの手段を通じて、この情報が広く行き渡ることを
  望んでいます。しかし、我々は HOWTO ドキュメントの著作権を保持したいと
  共に、再配布の計画を知らされたいとも思っています。ただ、この著作権表記
  を残していれば、質問等なしに使ってかまいません。

  何か疑問がありましたら、私にメールで知らせてください。(上記参照のこと)

  1.4.  この文書を書く理由

  数年前、オクラホマ州で"インターネット管理者"として働いていたときに、た
  だで"州をインターネットにつなげてくれ"と頼まれました。 (注意: そのとき
  は、そのような肩書きはありませんでした。私はただの単なる何でも屋だった
  のです。) これを実現する最良の方法は、可能な限りの多数のフリーソフトと
  ジャンクハードウェアを使うことでした。 Linux と、沢山の古い 486 マシン
  だけが、実現させるための道具でした。

  Linux だけが希望でした。当時 (そして今も) 、商用のファイアウォールはど
  こでも高価な物です。私が見つけた、全てのファイアウォールの動作を詳述し
  た文書は、その殆どが最高機密でした。その結果、ファイアウォールを自らの
  手で作り上げるのは殆ど不可能なのだと思いました。

  次の American Floral Services (AFS) では、ファイアウォールを動かすこと
  を頼まれ、その時点ではファイアウォールのソースコードがカーネルに組み込
  まれていました。そして再び、ただで Linux を使ってファイアウォールを建
  てました。六ヶ月後、ファイアウォールは完成し、この文書が更新されまし
  た。

  今、あれから6年を経て、私は沢山のファイアウォールで仕事をしています。
  例えば CheckPoint Firewall-1, Cisco Pix, そして沢山のルータのファイア
  ウォールと、全てのバージョンの Linux ベースのファイアウォールです。私
  は、 Linux が現在の最良のファイアウォールだと思います。でも、その設定
  は最も複雑なものであるかもしれません。

  1.5.  更に読みたい人は

  o  The Linux Networking Overview HOWTO
     

  o  The Ethernet HOWTO 

  o  IPchains Firewalling made Easy! 
     【訳注: 上記 URI は無効です。】

  o  Linux Network Address Translation
     

  o  The Net-HOWTO 

  o  The NET-PPP HOWTO 

  o  Software to build secure VPNs across public networks
     
  o  GFCC a GTK+ Firewall Control Center
     

  o  これはファイアウォールの後ろから ICQ の接続 (チャット、ファイルの送
     受信) を実現する、ポートフォワーディングプロキシです。 (私がこれを
     見つけるまで妻が私を不快にしてくれました。)
     

  o  このサイトは Linux の IP Masquerading ファイアウォールの後ろにある
     IPSec や PPTP VPN のホスト (クライアントやサーバ) にアクセスする方
     法を 解説しています。
     

  o  rc.firewall は、膨大なネットワークサービス (NFS, IPSec, VPNs,
     Proxies等) や、マスカレーディング、  ポートフォワーディング、 IP ア
     カウンティングをサポートする、 ipchains ベースのファイアウォールス
     クリプトです。 スプーフィング【訳注: 偽装】、偽装ルーティング/マス
     カレーディング、 DoS 【訳注: Denial of Service: サービス不能攻
     撃】、 smurf 攻撃、発信ポートスキャン、等々から守ります。 複数のプ
     ライベート及び公共インターフェースもサポートされています。
     

     【訳注: 上記 URI は無効です。現在は、 rcf 
     に変更されています。】

     【訳注: "smurf" とは、 DoS 攻撃の一種を行う攻撃プログラムの名前で
     す。詳しくは、 CERT の文書
      や、 CERT の文書の
     日本語訳  等を参照してください。】

  o  間違いなく最良のプロキシサーバです。 

  o  古いですが、いい物です。 Socksの最新バージョンがここにあります。
     

  2.  ファイアウォールを理解する

  防火壁とは、延焼を避けることを意図した建築構造です。建築物には煉瓦でで
  きた防火壁があり、建築物の区画を完全に分離します。車の防火壁は金属性の
  壁で、エンジンと乗客の室内とを区切ります。

  インターネットのファイアウォールは、あなたのプライベート LAN にインタ
  ーネットの地獄の炎を侵入させないことを意図しています。或は、あなたの
  LAN 内のメンバーが、邪悪なインターネット上の誘惑に対して行うアクセスを
  禁止し、彼らを純粋且つ純潔に保つためのものです。 ;-)

  初期のコンピュータファイアウォールは、二つの異なるネットワークに接続さ
  れている、経路制御を行わない Unix ホストでした。片方のネットワークカー
  ドはインターネットに接続され、もう片方はプライベート LAN に接続されて
  いました。プライベートネットワークからインターネットへ到達するには、
  ファイアウォール (Unix) サーバにログオンしなければなりませんでした。次
  にインターネットにアクセスする為にそのサーバのリソースを使います。例え
  ば、ファイアウォールシステム上の Netscape のブラウザを動作させて、あな
  たのマシン上で動作する X Window System のディスプレイ上に表示できま
  す。ファイアウォール上で動作するブラウザは両方のネットワークにアクセス
  できます。

  【訳注: このエピソードについては、例えば Delegate
   の History of development
  
  にてもかいま見ることができます。】

  この類の「デュアルホームシステム (dual homed system)」 (2つのネットワ
  ークに接続されているシステム) は、あなたのネットワーク上のユーザ全てが
  信頼できるなら、それは素晴らしいものです。単純に Linux システムをセッ
  トアップして、インターネットへアクセスしたい人全てにアカウントを発行す
  れば良いのですから。この設定によって、あなたのプライベートネットワーク
  上にあって、外の世界についてあらゆることを知るコンピュータは、ファイア
  ウォールだけとなります。プライベートネットワーク内の人は誰も自分自身の
  ワークステーションへインターネットから直接ダウンロードすることはできま
  せん。最初にインターネットからファイアウォールへファイルをダウンロード
  してから、次にファイアウォールから自分自身のワークステーションへダウン
  ロードしなければなりません。

  最重要 - 全ての侵入の 99% は、攻撃対象のシステムに対してアカウントレベ
  ルのアクセスを得ることから始まります。ですので、この種のファイアウォー
  ルはお薦めしません。また、このファイアウォールは制限もきつ過ぎます。

  2.1.  ファイアウォールのポリシー

  ファイアウォールマシンこそあなたが望むものの全てであると信じるべきでは
  ありません。先ず、ポリシーを設定しましょう。

  ファイアウォールは 2つの用途に使われます。

  1. 人 (ワーム / クラッカー) を締め出す為。

  2. 人 (従業員 / 子供達) を閉じ込める為。

  私がファイアウォールに取り組んでいた頃、私が働いていた会社は彼らのネッ
  トワークからクラッカーを締め出すことよりも、従業員をスパイすることによ
  り興味を持っていたことにとても驚きました。

  少なくとも私の州 (オクラホマ) では、雇用者は従業員に断りさえすれば、彼
  らの電話の会話とインターネットの利用状況を監視する権利を持っていまし
  た。

  独裁的だったのは政府ではなく、巨大企業だったのです。

  誤解しないでください。人々は勤務時間中は働いていて、遊んではいなかった
  筈です。そして私は勤務倫理が蝕まれることを感じていました。しかしなが
  ら、私はまた"管理者側"こそ彼らが設定したルールの最も悪質な権利乱用者で
  あることを監視していました。通勤バスの経路を探す為にインターネットを
  使ったことで時間給労働者が経営者に懲戒されたと同時に、まさにその懲戒を
  行った経営者が、見込みのある顧客を連れていくための上等なレストランやナ
  イトクラブを、勤務時間中に何時間もネットサーフィンしていたのを見てきま
  した。

  勤務上の管理の為のスパイ行為は、 Monster.com で仕事探しをしている人を
  見つけることでもありました。でも、私は経営者が労働者の昇格条件に "エイ
  ズにかかっているかも知れない" かどうかをチェックする為に彼/彼女が健康
  管理サイトに訪れたことがあるか否かを見ている時に、これは非倫理的である
  ことに気付きました。

  セキュリティの仕事は恐ろしいことになりかねません。もしあなたがファイア
  ウォールの管理者なら、あなたの背後にご注意あれ。

  2.1.1.  セキュリティポリシーの作成方法

  私は今までセキュリティポリシーの作成方法に関する「ホントに仰々しい」文
  書を幾つか見てきました。そんなのを信じてはいけません。セキュリティポリ
  シーを作ることはとても単純なのです。

  1. 与えるものを書き出す

  2. あなたがサービスを提供する人のグループを書き出す

  3. 各々のグループが必要とするアクセスはどのサービスなのかを書き出す

  4. 各々のグループへのサービス毎に、どのように安全を確保するかを書き出
     す

  5. 他のかたちを取るアクセスは、全てセキュリティ違反である旨の宣言文を
     書く

     あなたのポリシーは時と共により複雑になるでしょうけれども、何もかも
     をカバーしようとはしないでください。単純で明解にすることを心がけて
     ください。

  2.2.  ファイアウォールの種類

  ファイアウォールには 2 種類あります。

  1. フィルタリングファイアウォール - 選択したネットワークパケットをブ
     ロックします。

  2. プロキシサーバ (しばしばファイアウォールと呼ばれます) - ネットワー
     クへの接続を提供します。

  2.2.1.  パケットフィルタリングファイアウォール

  パケットフィルタリングは Linux カーネルに組み込まれるタイプのファイア
  ウォールです。

  フィルタリングファイアウォールはネットワークレベルで動作します。ファイ
  アウォールルールが許可した時だけ、データはシステムから出ていくことを許
  されます。到達したパケットは、各々のパケットに含まれている種類、発信ア
  ドレス、宛先アドレス、そしてポートの情報によってフィルタリングされま
  す。

  多くのネットワークルータはある程度のファイアウォールサービスを実現する
  機能を持っています。フィルタリングファイアウォールはそれらの類のルータ
  と同等と考えられます。このため、これを動作させるにあたって IP パケット
  の構造に対する深い理解を必要とします。

  解析・記録されるデータは非常に小さいので、フィルタリングファイアウォー
  ルは CPU 負荷を殆ど必要としませんし、ネットワークの遅延も殆ど生じませ
  ん。

  フィルタリングファイアウォールはパスワード制御を行いません。ユーザは自
  分を認証させることはできません。ユーザを識別する唯一の方法は、ワークス
  テーションに割り当てられた IP アドレスです。このことは DHCP (Dynamic
  IP assignments: 動的 IP 割り当て) の使用を意図している場合に問題をひき
  起こす可能性があります。ルールは IP アドレスを手がかりにしているので、
  新たな IP アドレスが割り当てられる度毎にルールを調整しなければならなく
  なります。私はこれを自動化する術を知りません。

  フィルタリングファイアウォールはユーザにとってより透過的です。ユーザは
  インターネットへアクセスする為に使用するアプリケーションにルールを設定
  する必要がありません。殆どのプロキシサーバでは設定の必要があります。

  2.2.2.  プロキシサーバ

  プロキシは殆どの場合、外部へのトラフィックを制御または監視する為に使わ
  れます。要求されたデータをキャッシュするアプリケーションプロキシも存在
  します。このことによって必要とされるネットワークのバンド幅を低下させ、
  次のユーザに対して同じデータへのアクセスを低下させます。それと共に何が
  転送されたのかを動かぬ証拠として提供します。

  プロキシサーバには 2種類あります。

  1. アプリケーションプロキシ - あなたの為に仕事をしてくれます。

  2. SOCKS プロキシ  - クロスワイヤポートです。

  2.2.3.  アプリケーションプロキシ

  最も良い例は、ある人が他のコンピュータへ telnet 接続してから、そのコン
  ピュータから外界へ telnet 接続することです。アプリケーションプロキシサ
  ーバは、この手順を自動化します。あなたが外界へ telnet 接続すると、先ず
  クライアントはあなたをプロキシへ送り出します。プロキシは次にあなたが要
  求する (外界の) サーバへ接続し、データをあなたへ返します。

  プロキシサーバは全ての接続を処理するので、(あなたを含めて)アクセスする
  全ての挙動をログ記録することができます。 HTTP (web) プロキシにおいて
  は、あなたが閲覧するサイトの URL そのものが含まれます。 FTP プロキシに
  おいては、あなたがダウンロードした全てのファイルが含まれます。あなたが
  訪れるサイトから "不適当な" 言葉さえも排除したり、ウィルススキャンもで
  きます。

  アプリケーションプロキシサーバはユーザ認証ができます。外からの接続が行
  われる前に、サーバはユーザに対して最初にログインを催促します。 web ユ
  ーザにおいては、全てのサイトにおいてログインを要求されるように見えま
  す。

  2.2.4.  SOCKS プロキシ

  SOCKS サーバは旧型のスイッチボードに大変良く似ています。これは単に、あ
  なたの接続を別の外部の接続にシステム上で繋ぎ換えます。

  殆どの SOCKS サーバは TCP タイプの接続でのみ動作します。そしてフィルタ
  リングファイアウォールと同様、ユーザ認証の機能は装備されていません。し
  かしながら、ユーザがどこに接続したのかを記録することはできます。

  3.  ファイアウォールのアーキテクチャ(基本設計)

  ファイアウォールを用いてシステムを防御するようなネットワーク構成には、
  様々な種類があります。

  ルータを通じてインターネットへ専用線接続しているなら、ルータを直接ファ
  イアウォールシステムに接続してもいいでしょう。あるいはハブをかませて
  ファイアウォールの外側にサーバ群を置き、それらにフルアクセスを提供する
  かたちでもいいでしょう。

  3.1.  ダイヤルアップアーキテクチャ

  きっと読者は ISDN 回線のようなダイヤルアップサービスを利用していること
  でしょう。この場合、第三のネットワークカードを用いてフィルタリングされ
  た DMZ 【訳注: Demilitarized Zone: 非武装化地帯】を作り出すのもいいか
  もしれません。こうすればインターネットサービスを完全にコントロールでき
  ますし、かつそれらを通常のネットワークからは切り離しておけます。

                    __________
     _/\__/\_      | ファイア |           __________________
    |インター|     | ウォール |  (LAN)   |                  |
   /  ネット  \----| システム |--(ハブ)--|ワークステーション|
   \_  _  _  _/    |__________|          |__________________|
     \/ \/ \/           |
                      (DMZ)
                      (ハブ)

  3.2.  単一のルータのアーキテクチャ

  あなたのマシンとインターネットの間にルータやケーブルモデムがある場合を
  考えましょう。そのルータがあなたの所有物なら、そのルータに強固なフィル
  タルールを設定できるでしょう。ルータが ISP の所有なら、必要なコントロ
  ールを行うことは多分できないでしょう。 ISP にフィルタを設定するように
  頼むことはできるかもしれません。

                    _________            __________
     _/\__/\_      | ルータ  |          | ファイア |           _______________
    |インター|     |  又は   |  (DMZ)   | ウォール |  (LAN)   |    ワーク     |
   /  ネット  \----|ケーブル |--(ハブ)--| システム |--(ハブ)--|  ステーション |
   \_  _  _  _/    | モデム  |    |     |__________|          |_______________|
     \/ \/ \/      |_________|    |
                                (外部)
                               (サーバ)

  3.3.  プロキシサーバを伴うファイアウォール

  ネットワーク上のユーザのアクセスをモニタする必要があり、ネットワークの
  規模が小さいならば、ファイアウォールにプロキシサーバを統合できます。
  ISP によっては、これを行ってユーザのリストを作り、マーケティングを行っ
  ている代理店に売っているようなこともあります。

                     __________
      _/\__/\_      |プロキシ/ |           ______________
     |インター|     | ファイア |  (LAN)   |   ワーク     |
    /  ネット  \----| ウォール |--(ハブ)--| ステーション |
    \_  _  _  _/    | システム |          |______________|
      \/ \/ \/      |__________|

  プロキシサーバは、LAN にも好きなように設置できます。この場合、そのプロ
  キシサーバが提供しているサービスについては、プロキシサーバだけがインタ
  ーネットに接続できるようにするべきです。こうすればユーザはプロキシサー
  バを通してしかインターネットに接続できなくなります。

                    __________
     _/\__/\_      | ファイア |           _______________
    |インター|     | ウォール |  (LAN)   |    ワーク     |
   /  ネット  \----| システム |--(ハブ)--|  ステーション |
   \_  _  _  _/    |__________|    |     |_______________|
     \/ \/ \/                      |     ______________
                                   |    |              |
                                   +----|プロキシサーバ|
                                        |______________|

  3.4.  冗長なインターネットの設定

  YAHOO や SlashDot のようなサービスを稼働させるつもりなら、冗長なルータ
  とファイアウォールを用いてシステムを構築したくなることでしょう。 (High
  Availability HowTo をご覧になってください。) 【訳注: Linux High
  Availability HOWTO は http://www.ibiblio.org/pub/Linux/ALPHA/linux-
  ha/High-Availability-HOWTO.html
   にあります。 High Availability は「高可用性」を意味しま
  す。】

  1つの URL と複数の ISP から複数の web サーバへのアクセスを提供する、
  round-robin DNS の技術を使えば、単一の URL に対するアクセスを複数の
  web に捌くことができます。そして High availability 技術を使っている
  ISP・ルータ・ファイアウォールを複数用いることによって、 100% フル稼働
  のサービスを実現できます。

  【訳注: round-robin とは、円形に署名した請願書を意味します。ここでは
  DNS にある一つの URL に対して複数のサーバの対応関係を列挙し、多数のク
  ライアントの要求に対してそのリストを順番に使用することにより、負荷分散
  を実現する手法です。 DNS の最後のエントリに到達したら最初に戻って使い
  回す有り様を round-robin という言葉で説明しています。】

     _/\__/\_                                       _/\__/\_
    |        |                                     |        |
   /  ISP #1  \______                  (WAN)______/パートナー\
   \_  _  _  _/      |                 (ハブ)     \_  _  _  _/
     \/ \/ \/        |                ___|____      \/ \/ \/
                   __|___            |_______ |
     _/\__/\_     |_____ |          |ファイア||           ______
    |        |   |      ||  (DMZ)   |ウォール||  (LAN)   |      |
   /  ISP #2  \--|ルータ||--(ハブ)--|システム||--(ハブ)--| WS/s |
   \_  _  _  _/  |______|     |     | (VPN)  |     |     |______|
     \/ \/ \/                 |     |________|     |      ________
            |              (外部)        |         |     |        |
    ------  |             (サーバ)     (共有)      +-----|プロキシ|
   | WS/s | |                         (サーバ)           |________|
   | VPN  |-+
   |______|

  ネットワークはすぐにあなたの手に負えなくなるものです。全ての接続を把握
  し続けてください。ユーザがモデムを持っていて、そのモデムから LAN に侵
  入されたら、 LAN は危機に陥ります。

  4.  Linux フィルタリングファイアウォールを設定する

  4.1.  最低限必要なハードウェアの条件

  フィルタリングファイアウォールに高級なハードウェアは不要です。単純なル
  ータに毛が生えたようなもので用が足ります。

  必要なものは -

  1. 486DX2 66MHz と 32 MB メモリ

  2. 250MB のハードディスク (500MB 以上がお薦めです)

  3. ネットワーク接続 (LAN カード、シリアルポート、ワイヤレス?)

  4. モニタとキーボード

  【訳注: 勿論、今時こんなロースペックなハードウェアを揃えるのは却って困
  難です。現時点で入手できるハードウェアのうちで安価なもので十分でしょ
  う。但し、安定して稼働する実績を持つものが望まれることは言うまでもあり
  ません。また、もしも中古品を購入するつもりなら、ハードディスクのような
  寿命の短いものには注意してください。それと、このリストにはビデオカード
  が抜けています。 OSのインストールの際には必要と思われるフロッピーディ
  スクドライブや CD-ROM ドライブも抜けています。ご注意を。】

  システムによってはシリアルポートコンソールを使用することで、モニタとキ
  ーボードを省略することも可能です。

  【訳注: シリアルコンソールのサポートはカーネル 2.2 系以降となっていま
  す。】

  膨大なトラフィックを捌くプロキシサーバを必要とするなら、入手し得る限り
  で最強のハードウェアスペックが必要になります。何故なら、ユーザが接続を
  行う度毎にプロセスが発生するからです。 50人以上同時に接続するような場
  合は、以下のようなスペックが必要かと思います -

  1. ペンティアム II と 64MB メモリ

  2. 全てのログを記録する為の 2GB のハードディスク

  3. 2つのネットワークへの接続

  4. モニタとキーボード

     【訳注: この文書を翻訳している時点では、上記スペックはもう最強では
     ないですね。:-)】ネットワーク接続はあらゆる種類が想定されます (NIC,
     ISDN, モデムの場合もあるかもしれません)。

  5.  必要なソフトウェア

  5.1.  カーネルの選択

  フィルタリングファイアウォールを構築する為に特別なソフトウェアは要りま
  せん。 Linux が行います。この文書を書いている時点で、私は RedHat 6.1
  を使っています。

  Linux に組み込みのファイアウォールは何度か変更されてきました。古いカー
  ネル(1.0.x もしくはそれより古いもの)を使っているなら、新しいものを入手
  してください。これら古いカーネルは http://www.xos.nl/linux/ipfwadm/ に
  あるipfwadm を使っており、もうサポートされていません。

  【訳注: お使いのカーネルのバージョンと Ipfwadm のバージョンに注意して
  ください。 http://www.xos.nl/linux/ipfwadm/versions.html を確認してく
  ださい。】

  2.2.13 以降を使っているなら、 http://netfilter.samba.org/ipchains/ で
  開発された ipchains を使用できます。

  最新の 2.4 カーネルを使っているなら、より新しい仕様のファイアウォール
  ユーティリティがあります。近いうちにそれについて書きます。

  5.2.  プロキシサーバを選択する

  プロキシサーバの設定をしたいなら、次のパッケージのどれか一つが必要で
  す。

  1. Squid

  2. The TIS Firewall Toolkit (FWTK)

  3. SOCKS

     【訳注:  プロキシサーバプログラム DeleGate もあります。 DeleGate に
     ついては次のところを参考にしてください。
     http://www.delegate.org/delegate/】

  Squid はとても素晴らしいパッケージで Linux の透過プロキシ (Transparent
  Proxy) 機能と共に動作します。このサーバを設定する方法について書こうと
  思います。

  この文書を書いている時点で、 Network Associates
   と Trusted Information System's
  (TIS) は合併しています。変更についての詳細情報に関する web サイトに注
  意しておきましょう。一方、ツール類はまだ次のところにあります。
  http://www.tis.com/research/software/
  

  Trusted Information System は ファイアウォールの設定を簡単にするように
  設計されたプログラム群を提供しています。これらのツール類を使うことで、
  それぞれのサービス (WWW や telnet など) を一つのデーモンに設定できま
  す。

  【訳注: Trusted Information System については次のところを参考にしてく
  ださい。 http://www.uth.tmc.edu/oac_docs/trust/trusted.htm】

  6.  Linux システムを準備する

  できるだけ小さい規模で、Linux システムをインストールします。私がインス
  トールをするときは、まずサーバの設定を行い、次いで /etc/inetd.conf で
  不必要なサービスを外します。更にセキュリティを高めたいなら、不必要なサ
  ービスはアンインストールしてしまいましょう。

  殆どのディストリビューションは自分の目的に応じたカーネルになっていませ
  んから、自分の目的にあったカーネルにコンパイルしなければいけません。
  ファイアウォール以外のコンピュータでコンパイルができるなら、それが一番
  良い方法です。 C コンパイラなどのユーティリティをファイアウォールにイ
  ンストールしてしまった場合は、カーネルの設定が完了した後で削除しましょ
  う。

  6.1.  カーネルのコンパイル

  お使いになる予定の Linux ディストリビューションの最小限度のインストー
  ルから始めてください。ソフトウェアを減らせば、お使いのサーバでのセキュ
  リティ問題の原因になるセキュリティホールやバックドア (不正な手段での侵
  入) 、或はバグなどがより少なくなります。

  安定版のカーネルを入手してください。私のシステムではカーネル 2.2.13 を
  使っています。この文書はその環境での設定を基本にしました。

  適切なオプションで Linux のカーネルをコンパイルしなければいけません。
  カーネルの再構築をした経験がないなら、実行する前に Kernel HOWTO,
  Ethernet HOWTO, NET-2 HOWTO を読みましょう。

  次にネットワーク関連の設定を示します。これが動作することは確認してあり
  ます。いくつかの項目には ? という印をつけています。このような設定を使
  うつもりなら、チェックをいれて選択してください。

  カーネルの設定の為に、私は "make menuconfig" を使っています。

  【訳注: 個々の項目については、Configure.help の日本語版も参考にしてく
  ださい。 http://www.linux.or.jp/JF/JFdocs/Configure.help/】

      <*> Packet socket
      [ ] Kernel/User netlink socket
      [*] Network firewalls
      [ ] Socket Filtering
      <*> Unix domain sockets
      [*] TCP/IP networking
      [ ] IP: multicasting
      [*] IP: advanced router
      [ ] IP: kernel level autoconfiguration
      [*] IP: firewalling
      [?] IP: always defragment (required for masquerading)
      [?] IP: transparent proxy support
      [?] IP: masquerading
      --- Protocol-specific masquerading support will be built as modules.
      [?] IP: ICMP masquerading
      --- Protocol-specific masquerading support will be built as modules.
      [ ] IP: masquerading special modules support
      [*] IP: optimize as router not host
      < > IP: tunneling
      < > IP: GRE tunnels over IP
      [?] IP: aliasing support
      [*] IP: TCP syncookie support (not enabled per default)
      --- (it is safe to leave these untouched)
      < > IP: Reverse ARP
      [*] IP: Allow large windows (not recommended if <16Mb of memory)
      < > The IPv6 protocol (EXPERIMENTAL)
      ---
      < > The IPX protocol
      < > Appletalk DDP
      < > CCITT X.25 Packet Layer (EXPERIMENTAL)
      < > LAPB Data Link Driver (EXPERIMENTAL)
      [ ] Bridging (EXPERIMENTAL)
      [ ] 802.2 LLC (EXPERIMENTAL)
      < > Acorn Econet/AUN protocols (EXPERIMENTAL)
      < > WAN router
      [ ] Fast switching (read help!)
      [ ] Forwarding between high speed interfaces
      [ ] PU is too slow to handle full bandwidth
      QoS and/or fair queueing  --->

  全ての設定をしてから、再コンパイルし、カーネルを再インストールし、再起
  動します。

  次のようなコマンドで行います -

  1行のコマンドで全部を行うには、次のようにします。 make dep;make
  clean;make bzlilo;make modules;make modules_install;init 6

  6.2.  二枚のネットワークカードを設定する

  コンピュータに二枚のネットワークカードを挿しているなら、IRQ と二枚のカ
  ードのアドレスを /etc/lilo.conf ファイルに append を使って明示的に加え
  なければならない場合があります。私の lilo の append 行は次のようになっ
  ています -

  append="ether=12,0x300,eth0 ether=15,0x340,eth1"

  【訳注: ネットワークカードの設定は、次のような文書も参考にしてくださ
  い。 http://www.linux.or.jp/JF/JFdocs/Ethernet-HOWTO.html

  http://www.linux.or.jp/JF/JFdocs/Multiple-Ethernet.html】

  6.3.  ネットワークアドレスの設定

  さて、構築作業も面白いところにきています。この文書では LAN を設定する
  方法について深くは説明しません。この件についてのあなたの問題を解決する
  には、 Networking-HOWTO を読んでください。

  【訳注: Networking-HOWTO の日本語訳は、次のところにあります。
  http://www.linux.or.jp/JF/JFdocs/NET3-4-HOWTO.html】

  あなたの目的は、フィルタリングファイアウォールを通して、二つのネットワ
  ーク接続を提供することです。インターネット上に一つ(安全でない側)と LAN
  (閉じた側) に一つということになります。

  とにかく、いくつかのことを決定しなければなりません。

  1. 本物の IP 番号を使いますか、それとも LAN には適当な番号を指定します
     か。

  2. あなたの ISP から割り当てられる番号を使いますか、それとも、静的な
     IP 番号を使いますか。

  プライベートなネットワークにインターネットからのアクセスを許可したくな
  いわけですから、 "本物のアドレス" を使う必要はありません。プライベート
  LAN に対して適当なアドレスを振ることはできますが、これはお勧めできませ
  ん。データが LAN からある経路を通って漏れてしまったら、どこかのシステ
  ムのポートまで届いてしまいます。

  プライベートネットワーク用に取りわけられている幾つかのインターネットア
  ドレスの範囲があります。 192.168.1.xxx もこの中に入っていて、この文書
  ではこれを例に使います。

  この数値を使う為には IP マスカレードを使う必要があります。この方法で
  ファイアウォールはパケットをフォワードして、インターネット上で "本物
  の" アドレスに変換します。

  このようなルーティングできない IP アドレスを使えば、あなたのネットワー
  クはより安全になります。インターネットルータは、このようなプライベート
  アドレスのついたパケットを通しません。

  この件に関しては、次の文書を読んだほうがよいでしょう。 IP Masquerading
  HOWTO 
  【訳注: IP Masquerade HOWTO の日本語訳は、次のところにあります。
  】

              24.94.1.123  __________    192.168.1.1
        _/\__/\_        \ | ファイア | /           _______________
       |インター|        \| ウォール |/           |     ワーク    |
      /  ネット  \--------| システム |------------|  ステーション |
      \_  _  _  _/        |__________|            |_______________|
        \/ \/ \/

  お使いのインターネット用ネットワークカードに割り当てるための "本物の"
  IP アドレスを持っていなければいけません。このアドレスは、あなたに永続
  的に割り当てられたもの (静的な IP アドレス) でもいいですし、 PPP プロ
  セスによるネットワークへの接続時に割り当てられたものでもかまいません。

  内側の IP 番号を割り当てます。たとえば LAN カードに対して 192.168.1.1
  のようにします。これはゲートウェイアドレスになります。保護されたネット
  ワーク (LAN) にいる他の全てのマシンには、 192.168.1.xxx の範囲
  (192.168.1.2 から 192.168.1.254 まで) の番号を割り当てることができま
  す。

  私は RedHat Linux を使用しています。起動時にネットワークを設定するた
  め、私は /etc/sysconfig/network-scripts というディレクトリにある
  ifcfg-eth1 ファイルに記述を追加しています。このディレクトリに ifcfg-
  ppp0 や ifcfg-tr0 というファイルもあるはずです。'ifcfg-' というファイ
  ルは、 RedHat で、起動時にネットワークデバイスを設定し、使用可能にする
  為に使われています。接続のタイプによって名前がつけられています。

  これが ifcfg-eth1(二つ目のイーサネットカード)の例です -

      DEVICE=eth1
      IPADDR=192.168.1.1
      NETMASK=255.255.255.0
      NETWORK=192.168.1.0
      BROADCAST=192.168.1.255
      GATEWAY=24.94.1.123
      ONBOOT=yes

  ダイアルアップ接続をするつもりなら、ifcfg-ppp0 と chat-ppp0 を見なけれ
  ばなりません。これらは PPP 接続を制御します。

  この場合の ifcfg ファイルは次のようになります -

      DEVICE="ppp0"
      ONBOOT="yes"
      USERCTL="no"
      MODEMPORT="/dev/modem"
      LINESPEED="115200"
      PERSIST="yes"
      DEFABORT="yes"
      DEBUG="yes"
      INITSTRING="ATZ"
      DEFROUTE="yes"
      HARDFLOWCTL="yes"
      ESCAPECHARS="no"
      PPPOPTIONS=""
      PAPNAME="LoginID"
      REMIP=""
      NETMASK=""
      IPADDR=""
      MRU=""
      MTU=""
      DISCONNECTTIMEOUT=""
      RETRYTIMEOUT="5"
      BOOTPROTO="none"

  6.4.  ネットワークを試してみる

  ifconfig と route コマンドを使ってみましょう。二枚のネットワークカード
  を使っているなら、次のように表示されます。

    #ifconfig
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:3924  Metric:1
              RX packets:1620 errors:0 dropped:0 overruns:0
              TX packets:1620 errors:0 dropped:0 overruns:0
              collisions:0 txqueuelan:0

    eth0      Link encap:10Mbps Ethernet  HWaddr 00:00:09:85:AC:55
              inet addr:24.94.1.123 Bcast:24.94.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1000 errors:0 dropped:0 overruns:0
              TX packets:1100 errors:0 dropped:0 overruns:0
              collisions:0 txqueuelan:0
              Interrupt:12 Base address:0x310

    eth1      Link encap:10Mbps Ethernet  HWaddr 00:00:09:80:1E:D7
              inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1110 errors:0 dropped:0 overruns:0
              TX packets:1111 errors:0 dropped:0 overruns:0
              collisions:0 txqueuelan:0
              Interrupt:15 Base address:0x350

  更に経路テーブルは次のようになります -

    #route -n
    Kernel routing table
    Destination     Gateway         Genmask         Flags MSS    Window Use Iface
    24.94.1.0       *               255.255.255.0   U     1500   0       15 eth0
    192.168.1.0     *               255.255.255.0   U     1500   0        0 eth1
    127.0.0.0       *               255.0.0.0       U     3584   0        2 lo
    default         24.94.1.123     *               UG    1500   0       72 eth0

  注意 -  24.94.1.0 は、このファイアウォールのインターネット側で、
  192.168.1.0 はプライベート( LAN )側になります。

  LAN 上にある全てのコンピュータが、ファイアウォールシステムの内側のアド
  レスに ping できるかどうかを調べましょう (ここでは 192.168.1.1 を例に
  しています)。うまくできないなら、再度 NET-2 HOWTO を見てください。そし
  て、もう少しネットワークについて調べてください。

  次に、ファイアウォールからインターネットシステムに ping を試してみま
  す。私はテストポイントとしてwww.internic.net を使っています。もしこれ
  がうまく動かなければ、お使いの ISP でのサーバを試してみます。これがう
  まく動かなければ、あなたのインターネット接続のどこかがきちんと設定され
  ていません。ファイアウォールからは、インターネットのあらゆる場所に接続
  できなければなりません。デフォルトのゲートウェイの設定を見直してくださ
  い。ダイアルアップ接続を使っているなら、ユーザ ID とパスワードを見直し
  てください。 Net-2 HOWTO をもう一度読んでから再度試してください。

  ______________________________________________________________________
  あなたの LAN 上にあるコンピュータから、ファイアウォール(24.94.1.123) の
  外側のアドレスに ping を試してみます。
  これは動かないはずです。
  もし ping できるなら、あなたはマスカレードを行っているか、
  IP フォワーディングを使っているか、あなたは既に何らかの
  パケットフィルタリングを設定しているのです。
  それらを無効にして再度試してください。
  フィルタリングが正しい状態にあることを確認しなければなりません。
  ______________________________________________________________________

  2.1.102 より新しいカーネルに対しては、以下のコマンドが使えます -

      echo "0" > /proc/sys/net/ipv4/ip_forward

  (何故かは分かりませんが) 古いカーネルを使っているなら、フォワードを無
  効にしてカーネルを再コンパイルしなければいけないでしょう (カーネルの
  アップグレードをするのにちょうどいい機会です)。

  再度ファイアウォール (24.94.1.123) のアドレスの外側に向けて ping を試
  します。動いてはいけないのです。

  ここまでを確認したところで、IP フォワーディング及び/又は IP マスカレー
  ドを有効にします。あなたの LAN 上のどんなシステムからインターネット上
  のどのような場所にも ping が可能になるはずです。

      echo "1" > /proc/sys/net/ipv4/ip_forward

  重要な注意 - もし、あなたが LAN 上で、 (192.168.1.* ではない) "本物の"
  IP アドレスを使っていて、インターネットへ ping できないが、あなたの
  ファイアウォールのインターネット側には ping できる場合は、接続先の ISP
  があなたのプライベートネットワークのアドレスからのパケットをルーティン
  グしているかどうか確認してください。

  【訳注: ここではユーザのマシン全てにグローバル IP を割り当てている場合
  を説明しています。】

  この問題をテストするには、インターネット上の誰か (例えばローカルのプロ
  バイダを使っている友人に頼んで) に、あなたのネットワークに traceroute
  してもらうことです。 traceroute による経路探索が、あなたが使っているプ
  ロバイダのルータで停止するなら、プロバイダはあなたのトラフィックを転送
  していないのです。

  動きましたか? 素晴らしい。難しい場所は終わりました。:-)

  6.5.  ファイアウォールを安全にする

  ファイアウォールは、それが動作しているシステムそのものが、攻撃に対して
  広く開けっ放しになったままだと、なんら意味をなしません。 "悪い奴ら" は
  ファイアウォール以外のサービスを通してアクセスしてしまいますし、好き勝
  手に変更してしまいます。不要なサービスはどれも無効にしなければなりませ
  ん。

  /etc/inetd.conf ファイルを見てください。これは "super server" として知
  られる inetd を設定するファイルです。 inetd は沢山のサーバデーモンを制
  御し、"well known" ポートへの要求パケットが到着すると、それらをスター
  トさせます。

  【訳注: well known port は、 TCP/UDP ポート番号 1024 番以下のポートを
  指します。】

  echo, discard, daytime, chargen, ftp, gopher, shell, login, exec,
  talk, ntalk, pop-2, pop-3, netstat, systat, tftp, bootp, finger,
  cfinger, time, swat そして linuxconfig 等は全て無効にしましょう。

  サービスを変更するには、サービス行の最初の文字に # を置きます。これが
  済んだら "kill -HUP " を送ります。  には、inetd のプロセス番
  号を書きます。こうするとその設定ファイルを再読させ、システムを停止させ
  ないで再スタートします。

  【訳注: killall というコマンドがあります。 man killall も調べてくださ
  い。 killall -HUP inetd が使えます。】

  ファイアウォールの port 15 (netstat) に対して telnet してみてくださ
  い。何か出力するようなら、サービスは無効になっていません。

  telnet localhost 19

  /etc/nologin というファイルを作成することもできます。 BUZZ OFF (繋がな
  いの意味) のように、このファイルにちょっとしたテキストを書きます。この
  ファイルが存在すると、 login はユーザのログオンを許可しません。ユーザ
  はこのファイルの内容を見ることになり、ログインは拒否されます。 root だ
  けがログインできます。

  /etc/securetty というファイルも編集できます。ユーザが root なら、
  /etc/securetty に列挙された tty からしかログインできません。失敗する
  と、 syslog 機能で記録されます。これらの両方のコントロールを有効にすれ
  ば、ファイアウォールへのログオンは、 root としてコンソール経由でしか行
  えなくなります。

  絶対に telnet で root としてログインしてはいけません。リモート root を
  必要とするなら、SSH (Secure Shell) でアクセスします。 telnet は無効に
  すべきでしょう。

  心配性な人は、lids (Linux Intrusion Detect System 割り込み検知システ
  ム) を使う必要があるかもしれません。これは Linux カーネルに対する侵入
  禁止システムのパッチです。重要なファイルを改竄から守ります。この仕組み
  を使うと、 防御対象のファイルやディレクトリ、更にその配下のサブディレ
  クトリは (root を含めて) 誰も変更できなくなります。このような安全化さ
  れたファイルを変更するには、 LILO の設定で security=1 を指定してシステ
  ムをリブートさせなければなりません (私ならシングルユーザモードで起動さ
  せるでしょう)。

  7.  IP フィルタリングの設定(IPFWADM)

  カーネル 2.1.102 以上を使っているならこの章を飛ばして、次の IPCHAINS
  の章に進んでください。

  以前のカーネルでは IP Forwarding はデフォルトでカーネルに組み込まれ有
  効になっています。従って、ネットワークを設定する場合は、まず全てを拒否
  し、以前に置かれていた ipfw のルールを破棄するべきです。以下のようなス
  クリプト (の一部分) を、ネットワークの起動スクリプト
  (/etc/rc.d/init.d/network) に書いておかなければいけません。

    #
    # IP packet Accounting と Forwarding の設定
    #
    #   Forwarding
    #
    # デフォルトで全てのサービスを不許可にする。
    ipfwadm -F -p deny
    # 全てのコマンドを破棄する。
    ipfwadm -F -f
    ipfwadm -I -f
    ipfwadm -O -f

  さて、我々は究極のファイアウォールを構築しました。もう何も通しません。

  ここで /etc/rc.d/rc.firewall というファイルを作成します。このスクリプ
  トは email, web, DNS トラフィックを許可します。 ;-)

  #! /bin/sh
  #
  # rc.firewall
  #
  # 関数ライブラリを読み込む
  . /etc/rc.d/init.d/functions

  # 設定を取得
  . /etc/sysconfig/network

  # ネットワークが起動しているかチェックする
  if [ ${NETWORKING} = "no" ]
  then
          exit 0
  fi
  case "$1" in
    start)
    echo -n "Starting Firewall Services: "
    # サーバに入る email を許可する。
    /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25
    # 外部の email サーバへの接続を許可する
    /sbin/ipfwadm -F -a accept -b -P tcp -S 192.1.2.10 25 -D 0.0.0.0/0 1024:65535
    # あなたの Web サーバに Web 接続を許可する。
    /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.11 80
    # 外部の Web サーバへの Web 接続を許可する。
    /sbin/ipfwadm -F -a accept -b -P tcp -S 192.1.2.* 80 -D 0.0.0.0/0 1024:65535
    # DNS トラフィックを許可する。
    /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 192.1.2.0/24
    ;;
    stop)
    echo -n "Stooping Firewall Services: "
    ipfwadm -F -p deny
    ;;
    status)
    echo -n "Now do you show firewall stats?"
    ;;
    restart|reload)
          $0 stop
          $0 start
          ;;
    *)
          echo "Usage: firewall {start|stop|status|restart|reload}"
          exit 1
  esac

  注意 - この例では、192.1.2.10 に email (smtp) サーバがあって、ポート
  25 で送受信ができなければならないとしています。 web サーバは
  192.1.2.11 で運用しています。 LAN にいる全ての利用者が、外部の web サ
  ーバと DNS サーバに到達できるようにしています。

  これは完全に完璧とは言えません。なぜなら port 80 は、web ポートとして
  使わなければならないわけではなく、賢いハッカーならこのポートを使って、
  ファイアウォールを越える仮想プライベートネットワーク (VPN) を作るで
  しょう。これを避けるには、 web プロキシを設定し、プロキシだけがファイ
  アウォールを通過できるようにすることです。 LAN 側のユーザが外のweb サ
  ーバに到達する為にはプロキシを経由しなければならないようにします。

  ファイアウォールを通るトラフィックの勘定にも興味があるでしょう。次のス
  クリプトは全てのパケットを数えます。あなたはシングルシステムに向かうパ
  ケットを数える為に一、二行加えることができます。

    # 現在のアカウントルールを破棄する。
    ipfwadm -A -f
    # Accounting
    /sbin/ipfwadm -A -f
    /sbin/ipfwadm -A out -i -S 192.1.2.0/24 -D 0.0.0.0/0
    /sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D 192.1.2.0/24
    /sbin/ipfwadm -A in -i -S 192.1.2.0/24 -D 0.0.0.0/0
    /sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D 192.1.2.0/24

  必要なのがフィルタリングファイアウォールだけなら、あなたはここで設定を
  終えることができます。テストしてから運用してください。

  8.  IP フィルタリングの設定(IPCHAINS)

  Linux の ipchains は、 Linux IPv4 firewalling コードと ipfwadm を書き
  換えたものです。 ipfwadm は BSD の ipfw を書き換えたものだったと思いま
  す。 ipchains は Linux のカーネル 2.1.102 以降で IP パケットフィルタを
  管理するのに必要です。

  以前のコードはフラグメント【訳注: fragment: 断片化されたパケット】を扱
  えませんし、 (少なくとも Intel 用では) 32 ビットのカウンタしかありませ
  んし、 TCP/UDP/ICMP 以外の仕様のプロトコルを考慮していませんし、アト
  ミック(瞬間的)に大きく(ルールを)変更することもできませんし、逆ルールを
  満たせませんし、いくつか妙な癖がありましたし、管理しにくい (ユーザのミ
  スを招きやすい) ものだったと作者は言っています。

  【訳注: この一節は IPCHAINS-HOWTO 第一章 1.2 なぜ?
   と殆ど
  同じです。】

  私は ipchains を使ったファイアウォールの制御について、ここで深くは述べ
  るつもりはありません。この件についてはとてもよく出来た HOWTO が次のと
  ころにありますから、ここでは基本についてだけ述べます。
  http://netfilter.samba.org/ipchains/HOWTO.html
  に HOWTO があります。

  チェインは名前で扱います。まず、input, output そして forward という組
  み込み済みチェインがあり、これらは削除できません。自分でチェインを作る
  ことができます。そして、これらのチェインのルールセットに対してルールを
  追加したり削除していくことができます。

  全てのチェインに対して行える操作は以下の通りです -

  1. 新しいチェインを作る (-N).

  2. 空のチェインを削除する (-X).

  3. 組み込みチェインのポリシーを変更する (-P).

  4. チェインにあるルールをリストする (-L).

  5. チェインのルールを全て消します (-F).

  6. チェインにある全てのルールのパケットとバイト数のカウンタをゼロにす
     る (-Z).

  チェイン内部でルールを操作するにはいくつかの方法があります -

  1. チェインに新しいルールを加える (-A).

  2. チェインの適当な場所に新しいルールを入れる (-I).

  3. チェインの適当な場所でルールを置き換える (-R).

  4. チェインの適当な場所でルールを削除する (-D).

  5. チェインに適合する最初のルールを削除する (-D).

  ipchains はマスカレーディングの操作の置場所としても良い所なので、この
  為の操作がいくつかあります -

  1. 現在のマスカレードされた接続をリストする (-M -L).

  2. マスカレードのタイムアウト値を設定する (-M -S).

  ファイアウォールルールの変更に関してはタイミングの問題がいくつかありま
  す。注意深くやらないと、変更している間に不完全なところからパケットを通
  してしまいます。もっとも単純な方法は次のようにすることです -

       # ipchains -I input 1 -j DENY
       # ipchains -I output 1 -j DENY
       # ipchains -I forward 1 -j DENY

  ... 変更します ...

       # ipchains -D input 1
       # ipchains -D output 1
       # ipchains -D forward 1
       #

  この方法は、変更している間に全てのパケットを落します。

  これは ipchains について、これまで述べたファイアウォールルールをまとめ
  たものです。

  #!/bin/sh
  #
  # rc.firewall の記述。
  #
  ## 全てを破棄して最初から始動する。
    /sbin/ipchains -F input
    /sbin/ipchains -F output
    /sbin/ipchains -F forward

  ## HTTP 透過プロキシに対してリダイレクトする。
    #$IPCHAINS  -A input -p tcp -s 192.1.2.0/24 -d 0.0.0.0/0 80 -j REDIRECT 8080

  ## あなた自身のチェインを作る。
    /sbin/ipchains -N my-chain
    # サーバに来る email を許可する。
    /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT
    # 外側の email サーバに email 接続を許可する。
    /sbin/ipchains -A my-chain -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT
    # あなたの web サーバに Web 接続を許可する。
    /sbin/ipchains -A my-chain -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT
    # 外側の Web サーバに Web 接続を許可する。
    /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT
    # DNS トラフィックを許可する。
    /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT

  ## マスカレードを使っているなら、
    # 内側から内側へのトラフィックをマスクしない。
    /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT
    # 外部インターフェースを直接マスクしない。
    /sbin/ipchains -A forward -s 24.94.1.0/24 -d 0.0.0.0/0 -j ACCEPT
    # 外側に向かう全ての内部 IP をマスカレードする。
    /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0.0.0.0/0 -j MASQ

  ## 全てを不許可にする。
    /sbin/ipchains -P my-chain input DENY

  ここでやめてはいけません。これは完璧なファイアウォールではありません
  し、あなたは提供している他のサービスがあるはずです。繰り返しますが
  IPCHAINS-HOWTO を読みましょう。

  【訳注: IPCHAINS-HOWTO 日本語訳
   もありま
  す。】

  9.  透過 squid プロキシをインストールする

  squid プロキシは次のところで入手できます。 ftp://ftp.squid-
  cache.org/pub/ 

  SQUID の開発者は RedHat と Debian パッケージを提供しています。可能なら
  これらパッケージのどれかを使用します。

  【訳注: 原文では SQUID と大文字で書かれているのですが、日本語訳では
  squid としていますのでご注意ください。

  squid の メインページとFAQ ページは次のところにあります。
  http://www.squid-cache.org/
  http://www.squid-cache.org/Doc/FAQ/FAQ.html 】

  10.  TIS プロキシサーバをインストールする

  10.1.  ソフトウェアを入手する

  TIS FWTK は次のところで入手できます。
  http://www.tis.com/research/software/
  

  私がやったような間違いをしてはいけません。 TIS からファイルを ftp する
  時、 README をしっかり読んでください。 TIS fwtk はサーバの隠しディレク
  トリに置かれています。

  TIS は、次の場所で
  http://www.tis.com/research/software/fwtk_readme.html
   同意書を読み、
  それから隠しディレクトリの名称を知らせてもらう為に本文に同意す
  る(accepted)とだけ書いて次のアドレス宛にメールを送るよう要請していま
  す。 fwtk-request@tislabs.com 
  subject は不要です。 TIS のシステムはソースをダウンロードできる (12 時
  間有効の) ディレクトリの名を書いたメールを返送してきます。

  この文書を書いている時点での FWTK の最新版は 2.1 です。

  10.2.  TIS FWTK をコンパイルする

  FWTK の Version 2.1 は、旧版のどれよりも簡単にコンパイルできます。

  説明はこれだけ!!!

  さあ、 make を実行しましょう。

  10.3.  TIS FWTK をインストールする

  make install を実行しましょう。

  デフォルトでインストールされるディレクトリは、/usr/local/etc です。
  (私は変更はしていませんが) インストールディレクトリはもっと安全なディ
  レクトリに変更できます。私はデフォルトのディレクトリを 'chmod 700' に
  変更しています。

  最後にファイアウォールを設定する仕事が残っています。

  10.4.  TIS FWTK を設定する

  さて、ここから佳境に入ります。これらの新しいサービスの呼び出しをシステ
  ムに教えてやり、それらを制御するテーブルを作らなくてはいけません。

  ここで TIS FWTK のマニュアルをもう一度書くつもりはありません。私が動作
  を確認した設定、はまりこんだ問題を説明し、それらを回避する方法について
  お伝えします。

  制御を構成する三つのファイルがあります。

  o  /etc/services

     o  サービスがどのポートで行われるかをシステムに知らせる。

  o  /etc/inetd.conf

     o  何者かがサービスポートを叩いたときに、呼び出されるプログラムをリ
        ストしてシステムに知らせる。

  o  /usr/local/etc/netperm-table

     o  サービスを許可と拒否している者を FWTK サービスに知らせる。

  FWTK の機能を使う為に、これらのファイルを手順に従って編集しなければい
  けません。 inetd.conf や netperm-table ファイルを正しく設定しないでサ
  ービスファイルを編集すると、お使いのシステムにアクセスできなくなりま
  す。

  10.4.1.  netperm-table ファイル

  このファイルは TIS FWTK のサービスにアクセスできる者をコントロールしま
  す。ファイアウォールの両側からのトラフィックについて考えなければいけま
  せん。ネットの外部の人たちはアクセスする前に認証すべきですが、ネットワ
  ークの内部の人たちは単に通過を許可するように設定する場合もあります。

  そこでユーザが自分自身を認証できるように、ファイアウォールはユーザの
  ID とパスワードのデータベースを保管する authsrv と呼ばれるプログラムを
  使います。 netperm-table の認証部分は、データベースが保存される場所
  と、それにアクセスできる人をコントロールします。

  私は、このサービスへのアクセスを止めてしまうトラブルに遭遇しました。全
  ての人がアクセスできるように、 '*' を使っている premit-host 行に注意し
  てください。動かすことができるようになったならば、この行の正しい設定は
  .Pp

    #
    # Proxy configuration table
    #
    # Authentication server and client rules
    authsrv:      database /usr/local/etc/fw-authdb
    authsrv:      permit-hosts *
    authsrv:      badsleep 1200
    authsrv:      nobogus true
    # Client Applications using the Authentication server
    *:            authserver 127.0.0.1 114

  データベースを初期化するため、su で root になります。そして
  /var/local/etc で管理用ユーザ記録を作成する為に ./authsrv を動かしま
  す。例を示しておきます。

  FWTK の文書を読み users と groups を加える方法について調べてください。

      #
      # authsrv
      authsrv# list
      authsrv# adduser admin "Auth DB admin"
      ok - user added initially disabled
      authsrv# ena admin
      enabled
      authsrv# proto admin pass
      changed
      authsrv# pass admin "plugh"
      Password changed.
      authsrv# superwiz admin
      set wizard
      authsrv# list
      Report for users in database
      user   group  longname           ok?    proto   last
      ------ ------ ------------------ -----  ------  -----
      admin         Auth DB admin      ena    passw   never
      authsrv# display admin
      Report for user admin (Auth DB admin)
      Authentication protocol: password
      Flags: WIZARD
      authsrv# ^D
      EOT
      #

  telnet gateway (tn-gw) コントロールは正確に、しかも最初に設定を行わな
  ければなりません。

  私の例では、プライベートネットワーク内部のホストには自身の認証なしで通
  過を許可しています(permit-hosts 19961.2.* -passok) 。しかし、その他の
  ユーザはプロキシを使う為に、自分の ID とパスワードを入力しなければなり
  ません (permit-hosts * -auth)。

  ここではまた、一台の別のシステム(192.1.2.202)からはファイアウォールを
  通さないで、直接ファイアウォールマシンへのアクセスを許可しています。二
  つのinetacl-in.telnetd 行がこれを行います。どのようにしてこれらの行が
  呼び出されるかは後で説明します。

  telnet のタイムアウトは短くしたほうがよいでしょう。

    # telnet ゲートウェイルール -
    tn-gw:                denial-msg      /usr/local/etc/tn-deny.txt
    tn-gw:                welcome-msg     /usr/local/etc/tn-welcome.txt
    tn-gw:                help-msg        /usr/local/etc/tn-help.txt
    tn-gw:                timeout 90
    tn-gw:                permit-hosts 192.1.2.* -passok -xok
    tn-gw:                permit-hosts * -auth
    # 管理者だけがポート 24 経由でファイアウォールに直接 telnet できます。
    netacl-in.telnetd: permit-hosts 192.1.2.202 -exec /usr/sbin/in.telnetd

  (rlogin や rcp や rshなどの)リモート関連コマンドは telnet と同じような
  方法で動きます。

    # rlogin ゲートウェイルール -
    rlogin-gw:    denial-msg      /usr/local/etc/rlogin-deny.txt
    rlogin-gw:    welcome-msg     /usr/local/etc/rlogin-welcome.txt
    rlogin-gw:    help-msg        /usr/local/etc/rlogin-help.txt
    rlogin-gw:    timeout 90
    rlogin-gw:    permit-hosts 192.1.2.* -passok -xok
    rlogin-gw:    permit-hosts * -auth -xok
    # 管理者だけがポートを通じてファイアウォールに直接 telnetできます。
    netacl-rlogind: permit-hosts 192.1.2.202 -exec /usr/libexec/rlogind -a

  FTP も含め、ファイアウォールを直接アクセスできるようにすべきではありま
  せん。そのためファイアウォールに FTP サーバを置いてはいけません。

  次の permit-hosts 行は、保護されたネットワーク内に居る全ての者にインタ
  ーネットへの自由なアクセスを許可し、その他の者は自分自身を認証しなけれ
  ばなりません。私は送受信した全てのファイルの記録を取る設定も含めてあり
  ます。 (-log { retr stor })

  ftp のタイムアウトは、接続が入力がないままオープンになっている時間をど
  れくらいにするのかと同じように、不正な接続を停止するのに必要な時間をど
  れくらいにするかを制御します。

    # ftp gateway rules:
    ftp-gw:               denial-msg      /usr/local/etc/ftp-deny.txt
    ftp-gw:               welcome-msg     /usr/local/etc/ftp-welcome.txt
    ftp-gw:               help-msg        /usr/local/etc/ftp-help.txt
    ftp-gw:               timeout 300
    ftp-gw:               permit-hosts 192.1.2.* -log { retr stor }
    ftp-gw:               permit-hosts * -authall -log { retr stor }

  Web, gopher, ブラウザを使った ftp は http-gw によって制御されます。最
  初の二行は ftp やファイアウォールを通って渡されているような web 文書を
  置くディレクトリを作ります。私はこれらのファイルを root 所有にし、root
  のみがアクセスできるディレクトリに置いています。

  Web 接続は短くしたほうがよいでしょう。ユーザが不正な接続でどれくらい待
  つかを制御します。

    # www and gopher gateway rules:
    http-gw:      userid          root
    http-gw:      directory       /jail
    http-gw:      timeout 90
    http-gw:      default-httpd   www.afs.net
    http-gw:      hosts           192.1.2.* -log { read write ftp }
    http-gw:      deny-hosts      *

  ssl-gw は実際はなんでも通してしまう gateway です。注意してください。こ
  の例では、私はアドレス 127.0.0.* と 192.1.1.* それから、ポート 443 か
  ら 563 上でだけ、ネットワークの外部のどのサーバにも接続するため保護さ
  れたネットワークの内部で全ての人を許可しています。ポート 443 から 563
  は SSL ポートです。

    # ssl gateway rules:
    ssl-gw:         timeout 300
    ssl-gw:         hosts           192.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 }
    ssl-gw:         deny-hosts      *

  ここでは、新しいサーバに接続を許可する為に plug-gw をどのように使うか
  についての例を示します。この例で、私は保護されたネットワークの内側で一
  つのシステムにだけ接続し、それが新しいポートにだけ接続するのを全ての人
  に許可します。

  二行目は保護されたネットワークにそのデータを戻す為に新しいサーバを許可
  します。

  殆どのクライアントはユーザがニュースを読んでいる間は接続状態にあること
  を期待しますから、ニュースサーバのタイムアウトは長くしておくべきです。

    # NetNews Pluged gateway
    plug-gw:        timeout 3600
    plug-gw: port nntp 192.1.2.* -plug-to 24.94.1.22 -port nntp
    plug-gw: port nntp 24.94.1.22 -plug-to 192.1.2.* -port nntp

  finger gateway はシンプルです。保護されたネットワークの内部の人は誰で
  も最初にログインしなければならず、その後ファイアウォール上の finger プ
  ログラムを使うことができます。それ以外の全ての人は次のようなメッセージ
  を受け取ります。

    # Enable finger service
    netacl-fingerd: permit-hosts 192.1.2.* -exec /usr/libexec/fingerd
    netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt

  私は Mail と X Window System のサービスの設定をしていないので、ここに
  は例を含めていません。どなたか動いている例をお持ちなら e-mail で私に
  送ってください。

  10.4.2.  /etc/services ファイル

  ここが全ての始まりです。クライアントがファイアウォールに接続するとき、
  既知のポート( 1024 より以下)に接続します。たとえばtelnet はポート23 上
  に接続します。inetd デーモンはこの接続を知ると、 /etc/services ファイ
  ルにあるこれらのサービスの名前を探します。それから /etc/inetd.conf
  ファイルにある名前に割り当てられたプログラムを呼び出します。

  われわれが作成しているサービスのあるものは、普通は /etc/services ファ
  イルにはありません。あなたは、自分が望むどれかのポートに何かのサービス
  を割り当てることができます。例えば、私は管理者の telnet ポート
  (telnet-a) をポート24 に割り当てています。お望みならポート 2323 にそれ
  を割り当てることもできます。ファイアウォールに直接接続する管理者(あな
  た)に対して、私が行ったように、あなたがご自分の netperm-table ファイル
  を設定するならポート23 ではなく、ポート24 にtelnet する必要があり、保
  護されたネットワークの内部で、一つのシステムからこれをできるようにする
  だけです。

    telnet-a        24/tcp
    ftp-gw          21/tcp           # this named changed
    auth            113/tcp   ident    # User Verification
    ssl-gw          443/tcp

  11.  SOCKS プロキシサーバ

  11.1.  プロキシサーバを設定する

  SOCKS プロキシサーバは次のところから入手できます。
  http://www.socks.nec.com/

  お使いのシステムのディレクトリでファイルを解凍、展開し、指示にしたがっ
  て make してください。私が行ったときは少し問題ありました。Makefile が
  正しいことを確認してください。

  一つ大事なことは、プロキシサーバは /etc/inetd.conf に追加しなければい
  けません。要求があったとき稼働するようサーバに伝えるため、次の行を追加
  してください -

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

  11.2.  プロキシサーバを設定する

  SOCKS プログラムには二つの独立した設定ファイルが必要です。一つはアクセ
  スを許可したことを伝え、もう一つは適切なプロキシサーバへの要求に対して
  経路を決めるものです。ルーティングファイルは全ての UNIX マシンに置かれ
  ていなくてはいけません。 DOS と、たぶんマッキントッシュは自分でルー
  ティングを行うでしょう。

  11.2.1.  アクセスファイル

  socks4.2 Beta では、アクセスファイルは "sockd.conf" という名前になって
  います。許可と拒否行の 2行があります。それぞれの行は三つのエントリーを
  持ちます。

  o  The Identifier (permit/deny)

  o  The IP address

  o  The address modifier

  Identifier は許可か拒否(permit/deny)のどちらかです。許可と拒否の両方を
  書くようにしなければなりません。

  IP アドレスは通常の IP 10 進ドット記法 で 4 バイトアドレスで書かれま
  す。例えば、192.168.1.0 のようになります。

  アドレス修正もまた通常の IP アドレス 4 バイト長です。ネットマスクのよ
  うに働きます。 32 bits (1 または 0 など)になるようにこの数値を想定して
  います。 bit が 1 なら、予約されているアドレスに対応する bit は、IP ア
  ドレスの領域で対応する bit に一致しなければいけません。例えば、次のよ
  うな行の場合 -

      permit 192.168.1.23 255.255.255.255

  192.168.1.23 に全ての bit が一致する IP アドレス、つまり 192.168.1.23
  だけが許可されます。次のような行の場合では -

      permit 192.168.1.0 255.255.255.0

  192.168.1.255 から 192.168.1.0 のグループ内にある C クラスのドメインの
  全ての数値を許可します。次のような行を書くべきではありません -

      permit 192.168.1.0 0.0.0.0

  この場合は、全てのアドレスをおかまいなしに許可してしまいます。

  そこで、まず許可したい全てのアドレスを許可し、それから、残りを拒否しま
  す。ドメイン 192.168.1.xxx で、全てを許可するには次のようにします -

      permit 192.168.1.0 255.255.255.0
      deny 0.0.0.0 0.0.0.0

  これはうまく動くでしょう。拒否行にある最初の  "0.0.0.0" に注意してくだ
  さい。アドレス修正が 0.0.0.0 になっているので、IP アドレス領域は意味を
  持ちません。通常全て 0 で、これは入力が簡単なためです。

  どちらに対してもふたつ以上のエントリを指定することができます。

  特別なユーザもまた許可あるいは拒否することができます。これは ident 認
  証を通して行われます。Trumpet Winsock もそうですが、ident をサポートし
  ていないシステムがあるため、私はここでそれについては述べません。この件
  については、socks 付属の文書がふさわしいでしょう。

  11.2.2.  ルーティングファイル

  SOCKS のルーティングファイルは "socks.conf" というあまりよくない名前に
  なっています。私が、"あまりよくない名前" だと言うのは、アクセスファイ
  ルの名前によく似ているので、この二つが混乱しやすいという理由からです。

  ルーティングファイルは SOCKS クライアントに socks を使用すべきときと、
  使わなくていいときを伝える為にあります。例えば、われわれのネットワーク
  で、 192.168.1.3 が 192.168.1.1 のファイアウォールと話す為に socks を
  使う必要はありません。イーサネットを通して直接つながっていま
  す。127.0.0.1は loopback として自動的に定義されます。もちろん自分自身
  と話す為に SOCKS は必要ではありません。ここには三つのエントリー群があ
  ります。

  o  deny

  o  direct

  o  sockd

  拒否(deny)は SOCKS に要求を拒否する場合を伝えます。このエントリーに
  は、 sockd.conf ファイル内で、identifier 、address そして、modifier の
  三つの部分があります。これは一般的に sockd.conf 、つまりアクセスファイ
  ルによっても扱われるので、アドレス修正フィールドは 0.0.0.0 に設定され
  ます。どこからでも呼び出されないよう自分自身を除外したいなら、ここで設
  定できます。

  direct エントリーは、どのアドレスが socks を使わないかを伝えます。プロ
  キシサーバなしに到達できる全てのアドレスがあります。ここでもまた
  identifier、address、modifierの三つの部分があります。わわわれの例では
  次のようになっています。

      direct 192.168.1.0 255.255.255.0

  あなたの保護されたネットワーク上では誰に対しても直接接続します。

  sockd のエントリーはどのホストが socks サーバデーモンを持っているかを
  コンピュータに伝えます。構文は次のようになります。

    sockd @=  

  @= というエントリーに注意してください。これはプロキシサーバのリストの
  IP アドレスの設定を許可します。われわれの例では、一つのプロキシサーバ
  を使うだけですが、あなたはより大きな負荷を許可することで多数持つように
  でき、失敗した場合の繰り返しのため複数で指定することもできます。

  IP アドレスと modifier の部分は、別に示した例と同様に動きます。どのア
  ドレスが通過していくかを指定します。

  11.2.3.  ファイアウォールの後ろで DNS を動かす

  ファイアウォールの後ろで DNS(ドメインネームサーバ)を設定するのは、比較
  的簡単なことです。ただ単にファイアウォールマシンに DNS を設定すればよ
  いだけです。このように DNS を使う為にファイアウォールの後ろ側でそれぞ
  れのマシンを設定します。

  11.3.  プロキシサーバを動かす

  11.3.1.  Unix

  プロキシサーバでアプリケーションを動かす為には、 "SOCKS 化(sockified)
  "が必要です。直結のコミュニケーション用に一つと、プロキシサーバを通し
  てのコミュニケーション用の二種類の telnet が必要です。SOCKS にはプログ
  ラムをどのように SOCK 化するかについての手順書と、数個のSOCKS 化されて
  いないプログラムを同封しています。あなたがどこかに直接接続するた
  めSOCKS 化された版を使うなら、 SOCKS は自動的にあなたの為に直接接続用
  の版に変更するでしょう。このため、保護されたネットワーク上で全ての関連
  プログラムをリネームし、もともとの名前のものを SOCK 化されたプログラム
  で置き換えたいわけです。 "Finger" は  "finger.orig", に、 "telnet" は
  "telnet.orig", のようになります。これらを include/socks.h でそれぞれに
  ついて SOCKS に伝えてやらなくてはいけません。

  ある種のプログラムはそれ自身でルーティングと SOCKS 化を処理します。
  Netscape はそれらの一つです。 Netscape でプロキシのもとで SOCK の場所
  にサーバのアドレス(われわれの場合は、192.168.1.1 )を入力してプロキシサ
  ーバを使うことができます。少なくともそれぞれのアプリケーションは、プロ
  キシサーバをどのように使うかに関わらず、多少の試行錯誤は必要です。

  11.3.2.  Trumpet Winsock を持った MS Windows

  Trumpet Winsock にはプロキシサーバを扱う機能が組み込まれています。
  "セットアップ"メニューで、サーバの IP アドレスと、直接的に到達可能な全
  てのコンピュータのアドレスを入力します。そうすれば Trumpet は外に向か
  う全てのパケットを扱います。

  【訳注: Trumpet Winsock は Windows 3.1 の為の TCP/IP プロトコルスタッ
  クソフトウェアです。詳細は PC-TCPIP-FAQ-J  をご覧ください。】

  11.3.3.  UDP パケットで動かす為にプロキシサーバを入手する

  SOCKS パッケージはTCP パケットだけを処理し、UDP は扱いません。このた
  め、このパッケージが全く役にたたない場面が出てきます。talk や Archie
  のような多くの有用なプログラムは UDP を使います。Tom Fitzgerald
   さんによって、 UDP relay と呼ばれる UDP パケットに対し
  てプロキシサーバとして使うように設計されたパッケージが作成されていま
  す。ただし、残念ですが、この文書を書いている時点では Linux との互換性
  はありません。

  11.4.  プロキシサーバの欠点

  プロキシサーバはとりわけセキュリティデバイス です。限られた IP アドレ
  スでインターネットへのアクセスを増やす為にプロキシを使うのは、多くの欠
  点も伴います。プロキシサーバは保護されたネットワークの内部から外部へよ
  り多くのアクセスを許可しますが、外部からは完全に内部がアクセスできませ
  ん。このようにするとサーバが使えない、 talk や archieへの接続ができな
  い、あるいは内部のコンピュータに直接メールできないということになりま
  す。これらの欠点は取るにたらないことのようにも思えますが、次のように考
  えて見てください。

  o  あなたはファイアウォールで保護されたネットワークの内部にあるコン
     ピュータに、現在取りかかっているレポートを忘れてきました。今は家に
     いて、ファイアウォールを越えようと決心したのですが、どうやっても越
     えられません。コンピュータはファイアウォールの向こう側にあるのでア
     クセスできません。さもなければとファイアウォールにログインしようと
     しますが、ファイアウォールには誰もがプロキシサーバ経由でアクセスし
     ますから、ファイアウォールマシンにはあなたのアカウントが設定されて
     いないためログインもできません。

  o  あなたの娘は大学に行っています。あなたは彼女に email を送りたいとし
     ます。何かプライベートな用件を伝えたいので、あなたのメールを直接娘
     のマシンに送りたいのです。あなたはシステム管理者を完全に信頼してい
     ますが、それでもなお、これはプライベートなメールなのですから。

  o  UDP パケットを使うことができないというのは、プロキシサーバのもつ大
     きな欠点です。私は UDP を扱う機能はまもなく到来するだろうと思ってい
     ます。

  FTP はプロキシサーバで別の問題を起こします。lsを使うと、 FTP サーバは
  クライアントマシン上でソケットを開き、そこから情報を送ります。プロキシ
  サーバはこれを許可していませんので、 FTP はこの場合には動きません。

  更に、プロキシサーバは遅いです。他のどんな方法よりもオーバヘッドが大き
  くなるので、プロキシサーバ経由以外の手段でアクセスする方が速くなりま
  す。

  基本的に、あなたが IP アドレスを持っていても、セキュリティについて悩ん
  でいないなら、ファイアウォールやプロキシサーバを使わなくてよいので
  す。IP アドレスを持っていないなら、セキュリティについてもまた悩まない
  でしょうが、Term, Slirp や TIA のような IP エミュレータを使ってみたい
  でしょう。 Term はftp://sunsite.unc.edu で入手
  できます。Slirp はftp://blitzen.canberra.edu.au/pub/slirp
  から入手できます。 TIA  は
  marketplace.com で入手できます。

  これらのパッケージはより高速に動き、よりよい接続を許可し、インターネッ
  トから内部ネットワークにより多くのアクセスを提供します。プロキシサーバ
  は設定と維持に手間がかからないので、手っ取り早くインターネットに接続し
  たい多くのホストを持っているようなネットワークにとっては便利なもので
  す。

  12.  上級の設定

  この文書を締めくくる前に、検討したい設定があります。多分、今までの概要
  の説明で大部分の人は足りるでしょう。しかし、次の項でいくつかの疑問を解
  決できるもっと上級の設定を示そうと思います。今まで説明してきたことだけ
  ではあなたの疑問を解決できないのなら、あるいは、プロキシサーバとファイ
  アウォールによってどれほど多彩な設定が可能なのかという点に興味があるな
  ら、もうすこし読んでみてください。

  12.1.  安全性の重視が必要な大きなネットワーク

  さて、例として、あなたは millisha という結社のリーダーで、サイトをネッ
  トワークに接続したいと思っています。 50 台のコンピュータと 32 個 (5
  ビット) の IP 番号のサブネットがあります。信望者に異なることを言う理由
  から、ネットワーク内での様々なアクセスのレベルが必要です。その結果、
  ネットワークの特定部分をそれ以外の部分から保護する必要があるでしょう。

  そのレベルは -

  1. external(外部) レベル。誰でも見れるレベルです。新しい志願者を募る為
     に、情熱的な演説や派手なパフォーマンスを行なって、一般大衆に自分達
     のイメージをはっきりと印象づけるための場所です。

  2. Troop(実行部隊) external レベルを越えた人たちのレベルです。ここは邪
     悪な方法での人心掌握や、爆弾の製造方法について教えるところです。

  3. Mercenary(参謀本部)  ここは本当の計画を保持しています。このレベル内
     には、世界征服の方法、世間を騒がせた事件の真相などの全ての情報が保
     持されています。

     【訳注: 訳文は日本向けであることを鑑み原文と違っています。原文は以
     下のとおり - Here is where the real plans are keep. In this level
     is stored all the information on how the 3rd world government is
     going to take over the world, your plans involving Newt Gingrich,
     Oklahoma City, lown care products and what really is stored in that
     hangers at area 51.】

  12.1.1.  ネットワーク設定

  IP 番号の取り決め -

  o  番号の 1 つである 192.168.1.255 は、ブロードキャストアドレスなので
     使用できません。

  o  32 個の IP アドレスの内 23 個は 23 台のマシンに割り当てます。これら
     のマシンはインターネットにアクセスできるようにします。

  o  1 個の extra(特別な) IP アドレスをネットワーク上の Linux box に与え
     ます。

  o  1 個の extra IP アドレスをネットワーク上の異なる Linux box に与えま
     す。

  o  2 個の IP アドレスをルータに与えます。

  o  4 個残ってますが、ドメイン名 paul, ringo, john, george に与えます。
     これはちょっと面食らわしただけです。

  o  保護された両方のネットワークはアドレス 192.168.1.xxx です。

  次に、分離した 2つのネットワークを、それぞれ異なった部屋に構築します。
  2つのネットワークは赤外線イーサネットを使って接続されます。なので、
  ネットワークは部屋の外部から完全に隠されます。幸いにも赤外線イーサネッ
  トは、普通のイーサネットと全く同様に動作します。

  これらのネットワークは、extra IP アドレスを使って Linux box の 1つに接
  続されます。

  保護された 2つのネットワークが接続されたファイルサーバがあります。
  Troop 以上の人々が関与する世界征服計画用のサーバです。ファイルサーバは
  Troop ネットワーク用に 192.168.1.17 のアドレスを、 Mercenary ネットワ
  ーク用に 192.168.1.23 を持っています。異なるイーサネットカードを持たな
  ければならないので、異なる IP アドレスを持たなければなりません。その
  IP Forwarding はオフにします。

  両方の Linux box の IP Forwarding もオフにします。ルータは特に指定しな
  い限り 192.168.1.xxx に向かうパケットは転送しないので、インターネット
  から入って来れません。 IP Forwarding をオフにすることは、Troop ネット
  ワークからのパケットを Mercenary ネットワークに到達させないことと、そ
  の逆の流れもさせないことを意味します。

  また、異なるネットワークに異なるファイルを提供する設定を NFS サーバに
  もできます。これは役立つことで、シンボリックリンクを用いたちょっとした
  要領で、普通のファイルを全て共有することができます。この設定ともう一枚
  のイーサネットカードを用いることで、 3つ全てのネットワークにこの一台の
  ファイルサーバでファイルを提供することができます。

  12.1.2.  プロキシ設定

  さて、 3つ全てのレベルがその独自の邪な目的の為にネットワーク上の情報を
  傍受できるようにしたいので、 3つ全てでネットワークにアクセスできる必要
  があります。 external ネットワークは直接インターネットに接続されるの
  で、この界面にプロキシサーバを置いてはなりません。 Mercenary と Troop
  のネットワークはファイアウォールの後ろにあるので、ここにプロキシサーバ
  を設定する必要があります。

  両方のネットワークは非常に似た設定になります。両方のネットワークは同じ
  IP アドレスが割り当てられます。もっと興味深いものにする為に、いくつか
  の要素を加えてみたいと思います。

  1. 誰もファイルサーバをインターネットアクセス用に使ってはなりません。
     ファイルサーバがウィルスや他の意地悪なことにさらされることは、かな
     り重要なことなので、立ち入り禁止です。

  2. troop ネットワークからワールドワイドウェブにアクセスすることは許し
     ません。彼らは訓練中であり、この種の外部の情報の検索を許すことは結
     果として有害な結果に終わることがままあるものです。

  だから、Troop の Linux box 上の sockd.conf ファイルには次の行がありま
  す。

      deny 192.168.1.17 255.255.255.255

  そして、Mercenary のマシンには -

      deny 192.168.1.23 255.255.255.255

  があります。また、Troop の Linux box には次の行があり -

      deny 0.0.0.0 0.0.0.0 eq 80

  80 に等しい (eq) ポート (http のポート) にアクセスを試みる全てのマシン
  を拒否 (deny) します。他の全てのサービスをまだ許しています。ウェブアク
  セスのみ拒否しています。

  次に、両方のマシンのファイルには -

      permit 192.168.1.0 255.255.255.0

  があり、192.168.1.xxx のネットワーク上の全てのコンピュータが、既に拒否
  したこと (すなわち Troop ネットワークからのファイルサーバとウェブへの
  アクセス) を除き、このプロキシサーバを使うことを許します。

  Troop の方の sockd.conf ファイルは次のようになります -

      deny 192.168.1.17 255.255.255.255
      deny 0.0.0.0 0.0.0.0 eq 80
      permit 192.168.1.0 255.255.255.0

  そして Mercenary の方のファイルは次のようになります -

      deny 192.168.1.23 255.255.255.255
      permit 192.168.1.0 255.255.255.0

  全ての事柄を正しく設定したはずです。各ネットワークは適切に、程良い交流
  を保って分離されます。

  13.  簡単な管理の為に

  13.1.  ファイアウォールツール

  ファイアウォールを簡単に管理するためのソフトウェアパッケージがいくつか
  あります。

  これらのツールなしで管理する能力がなければ、これらは使えないことに注意
  してください。これらのスクリプトは管理を正しく行うことに役立ちますが、
  同様に間違った管理も簡単に行わせてくれます。

  Linux のフィルタルールと動作させる為に、グラフィカルなウェブベースのイ
  ンターフェースを開発しています。更に数社は Linux を基にその box 内に独
  自の管理プログラムを置くことにより商用ファイアウォールを作成していま
  す。 (素晴らしい)

  私は実のところ GUI 野郎ではありません。しかし、ある期間、ファイアウォ
  ールの GUI インターフェースを使ったことがあります。一目で全てのルール
  を見ることの出来る素晴らしいレポートを提供する機能が役立つことを知りま
  した。

  gfcc (GTK+ Firewall Control Center) は GTK+ アプリケーション
  で、ipchains パッケージに基づき、Linux のファイアウォールポリシーとル
  ールを制御できます。http://icarus.autostock.co.kr
   を訪れ、ダウンロードしてください。こ
  れは本当にいいツールです。

  appendex A に RC スクリプトを載せました。これらのスクリプトは gfcc が
  あってもなくても動作します。

  ファイアウォールの設定に利用可能なスクリプトがたくさんあります。一つは
  非常に完全なスクリプトで
  http://www.jasmine.org.uk/~simon/bookshelf/papers/instant-
  firewall/instant-firewall.html
   から入手できます。もう一つはよくできた
  スクリプトで http://www.pointman.org/  から
  入手できます。

  Kfirewall は ipchains か ipfwadm (使用するカーネルバージョンに依存しま
  す) 用の GUI フロントエンドです。
  http://megaman.ypsilonia.net/kfirewall/
  

  FCT はファイアウォールの設定用 HTML ベースのツールです。複数のインター
  フェースといくつかのインターネットサービス用のファイアウォール上で、IP
  フィルタコマンド (ipfwadm) のスクリプトを自動生成する特徴があります。
  http://www.fen.baynet.de/~ft114/FCT/firewall.htm
  

  13.2.  汎用ツール

  WebMin は汎用的なシステム管理パッケージです。ファイアウォールルールの
  管理には役立たないでしょうが、デーモンとプロセスの起動と停止には役立つ
  でしょう。このプログラムはとてもいいのですが、J. Cameron が IPCHAINS
  のモジュールを入れてくれることを望んでいます。 http://www.webmin.com/
  

  ISP の方なら、IPFA (IP Firewall Acounting) http://www.soaring-
  bird.com/ipfa/  について知りたいで
  しょう。月毎/日毎/分毎の記録が取れ、ウェブベースの GUI 管理メニューが
  あります。

  14.  プロキシファイアウォールをだめにする

  あなたの人生を台無しにしてあなたにセキュリティについて関心を持ち続けて
  いただく為に、プロキシファイアウォールをだめにすることがどんなに簡単か
  を説明します。

  この文書に書いてある全ての処置をしたので、非常に安全なサーバとネットワ
  ークになっています。 DMZ があり、ネットワークには誰も入りこめず、外部
  ネットワークへの接続は全て記録されるような完璧なネットワークです。ユー
  ザはインターネットに接続するのにプロキシを経由します。直接インターネッ
  トに接続できるユーザはいません。

  その後、一人のユーザが、自分専用のコネクションの為に、httptunnel
   の存在に気づきまし
  た。 httptunnel は HTTP のリクエストでトンネリングされた双方向の仮想的
  な (HTTP 以外のプロトコルを通せる) データパスを作ります。 HTTP リクエ
  ストを送りたいなら、HTTP プロキシ経由でできます。

  もしくは、ユーザ自身のシステムに Virtual Private Network (vpn) をイン
  ストールします。 http://sunsite.auc.dk/vpnd/
   を参照のこと。

  もしくは、単純に、ユーザ自身の NT システムにモデムを繋ぎ、ルーティング
  をオンにしてしまうかもしれません。

  最後に、プライベート LAN 上のワークステーション上で、インターネットへ
  の新しい経路を指すようデフォルトゲートウェイを変更します。

  そうなった時、このワークステーションからどこへでも行くことができます。
  ファイアウォール管理者が目にする唯一の物は、実に長々と続く DNS ルック
  アップの接続だけかもしれません。

  世界征服の時です!

  15.  APPENDEX A - スクリプトの例

  15.1.  GFCC を用いた RC スクリプト

  #!/bin/bash
  #
  # Firewall Script - Version 0.9.1
  #
  # chkconfig: 2345 09 99
  # 概要: 2.2.x カーネル用ファイアウォールスクリプト
  # テストの際には
  # -x を追加すること。
  #
  # 注意 -
  #
  # このスクリプトは RedHat 6.0 及びそれ以降のバージョン向けに書かれて
  # います。
  #
  # ウェブや ftp サーバのような公開サービスを提供する場合は注意して
  # ください。
  #
  # インストール -
  #  1. /etc/rc.d/init.d の中にこのファイルを置きます。
  #     (root にならなければならないでしょう...)
  #     "firewall" のような名前にします    :-)
  #     所有権を root にします -->  "chown root.root (ファイル名)"
  #     実行属性を立てます     -->  "chmod 755 (ファイル名)"
  #
  #  2. ファイアウォールルールを作る為に GFCC を使い、
  #     ファイル /etc/gfcc/rules/firewall.rule.sh に書き写します。
  #
  #  3. RedHat の init スクリプトにファイアウォールを
  #     追加します --> "chkconfig --add (ファイル名)"
  #     次回ルータを起動すると firewall サービスが自動的に起動するはずです!
  #     *前より少しは* 脆弱でなくなっているので、夜はぐっすり寝てください。
  #
  # リリースノート
  #   30 Jan, 2000 - GFCC スクリプトに変更
  #   11 Dec, 1999 - Mark Grennan  による更新
  #   20 July, 1999 - 最初の作品 - Anthony Ball 
  #

  ################################################

  # 関数ライブラリを読み込みます。
  . /etc/rc.d/init.d/functions

  # ネットワーク設定を読み込みます。
  . /etc/sysconfig/network

  # ネットワークが起動しているかチェックします。
  [ ${NETWORKING} = "no" ] && exit 0

  # 何が呼び出されたかを見ます。
  case "$1" in

    start)
          # アクセス機能の提供を開始します。
          action "Starting firewall: " /bin/true
          /etc/gfcc/rules/firewall.rule.sh
          action "Loading firewall modules: " /bin/true
  #       /sbin/insmod ip_masq_autofw
  #       /sbin/insmod ip_masq_suseeme
          /sbin/insmod ip_masq_ftp
          /sbin/insmod ip_masq_irc
  #       /sbin/insmod ip_masq_mfw
  #       /sbin/insmod ip_masq_portfw
  #       /sbin/insmod ip_masq_quake
          /sbin/insmod ip_masq_raudio
  #       /sbin/insmod ip_masq_user
  #       /sbin/insmod ip_masq_vdolive
          echo
          ;;

    stop)
          action "Stoping firewall: " /bin/true
          echo 0 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward

          echo
          ;;

    restart)
          action "Restarting firewall: " /bin/true
          $0 stop
          $0 start

          echo
          ;;

    status)
          # 設定内容をリスト表示します。
          /sbin/ipchains -L
          ;;

    test)
          action "Test Mode firewall: " /bin/true
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward
          echo 1 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -A input -j ACCEPT
          /sbin/ipchains -A output -j ACCEPT
          /sbin/ipchains -P forward DENY
          /sbin/ipchains -A forward -i $PUBLIC -j MASQ

          echo
          ;;

    *)
          echo "Usage: $0 {start|stop|restart|status|test}"
          exit 1

  esac

  15.2.  GFCC スクリプト

  このスクリプトは Graphical Firewall program (GFCC) によって生成されま
  した。これは動作するルールセットではありません。転写されたルールセット
  です。

  #!/bin/sh
  # Gtk+ ファイアウォールコントロールセンターが生成しました。

  IPCHAINS=/sbin/ipchains

  localnet="192.168.1.0/24"
  firewallhost="192.168.1.1/32"
  localhost="172.0.0.0/8"
  DNS1="24.94.163.119/32"
  DNS2="24.94.163.124/32"
  Broadcast="255.255.255.255/32"
  Multicast="224.0.0.0/8"
  Any="0.0.0.0/0"
  mail_grennan_com="192.168.1.1/32"
  mark_grennan_com="192.168.1.3/32"

  $IPCHAINS -P input DENY
  $IPCHAINS -P forward ACCEPT
  $IPCHAINS -P output ACCEPT

  $IPCHAINS -F
  $IPCHAINS -X

  # input ルール
  $IPCHAINS -A input -s $Any -d $Broadcast -j DENY
  $IPCHAINS -A input -p udp -s $Any -d $Any netbios-ns -j DENY
  $IPCHAINS -A input -p tcp -s $Any -d $Any netbios-ns -j DENY
  $IPCHAINS -A input -p udp -s $Any -d $Any netbios-dgm -j DENY
  $IPCHAINS -A input -p tcp -s $Any -d $Any netbios-dgm -j DENY
  $IPCHAINS -A input -p udp -s $Any -d $Any bootps -j DENY
  $IPCHAINS -A input -p udp -s $Any -d $Any bootpc -j DENY
  $IPCHAINS -A input -s $Multicast -d $Any -j DENY
  $IPCHAINS -A input -s $localhost -d $Any -i lo -j ACCEPT
  $IPCHAINS -A input -s $localnet -d $Any -i eth1 -j ACCEPT
  $IPCHAINS -A input -s $localnet -d $Broadcast -i eth1 -j ACCEPT
  $IPCHAINS -A input -p icmp -s $Any -d $Any -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any -j ACCEPT ! -y
  $IPCHAINS -A input -p udp -s $DNS1 domain -d $Any 1023:65535 -j ACCEPT
  $IPCHAINS -A input -p udp -s $DNS2 domain -d $Any 1023:65535 -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any ssh -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any telnet -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any smtp -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any pop-3 -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any auth -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any www -j ACCEPT
  $IPCHAINS -A input -p tcp -s $Any -d $Any ftp -j ACCEPT
  $IPCHAINS -A input -s $Any -d $Any -j DENY -l

  # forward ルール
  $IPCHAINS -A forward -s $localnet -d $Any -j MASQ

  # output ルール

  15.3.  GFCC を使わない RC スクリプト

  これは手書きで構築したファイアウォールのルールセットです。 GFCC は使い
  ません。

  #!/bin/bash
  #
  # Firewall Script - Version 0.9.0

  # chkconfig: 2345 09 99
  # 概要: 2.2.x カーネル用ファイアウォールスクリプト

  # テストの際には
  # -x を追加すること。

  #
  # 注意 -
  #
  # このスクリプトは RedHat 6.0 及びそれ以降のバージョン向けに書かれています。
  #
  #  このファイアウォールスクリプトは、大部分のダイアルアップかケーブルモデム
  #  を使用したルータで動く筈です。
  #  RedHat ディストリビューション用に作成しました。
  #
  #  web や ftp サーバのような公開サービスを提供する場合は注意してください。
  #
  # インストール -
  #  1. このファイルは RedHat システム用に作られています。このままで他の
  #     ディストリビューションでも動くと思いますが、もう一度確認した方が
  #     いいでしょう。
  #     もしかして動かないかもしれないから?!!?
  #     これらの手順は RedHat システムに適用します。
  #
  #  2. /etc/rc.d/init.d の中にこのファイルを置きます (root になって...)
  #     "firewall" のような名前にします    :-)
  #     所有権を root にします -->  "chown root.root <ファイル名>"
  #     実行権をつけます -->  "chmod 755 <ファイル名>"
  #
  #  3. ネットワーク、使用するインターフェース、DNS サーバの設定をします。
  #     uncomment で始まる行の下で、受付けサービスを選択し有効にします。
  #     "eth0" が使用する NIC か確認します (或はあなたのシステムのネットワーク
  #     インターフェース名に変更します)。
  #     テストするには -->  "/etc/rc.d/init.d/<ファイル名> start"
  #     ルールを一覧するには -->  "ipchains -L -n"
  #     誤りがあれば修正しましょう...  :-)
  #
  #  4. RedHat の init スクリプトにファイアウォールを追加します
  #                                     --> "chkconfig --add <ファイル名>"
  #     次回ルータを起動すると firewall サービスが自動的に起動するはずです!
  #     *前より少しは* 脆弱でなくなっているので、夜はぐっすり寝てください。
  #
  # リリースノート
  #   20 July, 1999 - 最初の作品 - Anthony Ball 
  #   11 Dec, 1999 - Mark Grennan  による更新
  #

  ################################################
  #  あなたのローカルネットワークに適合する値を記入してください。

  PRIVATENET=xxx.xxx.xxx.xxx/xx

  PUBLIC=ppp0
  PRIVATE=eth0

  # あなたの dns サーバの設定
  DNS1=xxx.xxx.xxx.xxx
  DNS2=xxx.xxx.xxx.xxx

  ################################################
  # ネットワークの設定に用いる汎用的な値を定義します。
  ANY=0.0.0.0/0
  ALLONES=255.255.255.255

  # 関数ライブラリを読み込みます。
  . /etc/rc.d/init.d/functions

  # ネットワーク設定を読み込みます。
  . /etc/sysconfig/network

  # ネットワークが起動しているかチェックします。
  [ ${NETWORKING} = "no" ] && exit 0

  # 何が呼び出されたかを見ます。
  case "$1" in

    start)
          # アクセス機能の提供を開始します。
          action "Starting firewall: " /bin/true

          ##
          ## 環境設定
          ##
          # 全てのチェインのリストを全消去します。
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward

          # input チェインに蓋をかぶせて、全てのポートをふさぎます。
          /sbin/ipchains -I input 1 -j DENY

          # ポリシーを否定 (DENY) に設定します。 (デフォルトはACCEPT)
          /sbin/ipchains -P input DENY
          /sbin/ipchains -P output ACCEPT
          /sbin/ipchains -P forward ACCEPT

          # パケットフォワーディングを有効にします。
          echo 1 > /proc/sys/net/ipv4/ip_forward

          ##
          ## モジュールのインストール
          ##
          # アクティブ ftp モジュールを読み込みます。
          # ローカルネットワーク上のマシンに非パッシヴ ftp アクセスが
          # できるようにします。
          # (但し、ルータ自身はマスカレードされていないので除外されます。)
          if ! ( /sbin/lsmod | /bin/grep masq_ftp > /dev/null ); then
              /sbin/insmod ip_masq_ftp
          fi

          ##
          ## セキュリティ関係
          ##
          # 現存するネットワークインターフェースおよび今後発生するであろう
          # ネットワークインターフェースに対し、発信アドレスの立証と偽装保護を
          # 有効にします。
          #
          #
          if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
              for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
                  echo 1 > $f
              done
          else
              echo
              echo "PROBLEMS SETTING UP IP SPOOFING PROTECTION.  BE WORRIED."
              echo
          fi

          # 現存する全てのネットワークインターフェースのブロードキャストを
          # 否定します。
          /sbin/ipchains -A input -d 0.0.0.0 -j DENY
          /sbin/ipchains -A input -d 255.255.255.255 -j DENY

          # これらはログ記録することなく否定します。
          /sbin/ipchains -A input -p udp -d $ANY 137 -j DENY   # NetBIOS over IP
          /sbin/ipchains -A input -p tcp -d $ANY 137 -j DENY   #   ""
          /sbin/ipchains -A input -p udp -d $ANY 138 -j DENY   #   ""
          /sbin/ipchains -A input -p tcp -d $ANY 138 -j DENY   #   ""
          /sbin/ipchains -A input -p udp -d $ANY 67 -j DENY    # bootp
          /sbin/ipchains -A input -p udp -d $ANY 68 -j DENY    #   ""
          /sbin/ipchains -A input -s 224.0.0.0/8 -j DENY       # Multicast addresses

          ##
          ## プライベートネットワークから発するパケットを許可します。
          ##
          # ループバックインターフェース上の全てのパケットを許可します。
          /sbin/ipchains -A input -i lo -j ACCEPT

          # 内部の "信頼できる" インターフェースから発せられるパケットを全て
          # 許可します。
          /sbin/ipchains -A input -i $PRIVATE -s $PRIVATENET -d $ANY -j ACCEPT
          /sbin/ipchains -A input -i $PRIVATE -d $ALLONES -j ACCEPT

          ##
          ## ファイアウォールへの外部サービスを許可します。
          ##
          # ICMP を許可します。
          /sbin/ipchains -A input -p icmp -j ACCEPT
          # TCP を許可します。
          # 【訳注: tcp syn パケット以外を許可します。】
          /sbin/ipchains -A input -p tcp ! -y -j ACCEPT

          # (ファイアウォール上の)DNS探索を許可します。
          /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY 1023: -j ACCEPT
          /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY 1023: -j ACCEPT
          # あるいは (より良い案として) キャッシュ DNS サーバをルータ上で
          # 稼動させ、上記の代わりに以下の行を用います。
          # /sbin/ipchains -A input -p udp -s $DNS1 domain -d $ANY domain -j ACCEPT
          # /sbin/ipchains -A input -p udp -s $DNS2 domain -d $ANY domain -j ACCEPT

          # 以下の行で ssh を許可します。
          /sbin/ipchains -A input -p tcp -d $ANY 22 -j ACCEPT

          # 以下の行で telnet を許可します。 (お薦めしません!!)
          /sbin/ipchains -A input -p tcp -d $ANY telnet -j ACCEPT

          # 以下の行でルータに NTP (network time protocol: ネットワーク
          # タイムプロトコル) を許可します。
          # /sbin/ipchains -A input -p udp -d $ANY ntp -j ACCEPT

          # SMTP を許可します。 (メールクライアントの為ではありません - サーバ
          # だけです)
          /sbin/ipchains -A input -p tcp -d $ANY smtp -j ACCEPT

          # POP3 を許可します。(メールクライアント用)
          /sbin/ipchains -A input -p tcp -d $ANY 110 -j ACCEPT

          # メール送信または ftp アクセスに用いる auth プロトコルを
          # 許可します。
          /sbin/ipchains -A input -p tcp -d $ANY auth -j ACCEPT

          # 外部からの HTTP アクセスを許可します。
          # (ルータ上で web サーバを稼働している場合に限ります。)
          /sbin/ipchains -A input -p tcp -d $ANY http -j ACCEPT
          # 外部からの FTP アクセスを許可します。
          /sbin/ipchains -A input -p tcp -d $ANY ftp -j ACCEPT

          ##
          ## マスカレード関係
          ##
          # 内部ネットワークから転送されたパケットをマスカレードします。
          /sbin/ipchains -A forward -s $PRIVATENET -d $ANY -j MASQ

          ##
          ## 上記以外の全てを拒否し、 /var/log/messages へログ記録します。
          ##
          /sbin/ipchains -A input -l -j DENY

          # input チェインにかぶせていた蓋を取り外します。
          /sbin/ipchains -D input 1

          ;;

    stop)
          action "Stoping firewall: " /bin/true
          echo 0 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward

          echo
          ;;

    restart)
          action "Restarting firewall: " /bin/true
          $0 stop
          $0 start

          echo
          ;;

    status)
          # 設定内容をリスト表示します。
          /sbin/ipchains -L
          ;;

    test)
          ##
          ## とても単純なファイアウォールのテストです。
          ## (*全く*セキュアではありません)
          ## 【訳注: パケットフィルタリングの設定を全て取り払い、
          ## マスカレードの設定のみ有効にします。
          ## この設定は長時間続けてはなりません。】
          action "WARNING Test Firewall: " /bin/true
          /sbin/ipchains -F input
          /sbin/ipchains -F output
          /sbin/ipchains -F forward
          echo 1 > /proc/sys/net/ipv4/ip_forward
          /sbin/ipchains -A input -j ACCEPT
          /sbin/ipchains -A output -j ACCEPT
          /sbin/ipchains -P forward DENY
          /sbin/ipchains -A forward -i $PUBLIC -j MASQ

          echo
          ;;

    *)
          echo "Usage: $0 {start|stop|restart|status|test}"
          exit 1

  esac

  16.  APPENDEX B - RedHat 用 VPN RC スクリプト

  #!/bin/sh
  #
  # vpnd            本シェルスクリプトは vpnd (Vertual Privage Network
  #                 connections / 仮想プライベートネットワーク接続) の
  #                 起動と停止を引き受けます。
  #
  # chkconfig: - 96 96
  # 概要: vpnd
  #

  # 関数ライブラリを読み込みます。
  . /etc/rc.d/init.d/functions

  # ネットワーク設定を読み込みます。
  . /etc/sysconfig/network

  # ネットワークが起動しているかチェックします。
  [ ${NETWORKING} = "no" ] && exit 0

  [ -f /usr/sbin/vpnd ] || exit 0

  [ -f /etc/vpnd.conf ] || exit 0

  RETVAL=0

  # 何が呼び出されたかを見ます。
  case "$1" in
    start)
          # デーモンの起動。
          echo -n "Starting vpnd: "
          daemon vpnd
          RETVAL=$?
          [ $RETVAL -eq 0 ] && touch /var/lock/subsys/vpnd
          echo
          ;;
    stop)
          # デーモンの停止。
          echo -n "Shutting down vpnd: "
          killproc vpnd
          RETVAL=$?
          [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/vpnd
          echo
          ;;
    restart)
          $0 stop
          $0 start
          ;;
    *)
          echo "Usage: vpnd {start|stop|restart}"
          exit 1
  esac

  exit $RETVAL

  17.  日本語訳について

  この文書は Firewalling and Proxy Server HOWTO v0.83, August 21, 2000
  版の日本語訳です。

  v0.4, 8 November 1996 は、こじまみつひろさん  が日
  本語に翻訳しました。(1997/03/26)

  Firewalling and Proxy Server HOWTO v0.83, August 21, 2000 版
  日本語訳: 2001年 9月 22日
  JF Project 「チーム Firewall」 翻訳者一覧(敬称略):

  o  1章  皆川哲朗  松田陽一
     

  o  2章から4章    松田陽一 

  o  5章から11章   中谷千絵 

  o  12章から16章  野本浩一 

  この文書を翻訳するにあたり、以下の方々からアドバイスをいただきまし
  た。(50音順)
  本当にありがとうございました。

  1章から4章

  o  MATSUDA Yoh-ichi さん 

  o  MIZUHARA Bun さん 

  o  NAKANO Takeo さん 

  o  TAKEI Nobumitsu さん 

  o  OBATA Noboru さん 

  5章から11章

  o  NAKANO Takeo さん 

  o  TAKEI Nobumitsu さん 

  o  HAYAKAWA Hitoshi さん 

  o  Seiji Kaneko さん 

  o  kanjikanji さん 

  12章から16章

  o  山田慎也さん 

  o  Seiji Kanekoさん 

  o  Hiro YAMAZAKIさん 

  o  Konkitiさん 

  o  佐野武俊さん 

  o  Masaharu Goto さん  

  o  Keitaro Yosimura さん 

  o  Tsutomu Kawashima さん 

  o  NAKANO Takeo さん 

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/