インストールしたばかりの Linux から始めましょう(私は RedHat 3.0.3 を使っ ており、以下に示す例もこのディストリビューションのものです)。使用する ソフトウェアが少ないほど穴も小さくてすみ、抜け穴 と/あるいは バグによ るセキュリティの問題も少なくてすみます。ファイアウォールマシンで動かす アプリケーションは最小限にしましょう。
カーネルは安定したものを選びます。私は 2.0.14 を使いました。このドキュ メントもそのバージョンのカーネルに準じます。
Linux のカーネルを適切な設定でコンパイルします。この際には ``Kernel HOWTO'' や ``Ethernet HOWTO''、``NET-2 HOWTO'' などが有益でしょう。こ れらの HOWTO を読んだことが無ければ、ぜひ目を通すようにしてください。
以下に 'make config' の際に指定すべきネットワーク関連のオプションを示 します。
これらの設定を終えたらカーネルをコンパイルしてインストールし、再起動し てください。起動時のメッセージで複数枚のネットワークカードが認識されて いることを確認しておきましょう。もしうまくいかない場合、他の HOWTO を 参照してください。
2 枚のネットワークカードを装着している場合、/etc/lilo.conf ファイルで append 行に双方のカードの IRQ とアドレスを設定しなければなりません。 手元では以下のように設定しています。
append="ether=12,0x300,eth0 ether=15,0x340,eth1"
さぁいよいよ佳境に入ってきました。まずいくつかネットワークの設定を決め なければなりません。内部のネットワークからインターネットへ直接アクセス することは認めないので、内部のネットワークに正式のアドレスを割りあてる 必要はありません。インターネットに接続しないプライベートなネットワーク 用のアドレスはあらかじめいくつか決められているので、それらのアドレスを 使うことにします。インターネットの世界ではアドレスは不足気味です。また、 これらのプライベートアドレスを使う限り、間違ってインターネットにパケッ トを流してしまっても悪影響は出ないようになっているので、プライベートネッ トワークにはこの種のアドレスを使いましょう。
今回の例では 192.168.2.xxx というクラス C のアドレスを使うことにします。
プロキシファイアウォールはインターネットとプライベートネットワーク の双方に接続し、両者の間でデータをやりとりします。
199.1.2.10 __________ 192.168.2.1 _ __ _ \ | | / _______________ | \/ \/ | \| Firewall |/ | | / Internet \--------| System |------------| Workstation/s | \_/\_/\_/\_/ |__________| |_______________|
パケットフィルタリング式のファイアウォールの場合でもこれらのアドレスを 使うことが可能で、その際には IP masquerade を使うことになります。IP masquerade を使えば、ファイアウォールを越えてインターネットへ送られる パケットのアドレスは自動的に「本物の」 IP アドレス(199.1.2.10)に変換 されてからインターネットに出て行きます。
インターネットに接続する側(外側)のネットワークカードには正式な IP ア ドレスを付けなければいけません。一方、内側のネットワークカードには 192.168.2.1 のアドレスを割りあてます。この 192.168.2.1 のアドレスが内 部のネットワークにおけるプロキシ/ゲートウェイの IP アドレスになります。 これ以外の内部のネットワークに接続したマシンには 192.168.2.xxx という アドレスを与えます(192.168.2.2 から 192.168.2.254)。
私は RedHat Linux を使っていますので(誰かその他の設定例を下さい ;-)、 起動時のネットワークカードを設定するために /etc/sysconfig/network-scripts ディレクトリにある 'ifcfg-eth1' ファイ ルを修正しました。このファイルは起動時に読みこまれ、ネットワークとルー ティングテーブルを設定するために使われます。
以下に私の ifcfg-eth1 を示します。
#!/bin/sh #>>>Device type: ethernet #>>>Variable declarations: DEVICE=eth1 IPADDR=192.168.2.1 NETMASK=255.255.255.0 NETWORK=192.168.2.0 BROADCAST=192.168.2.255 GATEWAY=199.1.2.10 ONBOOT=yes #>>>End variable declarations
同じディクレトリにあるスクリプトを使ってモデム経由でプロバイダに自動的 に接続することも可能です。そのためには ipup-ppp スクリプトを見てみてく ださい。
インターネットと接続する際にモデムを経由して PPP や SLIP で ISP と接続 する場合、外側(ISP 側)の IP アドレスはプロバイダから自動的に割りあてら れます。
ifconfig と route コマンドでネットワークをチェックします。2 枚のネット ワークカードを使っている場合、ifconfig の出力は以下のようになるはずで す。
#ifconfig lo Link encap:Local Loopback inet addr:127.0.0.0 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:1620 errors:0 dropped:0 overruns:0 TX packets:1620 errors:0 dropped:0 overruns:0 eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55 inet addr:199.1.2.10 Bcast:199.1.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:12 Base address:0x310 eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7 inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 TX packets:0 errors:0 dropped:0 overruns:0 Interrupt:15 Base address:0x350
経路制御表はこのようになるでしょう:
#route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 199.1.2.0 * 255.255.255.0 U 1500 0 15 eth0 192.168.2.0 * 255.255.255.0 U 1500 0 0 eth1 127.0.0.0 * 255.0.0.0 U 3584 0 2 lo default 199.1.2.10 * UG 1500 0 72 eth0
注意: 199.1.2.0 がインターネット側のアドレスで 192.168.2.0 はプライベート側のアドレスです。
ここで firewall からインターネットへ ping してみます。テストには nic.ddn.mil を使いました。これは今でも良いテスト先ですが、以前ほどの信 頼性は無いようです。nic.ddn.mil が動いてない場合、別のインターネット上 のホストで試してみてください。それでもダメな場合は PPP が正しく設定で きていないのでしょう。``NET-2 HOWTO'' を読んで再度チェックしてみてくだ さい。
[国内では www.ntt.co.jp や www.iij.ad.jp あたりが妥当なテスト先で しょう。]
次に firewall から内部の防御されたネットワーク内のホストへ ping してみ ます。内部のネットワーク上のホスト間では相互に ping できるはずです。も しダメな場合、``NET-2 HOWTO'' を読み直してネットワークの設定をチェック しましょう。
次に内部のネットワークから firewall の外部ネットワーク側のアドレスへ ping してみます(注意:外のアドレスとは、192.168.2.xxx と違う IP アドレ スです)。もし ping できるようならば IP Forwarding が無効になっていませ ん。そういう設定にしたいのか確認してください。IP Forwarding 機能を使う 場合、この文書の IP フィルタリングの節も参照してください。
次にファイアウォールの中(内部のネットワーク上のホスト)からインターネッ ト上のホストへ ping してみます。その際には firewall から ping で確認し たホスト(例えば nic.ddn.mil)を使うのがいいでしょう。IP Forwarding 機能 が無効になっていれば ping は通らないはずです。
IP forwarding を有効にしていて、内部のネットワークに(192.168.2.* とは 違う)「本物の」IP アドレスを付けているにも関わらず、内部からインターネッ トへは ping できず、firewall のインターネット側からは ping できるよう な場合、firewall の接続先のルータにこちらの内部のネットワークに関する 情報が正しく定義されていないのかも知れません(その設定は接続先のプロバ イダの仕事かも知れません)。もちろん、内部のネットワークに 192.168.2.* のアドレスを付けている場合、外部からパケットを送ることはできません。
これで基本的な設定は完了しました。
ファイアウォールを設定しているマシンで使わないサービスをそのままにして おくのはよくありません。「悪者」が firewall にアクセスして、それらを悪 用するかも知れないからです。
そのためにも使わないサービスは使用停止にしましょう。/etc/inetd.conf ファ イルを見てください。このファイルが「スーバーサーバ」 inetd の設定ファ イルです。このファイルに様々なサービスを行なうデーモンとその起動方法が 記述されています。
netstat, systat, tftp, bootp, finger は忘れずに停止しましょう。サービ
スを使用停止にするには、そのサービスの行頭に # を付け加えます。必
要な設定を終えたら、"kill -HUP
<pid>"(<pid> は ined のプロセス番号)を実行し、
inetd に HUP シグナルを送ります。このシグナルを受けた inetd は設定ファ
イル(etc/inetd.conf
/)を読みこみ直して再起動します。
inetd を再起動したら、firewall の 15 番のポートへ telnet してみます (telnet firewall 15)。 netstat の出力が見えるようならば inetd が正しく 再起動されていません。