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