次のページ 前のページ 目次へ

7. TIS プロキシサーバーのインストール

7.1 ソフトウェアの入手

TIS FWTK(FireWall ToolKit)は ftp://ftp.tis.com/ から入手でき ます。

私と同じ失敗をしないように、TIS からファイルを ftp する際には、まず README ファイルを読んでください。TIS fwtk はサーバの隠しディレクトリに 収めてあり、入手するためには fwtk-request@tis.com に本文に SEND と だけ書いたメールを送る必要があります。サブジェクト行は不要です。 メールを送ると自動的に(12 時間有効な)ソースコードをダウンロードするた めのディレクトリ名が返信されます。

この HOWTO を書いている時点では TIS は FWTK バージョン 2.0(beta)をリリー スしています。このバージョンは(少しの例外をのぞいて)ちゃんとコンパイル でき、手元ではきちんと動いています。以下の説明もこのバージョンを元にし ます。彼らが最終版をリリースすれば、この HOWTO も update します。

FWTK をインストールするためには fwtk-2.0 というディレクトリを /usr/src ディレクトリに作ります。FWTKのソースコード(fwtk-2.0.tar.gz)をこのディ レクトリに移して展開してください(tar zxf fwtk-2.0.tar.gz)。

FWTK には WWW の SSL をサポートする機能はありませんが、Jean-Christophe Touvet が addon ソフトを書いています。このソフトは ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z から入手で きます。ただし Touvet はこのコードをサポートしていません。

私は Eric Wedel 作の Netscape secure news servers 用に改造したバージョ ンを使っています。これは ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z から入手できます。

以下の例では Eric Wedel 版を使います。

このプログラムをインストールするには、単に /usr/src/fwtk-2.0 の下に ssl-gw ディレクトリを作り、ファイルをそこに置くだけです。

私がコンパイルした時はいくつかの修正が必要でした。

最初の修正は ssl-gw.c に行います。ssl-gw.c では必要なファイルをインク ルードし忘れていました。

  #if defined(__linux)
  #include        <sys/ioctl.h>
  #endif

二つめの修正は、ssl-gw に Makefile が無いことでした。私は他の gateway ディレクトリにある Makefile をコピーして、gateway 名を ssl-gw に変更す ることでしのぎました。

7.2 TIS FWTK のコンパイル

FWTK のバージョン 2.0 は以前のバージョンに比べてずっと簡単にコンパイル できるようになりましたが、BETA 版をきれいにコンパイルするにはまだいく つかの修正が必要でした。最終版までにこれらの修正が行なわれることを期待 しています。

修正するためには /usr/src/fwtk/fwtk ディレクトリに移動して、まず Makefile.config.linux を Makefile.config ファイルにコピーします。

FIXMAKE を動かしてはいけません。 インストラクションには FIXMAKE するように書いてありますが、FIXMAKE すると、それぞれのディレク トリの Makefile が破壊されてしまいます。

私は fixmake を以下のように修正しました。問題は sed スクリプトがそれぞ れの Makefile の include 行に対して '.'と '' を付け加える処理の部分で した。以下のようにしておけば fixmake もちゃんと動きます。

  sed 's/^include[        ]*\([^  ].*\)/include \1/' $name .proto > $name 

次に Makefile.config ファイルを修正します。このファイルには 2 箇所の修 正が必要です。

付属のドキュメントの著者は自分のホームディレクトリにソースコードを置い ていますが、私たちの例では /usr/src でコンパイルしようとしていますので、 FWTKSRCDIR を以下のように設定します。

  FWTKSRCDIR=/usr/src/fwtk/fwtk

次に、Makefile.config では dbm を使うようになっていますが、いくつかの Linux システムでは gdbm データベースを使うので以下のように設定しました。 私の環境は RedHat 3.0.3 です。

  DBMLIB=-lgdbm

最後の修正は x-gw です。私の試した BETA バージョンには socket.c コード にバグがありました。修正するには、以下の行を削除してください。

  #ifdef SCM_RIGHTS  /* 4.3BSD Reno and later */
                       + sizeof(un_name->sun_len)+ 1
  #endif

ssl-gw が必要ならば、Makefile のディレクトリリストに ssl-gw のディレク トリも加えます。

  DIRS=   smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw

これで make してください。

7.3 TIS FWTK のインストール

インストールするには make install してください。

配布時の設定では /usr/local/etc にインストールされますが、これを別のよ り安全なディレクトリに移しても構いません(私はやっていませんが)。私はこ のディレクトリのパーミッションを 'chmod 700' にしました。

後は firewall の設定を行うだけです。

7.4 TIS FWTK の設定

いよいよ佳境に入ってきました。まず、インストールした新しいサービスにつ いてシステムに教え、新しい機能を設定するための表を作らなければいけませ ん。

