3-2. セキュリティへの対策 (1) パケットの流れ '96〜'97 * 一般の内部、外部ユ−ザのアクセス

Fig. 331
注.DNS のパケットは要注意。UDP,TCP と分けずに、一緒に扱った方が簡単で無難かも。
"13-1.(1) DNS設定の基本" を参照のこと。
A1 = 200.100.11.1 A2 = 200.100.11.2
B2 = 202.241.128.1 B3 = 202.241.128.2
A_net = 200.100.11.0 /netmask ffffff00 MASK = 0xffffff00
B_net = 202.241.128.0 /netmask ffffff00
* 管理者と特別ユ−ザのアクセス

Fig. 332
ゾ−ン転送の DNS/TCP は、 DNS の2次サ−バからゾ−ンデ−タのコピ−の要求に答える
ためのものである。DNS の2次サ−バは、専用線接続したプロバイダになってもらってい
るはずである。ここではそのホストを hostZ としている。 ホストの管理的なこととして、
hostA でのWWWサ−バのログやロッグインのログなどを取ることがある。そしてそのロ
グ情報を内部ネットのホストで見るようにしたい。 その場合 hostA と、内部のホストと
して hostC とすれば、両者で syslogd デ−モンを稼働させ、 ログを hostA から hostC
へ転送することができる。
また作業的なこととして、hostA のWWWサ−バのデ−タを更新する。このためには FTP
を hostA と内部ホストの間で張ることになる。この場合は安全性を考えて、 内部ホスト
から hostA へとアクセスするのがいいのでないか。hostA ではその時だけ inetd デ−モ
ンを稼働させ、FTP アクセスしたら直ぐに inetd は kill するのである。 これは、内部
ホストから hostA に telnet アクセスし、sendmail をバ−ジョンアップするような時に
もいえる。FTP や Telnet の外部から内部への方向はできるだけ止めておきたい。
* Proxy の利用とファイアウォ−ル `21/03 追加
hostG の FireWall-1 では、一般ユ−ザのホスト hostC,Dのパケットを通過させるル−ル
設定を行う。HTTP と DNS/UDP パケットなどの通過である。しかし実際、一般ユ−ザのホ
ストはこの2台だけではない。50台、百台となってきた時、いちいち全部のホストのル
−ル設定を FireWall-1 にするのだろうか。これはかなり繁雑な手間となる。そのため例
えば Apache を HTTP の Proxyサ−バとして、どこかのホストで稼働させるのである。こ
のホストでは DNS クライアントの設定もしておく。一般ホストの Netscape Navigatorな
どでは、Proxy 利用の設定をする。Proxy 利用にすると、 Windows 98 で確認したところ
DNS の設定はしても、しなくても関係なくなる。これで一般ホストの外部WWWへのアク
セスは、この Proxy サ−バのホストからのアクセスとなる。つまり Proxy にしたホスト
のIPアドレスだけ FireWall-1 を通せば済むことになる。
この手法を用いれば、FireWall-1 のライセンス数を無視できてしまう。 もちろん紳士読
者はそのようなことはないと思う。それなりのライセンス数の FireWall-1 を購入しての
ことだと思う。しかし、実際は FireWall-1 はそんな甘くはない。 FireWall-1 は通過す
るIPパケットの中の何かを見ている。でも発信元のMACアドレスは、Proxy サ−バの
マシンのになっているはずである。一体何を見てカウントしているのか?。ともかくライ
センス数がオ−バすると root 宛に警告のメ−ルを頻繁に出すようになる。FireWall-1の
マシンにロッグインして # mail コマンドを打ってみると分かる。あるいはディスプレイ
一杯に警告メッセ−ジが出る。かつては警告メッセ−ジだけでなくマシンをクラッシュさ
せたとか。それは噂だけだったのかも知れない。その後ライセンス数アップの手続きをし
た。それまでの間にマシンがクラッシュするようなことはなかったが。
(2) WANル−タの設定 '96〜'97
* フィルタリングのル−ル
a. hostB のみ外部IPアドレスの特定ホスト hostX から telnet を許す。
b. ソ−スル−ティング・オプションのついたパケットは内部に通さない。
c. spoofing attack の疑似パケットは内部に通さない。
d. 内部の経路情報で B_net 以外の情報は外部に流さない。
* PP in と PP out でフィルタをかける
PP out PP in
↑ | ↓ インタ−ネット側
--------------
| RT100i |
--------------
↑ | ↓ 内部ネット−ク側
Lan in Lan out
* 詳細ル−ル一覧
[ PP in でのパケットフィルタリングのル−ル ]
動作 |Protcol|Packet|始点アドレス| ポ−ト|終点アドレス| ポ−ト
------|-------|------|------------|-------|------------|-------
| TELNET| TCP | hostX | * | hostC | 23
| ICMP | ICMP | * | * | B_net | *
| DNS | UDP | * | 53 | hostA | 53
| IDENT | TCP | * | * | hostA | 113
通過 | SMTP | TCP | * | * | hostA | 25
| HTTP | TCP | * | * | hostA | 80
|-------|------|------------|-------|------------|-------
| DNS | TCP | hostZ | * | hostA | 53 1)
| TELNET| TCP | hostZ | * | A2 | 23 2)
| TFTP | UDP | hostZ | * | A2 | 69 3)
------|-------|------|------------|-------|------------|-------
遮断 | * | * | B_net | * | * | * 4)
※ この他 TCP パケットで ACK=1 フラッグの立っているものは通すようにする。これは
内部のホストが外部へアクセスした時の応答パケットである。これを設定しないと内
部ホストで、例えば Netscape Navigatorを使うような場合、 アクセス先から戻って
来る TCP パケットを受け取れなくなってしまう。
[ PP out でのパケットフィルタリングのル−ル ]
動作 |Protcol|Packet|始点アドレス| ポ−ト|終点アドレス| ポ−ト
------|-------|------|------------|-------|------------|-------
通過 | * | * | B_net | * | * | * 5)
------|-------|------|------------|-------|------------|-------
遮断 | * | * | * | * | * | * 6)
注.1) プロバイダで DNS のセカンダリになってもらうための、ゾ−ン転送に使う。
2) プロバイダがル−タのメンテナンスをするために telnet アクセスする。実際のと
ころ内ではこの設定はしなかった。他所でもやられる所はほとんど無いのでないか。
3) プロバイダがル−タのソフトをバ−ジョンアップするためのファイル転送用。ル−
タに tftp する。Yamaha RT100i は外から tftp を許すホストを指定できる。ここ
の設定は、実際はプロバイダの指示に従うこと。
4) 入って来るパケットに内部ネットのアドレスが発信元であるはずがない。疑似パケ
ットの spoofing attack への対策。
5) 一応内部からのパケットは全て通すようにした。より厳しいフィルタリングはファ
イアウォ−ルの所で制御する。NcFTP パケットはこのル−ルで通っていく。プロパ
イダがル−タへの telnet、tftp アクセスの戻りパケットも通す設定がいるかも。
6) 内部からのパケットは B_net からの発信に全てなるはずである。 B_net 以外の発
信パケットがあるとすればそれは偽造パケットである。
* Yamaha RT100i ル−タの設定
# pp line l64 << 128 Kbps の場合は l128 とする。
# save
# restart
|
# ル−タ LAN 側(バリアネット)
ip lan address B2 << バリアネット側IPアドレス。
ip lan netmask 0xffffff00 << ネットマスクの値。
ip lan broadcast 1 << デフォルト値、これでいいみたい。
ip lan route add net B_net/MASK B2 0 << バリアネットへの経路情報。
# ソ−スル−トが指定されたパケットは通さない。
ip filter source-route on
# ル−タのパケットの出口でのフィルタリング
ip filter 1 pass B_net/MASK * * * *
ip filter 2 reject * * * * *
# 偽装パケットを通さない
ip filter 10 reject B_net/MASK * * * * << spoofing attack。
# 外部からバリアネットまで通過を許可するパケット
ip filter 11 pass * B_net/MASK icmp * * << ICMP の ping など。
ip filter 12 pass * B_net/MASK established * * << ACK=1 のパケットを通す。
ip filter 13 pass hostZ hostA/MASK tcp * 53 << DNS/TCP。
ip filter 14 pass * hostA/MASK udp 53 53 << DNS/UDP。
ip filter 15 pass * hostA/MASK tcp * 113 << IDENT。
ip filter 16 pass * hostA/MASK tcp * 25 << SMTP。
ip filter 17 pass * hostA/MASK tcp * 80 << HTTP。
ip filter 18 pass hostX hostC/MASK tcp * 23 << TELNET。
# ル−タ PP 側
pp select leased << 専用線を使う。
leased# ip pp local adress A2 << 自分側ホストIPアドレス。
leased# ip pp remote adress A1 << 相手側ホストIPアドレス。
leased# ip pp netmask 0xffffff00 << ネットマスクの値。
leased# ip pp route add host A1 A2 0 << 専用線の相手ホストとの経路。
leased# ip pp route add net default 1 << デフォルト経路を専用線に向ける。
leased# ip pp routing protocol none << 動的経路制御は用いない。
leased# ip pp rip listen off << 外からの経路情報は無視する。
<< フィルタを 10 から 18 と順番にかける。
leased# ip pp secure filter in 10 11 12 13 14 15 16 17 18
leased# ip pp secure filter out 1 2 << 出口でのフィルタリング。
leased# pp enable leased << 上記設定を有効にする。
leased# save << 上記設定をセ−ブする。
(3) ファイアウォ−ルの設定 '96〜'97
* IPアドレス変換ル−ルのセット
|
------- WWW,DNS --------
|hostA| |Router|
------- 202.241.128.3 -------- 202.241.128.1
| |
-------*--------*-------------*----------------------------- 202.241.128.0
|
|le0
2O2.241.128.2 ------- 192.168.1.1 192.168.1.3 192.168.1.4
|hostG| ------- ------- -------
192.168.1.2 ------- |hostB| |hostC| |hostD|
|hme0 ------- ------- -------
| | | |
-----------------*---------*-------------*-------------*----- 192.168.1.0
メ−ルサ−バ
< FireWall-1 Address Translation Rules >
From Original To Original Method First Translated
Address Adress Adress
-------------------------------------------------------------------
192.168.1.3 192.168.1.4 FWXT_HIDE 202.241.128.2
※ hostC,D は一般ユ−ザのマシン。これらのホストからインタ−ネットにアクセスする
のは、hostG からのアクセスとみなす。上の FireWall-1 のIPアドレス変換ル−ル
により FWXT_HIDE 指定し、192.168.1.3〜4 からのアクセスは 202.241.128.2とする。
※ hostG の 192.168.1.2 ホストのIPアドレスは、FireWall-1 のIPアドレス変換ル
−ルには入れてはいけない。またその必要もない。
※ hostB と hostA の間はメ−ルの SMTP パケットをやりとりする。 hostB はプライベ
−トIPアドレス 192.168.1.1 のままで、202.241.128.3 の hostA とアクセスして
構わない。プライベ−トなIPアドレスのパケットが、パブリックなIPアドレスの
領域に出ていくのだが、ル−タを越えて行く訳でないので問題はない。
* フィルタリング・ル−ルのセット
Network Object を定義する。これは hostG での設定。
------------------------------------------------------------------------------
| Host Properties |
|----------------------------------------------------------------------------|
| Name: hostG << 管理下におくホスト名。 |
| IP Address: 2O2.241.128.2 << hostG の外向きのIPアドレス。|
| Location : [Internal] External |
| Type: Host [Gateway] << 文字通りゲ−トウェイ。 |
| FireWall-1: [Installed] Not Installed << FireWall-1 をこのホストに |
| | インスト−ルした。 |
| (Apply) (Reset) |
| -------------------------------------------------------------------------- |
| Network Interfaces |
| Spoof Valid |
| Name Net Address Net Mask Track Address |
| |
| 1. le0 2O2.241.128.0 255.255.255.0 ▽ L ▽ Others << 外側ネット |
| 2. hme0 192.168.1.0 255.255.255.0 ▽ L ▽ localnet << 内側ネット |
------------------------------------------------------------------------------
フィルタリング・ル−ルを設定する。
------------------------------------------------------------------------------
| Rule Base Editor : /etc/fw/conf/default.W |
|----------------------------------------------------------------------------|
| File Rule Policy Routers Utilities Properties |
| |
|Windows: □Network Objects □Users □Services □System View □Log Viewer |
| |
|-------------------------------------------------------------------------- |
||No.| Source | Destination | Services | Action | Track | Install On | |
||---|---------|-------------|--------------|--------|-------|------------| |
|| 1 | hostA | hostB | smtp ident | accept | | gate | | 1)
|| 2 | hostB | hostA | smtp ident | accept | | gate | | 1)
|| 3 | Group1 | Any | http dns(udp)| accept | | gate | | 2)
|| 4 | hostC | Any | telnet ftp | accept | | gate | | 3)
|| 5 | hostX | hostC | telnet | accept | | gate | | 4)
|| 6 | Any | gate | Any | drop | short | gate | | 5)
|| 7 | Any | Any | Any | drop | short | gate | | 6)
|-------------------------------------------------------------------------- |
------------------------------------------------------------------------------
注.1) hostA と hostB 間でメ−ルをりレ−するためのル−ル。ident は sendmail-8.8.5
は使うらしいから、一応通すようにしておく。
2) Group1 は hostC と hostD をまとめたグル−プである。先ず HTTP と DNS(UDP)
アクセスをどこにでもできるようにする。
3) hostC だけ telnet と ftp がどこにでもできるようにル−ルの追加をする。
4) 外部の hostX だけ hostC に telnet ができるようにする。
5) どこからもこのファイアウォ−ル・ホストに、アクセスできないようにする。
何かアクセスがあったら、短い記録 short を残す。
6) 明示されていないル−ルのパケットは全て遮断する。5) 同様、記録を残す。
* 利便性アップのためのル−ルの追加 `24/03
上記の設定のままだと FireWall-1 を越えて、内から外に ping も traceroute コマンド
も効かない。使えるようにするには、先ずル−ルの一番初めに内(Anyでも)から外(Any)で
[icmp-proto] を accept で追加、 それに内(Anyでも)から外(Any) で [udp-high-ports]
accept で追加すること。これで UDP の 1024 番以上のパケットを通すようになる。
外部にレンタルサ−バなどを借りて、安全にアクセスするため Secure Shell が用意され
たような場合のこと。telnet の暗号化版の slogin、ftp の暗号化版の sftp コマンドを、
内側から外へ使うには、TCP/22 をファイアウォ−ルで通すようにする。FireWall-1 には
標準でこの "サ−ビス" はないので、自分で "サ−ビス" を定義してル−ルに追加する。
* メ−ルストアの FireWall-1 の別な設定
実は、先に設定したメ−ルストアのホストは、IPアドレスの変換には含めていなかった。
外部へ出ていくメ−ルは hostB から hostA に行き、hostA のIPアドレスからの発信と
いうことになる。つまり一時的にせよ、202.241.128.0 というパブリックアドレスのネッ
トワ−クの領域に、プライベ−トアドレスのパケットを流してしまう。そこで、ここでは
メ−ルサ−バのホストもIPアドレス変換対象に含めるようにしてみる。しかし実際はこ
こまでシビアになる必要はない。パケットがル−タを越えて行く訳でないので問題はない。
この構成は、DMZ にする場合の基本的なテクニックでもある。
------- …………
|hostA| |hostB'|仮想的にここおく
------- …………
| | .4
-------*--------*---------------------------- 202.241.128.0
| .2
------- arp -s .. ------- hostG は hostB' のIPアドレスを
|hostG| |hostB| 答えるように、Proxy ARP の設定を
------- ------- しておく。
| .2 | .1
-----------------*---------------------------- 192.168.1.0
<< FireWall-1 Address Translation Rules >>
From Original To Original Method First Translated
Address Adress Adress
-------------------------------------------------------------------
192.168.1.3 192.168.1.4 FWXT_HIDE 202.241.128.2
-------------------------------------------------------------------
192.168.1.1 192.168.1.1 FWXT_SRC_STATIC 202.241.128.4 << 追加。
202.241.128.4 202.241.128.4 FWXT_DST_STATIC 192.168.1.1 <<
-------------------------------------------------------------------
hostA と hostB は双方向にパケットのやりとりをできるようにする。 Ident という認証
プロトコルも sendmail-8.8.5 にはあることだし。そしてメ−ルストアのホスト hostBは
仮想的に 202.241.128.0 に置かれているようにする。hostB から hostA へのパケットの
送信はいい。その反対の hostA から hostB への場合、少々困ったことになる。hostB は
202.241.128.4 アドレスで、実際には存在しないからだ。 そこで hostG が代理応答をす
るように設定する。 TCP/IP では最終的にマシン固有の番号(MACアドレス)で通信する。
hostG の le0 インタ−フェ−スのMACアドレスが 00:05:04:a2:00:00 だとしよう。次
のように hostG で設定する。hostG # arp -s 202.241.128.4 00:05:04:a2:00:00 pub。
(4) 各ホストの初期設定 '96〜'97
* hostA の設定
[ 起動デ−モンの制限 ]
動的経路制御の routed デ−モンはこのホストでは、絶対稼働させてはいけない。
# cd /etc/rc2.d << マシン起動時に稼働させないデ−モンを指定する。
# mv S71rpc .S71rpc << RPC サ−ビス。portmapper 相当。
# mv S73nfs.client .S73nfs.client << NFS クライアント。
# mv S74autofs .S74autofs << NFS サ−バ。
# mv S80lp .S80lp << プリンタデ−モン。
# mv S90loc.ja.cssd .S90loc.ja.cssd << かな漢字変換サ−バ。
# mv S85lmgrd .S85lmgrd << ライセンスマネ−ジャ。もしあれば。
S72inetsvc
-------------------------------------------------------------------
|sleep 5
|/usr/sbin/ifconfig -au netmask + broadcast +
|if [ -f /usr/sbin/in.named -a -f /etc/named.boot ]; then
| /usr/sbin/in.named;
|fi
|#/usr/sbin/route add "224.0.0.0" "`uname -n`" 0
|#/usr/sbin/inetd -s << inetd を稼働させないようにする。
/etc/init.d/cern << このようにファイルを作成する。
-----------------------------
|#! /bin/sh
|case $1 in
| 'start')
| /usr/local/bin/httpd << httpd.conf はデフォルトの /etc におく場合。
| ;;
| 'stop')
| ;; 停止するための手続きを記述。別にこれはなくても構わない。
|esac
# cd /etc/rc2.d
# ln -s /etc/init.d/cern S81cern << シンボリックリンクを張る。/etc/rc2.d ディ
レクトリは S81 が空いていたとする。
# ps -e
PID TTY TIME CMD
0 ? 0:00 sched << 多分ここから nscd までは最低限必要。
1 ? 0:00 init
2 ? 0:00 pageout
3 ? 0:00 fsflush
191 ? 0:00 ttymon
187 ? 0:00 sac
147 ? 0:00 utmpd
163 ? 0:01 vold
124 ? 0:00 nscd
102 ? 0:00 in.named << この3つ、このホストでは絶対必要である。
137 ? 0:00 sendmail
138 ? 0:00 cern
108 ? 0:00 syslogd << ホストの監視等で使う場合に必要。
118 ? 0:00 cron
注.このホストでも Netscape Navigator を使うことはできる。 ただし OpenWindows を
立ち上げてでないとダメである。いやらしいことに OpenWindows は RPC 制御下にお
かれている。 即ち portmapper デ−モンである rpcbind も起動するように初期設定
しておかなければならない。まあやめた方が無難だね。
[ ホスト自身の安全対策 ]
バリアネット上においたWWWホストは、インタ−ネットにそのまま晒していることにな
る。ファイアウォ−ルなしで、ホスト単体で安全対策を施さなければならない。それには
必要最小限のサ−ビスをするようにOSを構成する。そのめには、訳が分からないデ−モ
ンだとか、不明なプログラムだとかを取り除き、不用意にアクセスを許さないよう設定す
る必要がある。このため以下のような事柄を実施し、システム・ログも取り、できればホ
ストの監視ツ−ルの Tripwire やアカウント監視ツ−ルも稼働させたい。
・ロッグインユ−ザは基本的に root とWWWサ−バの管理者用だけにする。
・不用意に root に SetUID したファイルがないこと。
・NFS、NIS、Cコンパイラなど使わないデ−モンやプログラムをとり除く。
・/etc/hosts.equiv、/.rhosts ファイルがないこと。
・外から rlogin が効かないように ~./rhosts ファイルがないこと。
・/etc/passwd に +::0:0::: などと NIS 使用のフィ−ルドがないこと。
・NFS が使用する /etc/exports ファイルがないこと。
・使わないアカウントはロックするか削除すること。
・ホストのログをとるため syslog デ−モンを稼働させる。必須ではない。
・inetd デ−モンは基本的には稼働させないようにする。
TCP/IP ネットワ−クの肝は inetd デ−モンである。WWWホストで、これを稼働させて
おくのは非常に危険である。 パスワ−ドが甘いと、第三者に ftp や telnet アクセスを
容易に許す結果になる。どうしても inetd を稼働させる必要があるのなら、 不要なサ−
ビスは使えないようにする。inetd.conf の不要部分をコメントにする、 あるいは記述そ
のものを削除してしまう。internal の箇所はそのままでも概ね安全ではある。
/etc/inetd.conf
--------------------------------------------------------------------------------
|#ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
|telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd
|#name dgram udp wait root /usr/sbin/in.tnamed in.tnamed
|#shell stream tcp nowait root /usr/sbin/in.rshd in.rshd
|#login stream tcp nowait root /usr/sbin/in.rlogind in.rlogind
|#exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd
|#comsat dgram udp wait root /usr/sbin/in.comsat in.comsat
|#talk dgram udp wait root /usr/sbin/in.talkd in.talkd
|#uucp stream tcp nowait root /usr/sbin/in.uucpd in.uucpd
|#tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s ..
|#finger stream tcp nowait nobody /usr/sbin/in.fingerd in.fingerd
|#systat stream tcp nowait root /usr/bin/ps ps -ef
|#netstat stream tcp nowait root /usr/bin/netstat netstat -f inet
|time stream tcp nowait root internal
|time dgram udp wait root internal
|echo stream tcp nowait root internal
|echo dgram udp wait root internal ※ telnet だけ他のマシンから
|discard stream tcp nowait root internal アクセスできるようにした。
|discard dgram udp wait root internal
|daytime stream tcp nowait root internal
|daytime dgram udp wait root internal
|chargen stream tcp nowait root internal
|chargen dgram udp wait root internal
|
|# RPC services syntax: ここから下は、全部コメントにする。
| |
[ Solaris 2.6 での設定 ]
2005年頃に確認したところ /etc/rc2.d/K20spc, K60nfs.server, K71rpc, K74autofs,
K73nfs.client, K76snmpdx, K77dmi, K80lp, K90loc.ja.cssd, K94Wnn6になっていた。こ
れでずっと運用稼働してきた。/etc/rc3.d/S15nfs.server, K76snmpdx, K77dmi。rc3.dは
こうなっていた。K15nfs.server にした方がいいだろう。/etc/rc3.d/S76snmpdx, S77dmi
にすると、マシン起動後の画面に"snmpXdmid: svc_tp_create: Could not register prog
100249 vers 1 on udp" とワ−ニングが出てくる。K71rpc はより安全のため rpcbind を
起動させないようにした。 起動時の画面でメニュ−を選択して "コマンド行ロッグイン"
すること。普通にロッグイン入力のところからアカウントを入れると、画面が固まってし
まって、Stop+A キ−を押さないとどうしようもなくなる。
* hostG の設定
[ 起動デ−モンの制限 ]
動的経路制御の routed はこのホストでは、絶対稼働させてはいけない。 FireWall-1 が
停止してもセキュリティに穴が開かないように、inetd も稼働させないようにする。
# cd /etc/rc2.d << マシン起動時に稼働させないデ−モンを指定する。
# mv S73nfs.client .S73nfs.client
# mv S74autofs .S74autofs
# mv S90loc.ja.cssd .S90loc.ja.cssd
# mv S80lp .S80lp
# mv S85lmgrd .S85lmgrd
S72inetsvc
-------------------------------------------------------------------
|sleep 5
|/usr/sbin/ifconfig -au netmask + broadcast +
|if [ -f /usr/sbin/in.named -a -f /etc/named.boot ]; then
| /usr/sbin/in.named;
|fi
|#/usr/sbin/route add "224.0.0.0" "`uname -n`" 0
|#/usr/sbin/inetd -s << inetd を稼働させないようにする。
[ パケット転送禁止 ]
更に安全を期すために、マシンのIPパケットの転送を禁止にしておく。FireWall-1 が
起動すると FireWall-1 の管理下のもとでパケットを転送する。FireWall-1 が停止する
と再び転送されなくなる。
# cd /etc/fw/bin
# fw ctl ip_forwarding default << これはやらなくてもデフォルトだからいいかも。
/etc/rc2.d/S69inet
---------------------------------------
| |
|if [ -z "$defrouters" ]; then
| defrouters="`netstat -rn | grep default`" << default route をこのホストで
|fi はすでに定義した。ル−タに向
| いている。
|
|ndd -set /dev/ip ip_forwarding 0 << この2つ追加する。
|ndd -set /dev/ip ip_ip_forward_src_routed 0 <<
|
|
|if [ -z "$defrouters" ]; then
| numifs=`ifconfig -au | grep inet | wc -l`
| numptptifs=`ifconfig -au | grep inet | egrep -e '-->' | wc -l`
| if [ ! -f /etc/notrouter -a \
| \( $numifs -gt 2 -o $numptptifs -gt 0 -o -f /etc/gateways \) ]
| then
| echo "machine is a router."
|# ndd -set /dev/ip ip_forwarding 1 << 念のためここもコメントにする。
|
注.if [ -z "$defrouters" ]; then の意味は、変数 defrouters が定義されていないな
ら以下へ行けということである。defrouters は定義されているので、 これ以下は素
通りしてしまう。おかしなスクリプトだと思う。ndd -set /dev/ip ip_forwarding 1
が結局実行されないのだ。ゲ−トウェイ構成の場合、どこかでIPパケットを転送し
ますよという指示がなされないけないのに。それともデフォルトで通すからいいやと
いうことなのだろうか。
* こんな設定もやっておくとよい
Solaris 2.5.1, 2.6 のマシンは、 地震なんかでモニタやキ−ボ−ドのケ−ブルが外れた
りすると、パニックを起こしそれだけでマシンが止まってしまう。どうも3分間、ケ−ブ
ルが外れていると停止するようである。それを回避させることが次のようにやればできる。
/etc/default/kbd ファイルに1行追加し # kbd -i コマンドを叩いておく。SunOS 4.1.x
ではどうか。この制御ファイルはないが、ケ−ブルが外れてもマシンは止まらない。INDY
IRIX 5.3 でもやってた。ディスプレイが壊れたのでマシン動かしたまま、他の INDYのデ
ィスプレイと交換したが、全然問題なかった。
/etc/default/kbd
------------------------
|KEYBOARD_ABORT=disable
(5) プロキシ・サ−バの導入 `21〜`22
* ファイアウォ−ルの内側に設置する構成
/ ̄ ̄ ̄ ̄\ hostG の FireWall-1 ではプロキシ・サ
hostA \____/…□ www.xxx.com −バの 192.168.1.5 から外への HTTPパ
□ DNS : ケットと、DNS UDP:53、FTP パケットの
|.3 : 202.241.128.0 通過を許可しておく。 HTTP パケットは
--------------------------- 80番 と 443番、必要に応じて8080 番等
| NetCache Windows indy を通す。そして 192.168.1.7 のWindows
hostG □ □ □ □ 社内WWW からプロキシ・サ−バ経由で外部にアク
|.1 |.5 |.7 |.6 セスする。プロキシ・サ−バはNetCache
------------------------------------ をここでは使う。Apache の Proxy でも
Proxy 192.168.1.0 機能としては同じと見ていい。
[ Netscape Navigator の設定 ]
ここで用いたパソコンは Windows 98。Netscape Navigator(NN) のバ−ジョンは 4.75 で
ある。この Netscape では下図のように HTTP(H), Security(S), FTPプロキシを利用する
よう設定する。HTTP(H)というのは、HTTP パケットの80番でも8080番でも8888
番でも何でもいい。Security(S) は443番限定である。 プロキシ・サ−バの NetCache
は通常の HTTP パケット、暗号化の HTTPS パケットを、 中味を見て認識しているようで
ある。NetCache には HTTP のポ−ト番号を指定するような設定はない。さて HTTP(H) の
とこを空欄にするとどうなるか。この Netscape はWWWサ−バにアクセスできなくなる
のでなく、直接WWWサ−バにアクセスしに行く。注意されたい。
------------------------------------
[編集]→[設定]→[詳細]→[プロキシ]→ | ○インタ−ネットに直接接続する
| ●手動でプロキシを設定する [表示]
| ○自動プロキシ設定
------------------------------------ 設定の場所(URL): [ ]
|手動でプロキシを設定する
|---------------------------------------- |
| -- サ−バ -------------------------------------------- |
| | タイプ 使用するプロキシ サ−バのアドレス ポ−ト | |
| | HTTP(H) : [ 192.168.1.5 ] :[ 80 ] | |
| | Security(S): [ 192.168.1.5 ] :[ 80 ] | << HTTPS パケットのこと。
| | FTP : [ 192.168.1.5 ] :[ 80 ] | |
| | | | |
| ------------------------------------------------------ |
| -- 例外 ---------------------------------------------- |
| | 次ではじまるドメインにはプロキシ サ−バを使用しない| |
| | -------------------------------------------------- | |
| | |www.yahoo.co.jp,192.168.1.6 | | << 直接アクセスしたいサ
| | -------------------------------------------------- | | イトがあれば指定する。
| | 項目の間にはコンマ (,) を入れて下さい | |
| ------------------------------------------------------ |
| [ OK ] [キャンセル] |
----------------------------------------------------------
これでパケットの流れを、indy で tcpdump を使って見てみた。パケットの流れを分かり
易くするため、Netscape のキャッシュは効かないようにする。 キャッシュが絡むと、ど
こからパケットが来ているか分からなくなる。[編集]→[設定]→[詳細]→[キャッシュ]の
所で、メモリキャッシュ、ディスクキャッシュ共 [0] Kバイトとする。 それに NetCache
も、ここではプロキシ・サ−バとしての働きにのみ注目する。 NetCache のキャッシュ機
能については "7-1. イ−サネットLAN、(5) キャッシュサ−バの利用" を見られたい。
* HTTP アクセスの場合
[ HTTP 80/TCP アクセス ] ※ 1285,1315 というのはクライアントのポ−ト番号の例。
1285 80 Proxy 無し
|------------->
1315 80 1285 80
|-----------> |------------------------->
Proxy
[ HTTP 443/TCP アクセス ]
1285 80 Proxy 無し
|------------->
1315 443 1285 443
|-----------> |------------------------->
Proxy
* FTP アクセスの場合
[ Netscape Navigator からの FTP ]
1285 80
|------------->
1315 25
|----------->
Proxy /etc/inetd.conf から ftpd 起動。
[ DOS 画面からの FTP ]
1285 25 Proxy サ−バは関係ない。
|------------------------->
* DNS:53/UDP のアクセス
1285 80 Proxy 無し
|------------->
1315 53 DNS 1285 53 DNS
|-----------> hostA |------------------------->
Proxy |-----------> www.xxx.com
1320 80
Netscape Proxy
192.168.1.7 192.168.1.5
Windows パソコンの Netscape から www.xxx.com へアクセスする。 どうも 192.168.1.7
から 192.168.1.5 へは http://www.xxx.com/ アクセスをそのままスル−させているだけ
のようである。これは Netscape で Proxy 設定を 192.168.1.5 にしたため、 HTTP パケ
ットをそのまま 192.168.1.5 に渡すのである。 HTTP パケットが 192.168.1.5 に来ると
www.xxx.com ドメイン名を解決するため hostA で稼働している DNS 1次ネ−ムサ−バに
問い合わせる。つまり 192.168.1.5/UDP 1024〜 のパケットが hostA/UDP 53 番ポ−トに
送られるのである。そうしてドメイン名が解決されたら、プロキシ・サ−バのマシンから
www.xxx.com のIPアドレスに向けて TCP 80 番ポ−トに HTTP アクセスがなされる。
* Netscape Navigator からの FTP アクセスのログ
□ □ □ indy indy の /etc/inetd.conf (inetd 稼働のこと)
|.7 |.5 |.6 ------------------------------
--------------------- 192.168.1.0 |ftp stream tcp ... ftpd -d
Windows NetCache | | ↑
/va/adm/SYSLOG に詳細ログが残る
[ Windows の NN から NetCache を通さず、直接 indy に FTP アクセス ]
Netscape Navigator indy の /etc/passwd << anonymous FTP アクセ
------------------------------- --------------- スできるようしておく。
|ftp://192.168.1.6 | |
|------------------------------ |ftp:*:200:12::/usr/people/jiro:/dev/null
|カレント ディレクトリは /です。
|.Sgiresources ※ "6-4. ネットワ−クコマンドの仕組み" の所
| | に anonymous FTP について書いた。
Netscape は自身が持っている FTP アクセスのデフォルトのユ−ザ名とパスワ−ドを送出
していることが、以下で分かる。それにより、マシン indy の /usr/people/jiro ディレ
クトリにアクセスした。ディレクトリがリスティングされ、ファイルのダウンロ−ドがで
きる。通常の FTP コマンドのようにファイルのアップロ−ド、それに消去はできない。
% kill -HUP syslogdのID /var/adm/SYSLOG を一旦消去して syslogd を初期化する。
% cat /va/adm/SYSLOG
Nov 29 15:54:32 6F:indy syslogd: restart
Nov 29 15:54:58 7D:indy ftpd[3699]: <--- 220
Nov 29 15:54:58 7D:indy ftpd[3699]: indy FTP server ready.
Nov 29 15:54:58 7D:indy ftpd[3699]: command: USER anonymous
Nov 29 15:54:58 7D:indy ftpd[3699]: <--- 331
Nov 29 15:54:58 7D:indy ftpd[3699]: Guest login ok, type your name as password.
Nov 29 15:54:58 7D:indy ftpd[3699]: command: PASS mozilla@
Nov 29 15:54:58 7D:indy ftpd[3699]: <--- 230
Nov 29 15:54:58 7D:indy ftpd[3699]: Guest login ok, access restrictions apply.
Nov 29 15:54:58 7D:indy ftpd[3699]: command: REST 0
|
[ Windows の NN から NetCache を通して indy に ftp アクセス ]
% telnet 192.168.1.5 << NetCache の主要なパラメ−タの設定状態 >>
cache> show config.*
config.ftp.pass = netcache@ : anonymous ftp アクセスのデフォルトのユ−ザ名
config.ftp.user = anonymous とパスワ−ド。次は FTPをパッシブ・モ−ドにす
config.ftp.no_pasv = off る。相手 ftpd が対応しない場合は通常モ−ドに。
config.ftp.transparency = off : FTP パケットのアクセスを透過モ−ドにしない。
config.http.transparency = off : HTTP パケットのアクセスを透過モ−ドにしない。
config.http.enable = on : HTTP パケットのプロキシを有効にする。
config.http.ports = 80 : HTTP プロキシのポ−ト番号を80番にする。
% cat /va/adm/SYSLOG
Nov 29 15:58:31 7D:indy ftpd[3720]: <--- 220
Nov 29 15:58:31 7D:indy ftpd[3720]: indy FTP server ready.
Nov 29 15:58:31 7D:indy ftpd[3720]: command: USER anonymous
Nov 29 15:58:31 7D:indy ftpd[3720]: <--- 331
Nov 29 15:58:31 7D:indy ftpd[3720]: Guest login ok, type your name as password.
Nov 29 15:58:31 7D:indy ftpd[3720]: command: PASS netcache@
Nov 29 15:58:32 7D:indy ftpd[3720]: <--- 230
Nov 29 15:58:32 7D:indy ftpd[3720]: Guest login ok, access restrictions apply.
Nov 29 15:58:32 7D:indy ftpd[3720]: command: PWD
Nov 29 15:58:32 7D:indy ftpd[3720]: <--- 257
Nov 29 15:58:32 7D:indy ftpd[3720]: "/" is current directory.
Nov 29 15:58:32 7D:indy ftpd[3720]: command: TYPE A
Nov 29 15:58:32 7D:indy ftpd[3720]: <--- 200
Nov 29 15:58:32 7D:indy ftpd[3720]: Type set to A.
Nov 29 15:58:32 7D:indy ftpd[3720]: command: PASV
Nov 29 15:58:32 7D:indy ftpd[3720]: <--- 227
Nov 29 15:58:32 7D:indy ftpd[3720]: Entering Passive Mode (192,168,1,5,95,70)
|
これは注意しなければならない。WWWブラウザの FTP アクセスでは、 プロキシ利用に
していると、NetCache の config.ftp.user = anonymous、config.ftp.pass = netcache@
を送り出してしまう。小生のプロバイダのホ−ムペ−ジに、FTP アクセスしたら [ユ−ザ
名とパスワ−ドの入力] の画面が出て、指定のを入れるのだが "認証に失敗しました" と
なってしまった。どうも入力したのを無視し、NetCache からユ−ザ名 anonymous を勝手
に送り出してしまうようなのである。cache> set config.ftp.user "" とかやって、ユ−
ザ名を無しにできないかやってみたが、文字列を何かどうしても入れなければならないよ
うになっていた。NetCache をプロキシにするWWWブラウザの FTP は、anonymous 専用
にするしかないないようである。
* NetCache の DNS 機能について
上記での、WWWブラウザでプロキシを使う設定をやめて、直接インタ−ネットにアクセ
スするようにする。さらに、パソコンの TCP/IP ネットワ−クの設定でも、DNS のIPア
ドレスを、202.241.128.3 から NetCache のIPアドレス 192.168.1.5 にする。 これで
直接 nix.co.jj ドメイン用に設けた DNS サ−バを指定しなくても、Proxy の DNSとして
NetCache を用いることができるようになる。
cache> show config.*
config.dns.enable = on NetCache の DNSを動かすにはconfig.dns.enable
config.dns.transparency = off を on にすること。透過モ−ドは off でいい。
config.system.dns.search = on
config.system.dns.nameservers = 202.241.128.3
config.system.dns.domain_tree_search_enable = off
config.system.dns.domainname = nix.co.jj
cache> set config.dns.enable off off にしたり on したりして、DNS の働きを見て
cache> set config.dns.enable on みよう。
Mon Nov 11 17:06:12 JST [rc:info]: Listening for DNS requests on 0.0.0.0:53