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 さん