ここで TIS FWTK のマニュアルを繰り返すつもりはありませんので、以下では 手元で動いた設定を示すと共に、私がぶつかった問題について説明し、どうやっ て正しい設定を見つけたかを述べます。

TIS FWTK を制御するためのファイルは以下の 3 種です。

FWTK を機能させるためには以上のファイルを逆順に修正しなければいけませ ん。netperm-table や inetd.conf を正しく設定せずに services ファイルを 修正するとシステムが使用不能になる可能性があります。

netperm-table ファイル

このファイルは TIS FWTK のサービスを誰が使えるかを指定します。 設定の 際には firewall の両側のネットワークのトラフィックを充分考慮してくださ い。今回はプライベートネットワークの外からアクセスするには自らを認証す るようにして、ネットワークの内側にいる人は自由に外部へアクセスできるよ うな設定にしましょう。

外部の人の認証用に firewall では authsrv というプログラムを使 います。このプログラムはユーザ ID とパスワードのデータベースを使います。 netperm-table の認証セクションはデータベースがどこにあって誰がアクセス できるかを指定します。

私はこの接続を制限する際に多少のトラブルを経験しました。以下に示す permit-hosts 行の '*' では誰でもアクセスできてしまいます。この行の正し い設定は authsrv: permit-hosts localhost でした。

  #
  # 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 になって /usr/local/etc ディ レクトリで ./authsrv コマンドを起動して管理用のユーザレコード を作ります。以下に例を示します。

ユーザやグループの追加方法については FWTK のドキュメントを読んでくださ い。

    #
    # 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 用ゲートウェイ(tn-gw)が最も簡単なので、これから設定を始めましょ う。

以下に示す例では、内部のネットワーク上のホストからの telnet は認証無し で許可しています(permit-hosts 196.1.2.* -passok)。一方、その他のユーザ がプロキシサーバを使う場合はユーザ ID とパスワードが必要です (permit-hosts * -auth)。

もう一箇所 196.1.2.202 からのアクセスも認証なしで直接 firewall にアク セスできるようにしています。netacl-in.telnetd のある行がそのための指定 です。この行の詳細については後述します。

telnet のタイムアウトは短めにしておくべきです。

  # telnet gateway rules:
  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 196.1.2.* -passok -xok
  tn-gw:                permit-hosts * -auth
  # Only the Administrator can telnet directly to the Firewall via Port 24
  netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetd

rlogin など r- 系のコマンドも telnet と同じ設定になります。

  # rlogin gateway rules:
  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 196.1.2.* -passok -xok
  rlogin-gw:    permit-hosts * -auth -xok
  # Only the Administrator can telnet directly to the Firewall via Port
  netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a

FTP などで直接ファイアウォールに接続すべきではないので、ファイアウォー ルではFTP サーバを起動してはいけません。

繰り返しますが、以下の例の permit-hosts 行は内部のネットワークから誰で もインターネット上のホストへ FTP 接続できる一方で、その他のユーザには 認証を求めるという設定です。私は(-log {retr stor })行でやりとりした ファイルの記録をとるようにしています。

FTP の timeout の設定は接続状態が悪い場合などに接続を切るための時間と データをやりとりしないまま接続を開いている時間を制御するために設定して います。

  # 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 196.1.2.* -log { retr stor }
  ftp-gw:               permit-hosts * -authall -log { retr stor }

Web や gopher、ブラウザ経由の ftp などは http-gw が制御します。以下に 示す例の最初の 2 行で firewall ごしにやりとりした ftp と web の文書を 蓄えておくディレクトリを指定します。私はこれらのファイルをルートの所有 とし、ルートしかアクセスできないディレクトリに置きました。

Web の接続は短く制限すべきです。timeout の設定は反応の無い接続先を待つ 時間です。

  # 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           196.1.2.* -log { read write ftp }
  http-gw:      deny-hosts      * 

ssl-gw は全てを通過させますので注意が必要です。以下の例では内部のネッ トワークの全てのホストが 127.0.0.* と 192.1.1.* 以外、加えてポート番号 の 443 から 563 の外部のネットワーク全てにアクセスできるようにしていま す。443 から 563 までが SSL が使うポートです。

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

次に示す例が plug-gw を使って news サーバに接続するという場合です。こ の例では、内部のネットワークの誰でもが特定のマシンの news ポートにのみ 自由にアクセスできるようにしています。

3 行めは news サーバからのデータがファイアウォールを越えるためのもの です。

ユーザがニュースを読んでいる間、サーバと接続していることを仮定している ニュースリーダが多いので、ここでの timeout は長めに設定しておきます。

 
  # NetNews Pluged gateway
  plug-gw: timeout 3600
  plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp
  plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp

finger のゲートウェイは簡単です。内部のネットワークのユーザはいったん firewall にログインしてから finger を使うようにしています。それ以外の 人が finger しようとしても finger.txt が送られるだけです。

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

Mail と X-windows 用のサービスは設定していないので例は示しません。誰か うまく行く例をご存知の方は私まで e-mail で連絡してください。

inetd.conf ファイル

以下に /etc/inetd.conf ファイルを示します。不要なサービスは全てコメン トアウトしています。何をコメントアウトして、ファイアウォール上で動かし てもいいサービスは何かを示すために全文を示します。

 
  #echo stream  tcp  nowait  root       internal 
  #echo dgram   udp  wait    root       internal
  #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
  # FTP firewall gateway
  ftp-gw      stream  tcp  nowait.400  root  /usr/local/etc/ftp-gw  ftp-gw
  # Telnet firewall gateway
  telnet        stream  tcp  nowait      root  /usr/local/etc/tn-gw /usr/local/etc/tn-gw
  # local telnet services
  telnet-a    stream  tcp  nowait      root  /usr/local/etc/netacl in.telnetd
  # Gopher firewall gateway
  gopher        stream  tcp  nowait.400  root  /usr/local/etc/http-gw /usr/local/etc/http-gw 
  # WWW firewall gateway
  http  stream  tcp  nowait.400  root  /usr/local/etc/http-gw /usr/local/etc/http-gw 
  # SSL firewall gateway
  ssl-gw  stream  tcp     nowait  root /usr/local/etc/ssl-gw   ssl-gw
  # NetNews firewall proxy (using plug-gw)
  nntp    stream  tcp     nowait  root    /usr/local/etc/plug-gw plug-gw nntp
  #nntp stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd
  # SMTP (email)firewall gateway
  #smtp stream  tcp     nowait  root    /usr/local/etc/smap smap
  #
  # Shell, login, exec and talk are BSD protocols.
  #
  #shell        stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
  #login        stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
  #exec stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
  #talk dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
  #ntalk        dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd
  #dtalk        stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd
  #
  # Pop and imap mail services et al
  #
  #pop-2   stream  tcp  nowait  root  /usr/sbin/tcpd    ipop2d
  #pop-3   stream  tcp  nowait  root  /usr/sbin/tcpd    ipop3d
  #imap    stream  tcp  nowait  root  /usr/sbin/tcpd    imapd
  #
  # The Internet UUCP service.
  #
  #uucp    stream  tcp  nowait  uucp  /usr/sbin/tcpd  /usr/lib/uucp/uucico -l
  #
  # Tftp service is provided primarily for booting.  Most sites
  # run this only on machines acting as "boot servers." Do not uncomment
  # this unless you *need* it.  
  #
  #tftp dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
  #bootps       dgram   udp     wait    root    /usr/sbin/tcpd  bootpd
  #
  # Finger, systat and netstat give out user information which may be
  # valuable to potential "system crackers."  Many sites choose to disable 
  # some or all of these services to improve security.
  #
  # cfinger is for GNU finger, which is currently not in use in RHS Linux
  #
  finger        stream  tcp  nowait  root   /usr/sbin/tcpd  in.fingerd
  #cfinger      stream  tcp  nowait  root   /usr/sbin/tcpd  in.cfingerd
  #systat       stream  tcp  nowait  guest  /usr/sbin/tcpd  /bin/ps -auwwx
  #netstat      stream  tcp  nowait  guest  /usr/sbin/tcpd  /bin/netstat -f inet
  #
  # Time service is used for clock syncronization.
  #
  #time stream  tcp  nowait  root  /usr/sbin/tcpd  in.timed
  #time dgram   udp  wait    root  /usr/sbin/tcpd  in.timed
  #
  # Authentication
  #
  auth          stream  tcp  wait    root  /usr/sbin/tcpd  in.identd -w -t120
  authsrv       stream  tcp  nowait  root  /usr/local/etc/authsrv authsrv
  #
  # End of inetd.conf

/etc/services ファイル

/etc/services が全ての始まりです。クライアントがファイアウォールの well known port(1024 以下のポート)に接続してきた時、〜例えば telnet な ら 23 番のポートに接続します〜、inetd デーモンがその接続を聞きつけて、 まず /etc/services ファイルで起動すべきサービス名を調べます。次に、そ の名前に従って /etc/inetd.conf ファイルで必要なプログラムを見つけて、 そのプログラムを起動することになります。

全てのサービスが /etc/services ファイルに含まれているわけではありませ ん。いくつかのサービスは自由にポートを割りあてることも可能です。私は、 管理者用の telnet(telnet-a)のポートを 24 番に割りあてましたが、これを 2323 にすることも可能です。telnet-a のポートを 24 番にしておけば、管理 者(あなた)が firewall にアクセスする際には 23 番ではなく 24 番のポート を使うようになります。加えて、私がしているように netperm-table ファイ ルを設定すれば、内部のネットワークからのみこの接続が可能になります。

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


次のページ 前のページ 目次へ