FWTK

FreeBSD 3.4R で FWTK(FireWall? Tool Kit) を試してみました。

FWTK を download するには、先ず ライセンス を確認してから、 fwtk-request@tislabs.com に accepted と 書いたメイルを送ると、ftp 先を教えてもらえます。

日本語の参考資料としては、 「ファイアウォールの作り方(白崎博生)」(UNIX MAGAZINE 連載、1997年11月より) が最良でしょう。

パッチ情報(3月28日更新)

FWTK とは?

  • FWTK はアプリケーション・ゲートウェイです
  • アプリケーション別に proxy プログラムが用意されています
  • Proxy プログラムが用意されているアプリケーションだけが中継されます
  • Proxy プログラムが対応していないアプリケーションは使用できなくなります
  • 設定は /usr/local/etc/netperm-table という1つのファイルで行ないます
  • ホスト単位で中継の許可、不許可を設定できます
  • 中継時にユーザ認証を要求することもできます
  • 中継先を限定することもできます
  • UDP の中継はできません

マシンの設定

  • FreeBSD の Kern-Developer というセットをインストールします
  • X サーバなどはインストールしません
  • ネットワークボードを2枚刺し、片方にグローバルの IP アドレスを、もう片方にプライベートの IP アドレス(192.168.xxx. とする)を割り当てます
  • カーネルを作り直します
#options        NFS            <= 有効にしてはいけない
#pseudo-device   bpfilter 1    <= 有効にしてはいけない
  • /etc/inetd.conf の全てをコメントにします
  • /etc/rc.conf を編集します
sendmail_enable="NO"   <== 注意:FreeBSD 4.6 から変更されています
portmap_enable="NO"
  • リブート後、2つのネットワークの間のパケットは全く中継しません

FWTK のインストール

  • 試したのは fwtk2.1 です
  • FreeBSD には FWTK の ports が用意されているので、それを使って make し、インストールします
  • インストール先は /usr/local/libexec です
  • 追加のパッチ
fwtk/netacl/netacl.c の 127 行目
20ss を 20s に修正
  • ports では共有ライブラリを使うようになっていますが、使わない方が良いように思いますので Makefile.config を修正します(ただし、メモリをたくさん消費します)
LDFL= -static
  • X サーバは入れていないので、x-gw も make しません
# make -DWITHOUT_X11    (古い ports では -DNO_X11 でした)
  • /etc/services に次の1行を追加します
authsrv        7777/tcp
  • 実際に運用する場合には、コンパイラやカーネルのソースなどは全て削除しておきます

設定

  • /etc/inetd.conf に中継したいサービスだけ、以下のように追加します
ftp     stream  tcp     nowait  root    /usr/local/libexec/netacl  ftpd
telnet  stream  tcp     nowait  root    /usr/local/libexec/netacl  telnetd
  • /usr/local/etc/netperm-table に中継を許可するホストを記述します
# 内部のホストは ftp-gw の使用を許可
netacl-ftpd: permit-hosts 192.168.xxx.* -exec /usr/local/libexec/ftp-gw

# ftp-gw 自身の設定
ftp-gw: permit-hosts 192.168.xxx.*
ftp-gw: timeout 600

# 管理者のマシンからはファイアウォールのマシンに ftp できる(危険?)
netacl-ftpd: permit-hosts YYY.YYY.YYY.YYY -exec /usr/libexec/ftpd -l

# 内部のホストは telnet-gw の使用を許可          
netacl-telnetd: permit-hosts 192.168.xxx.* -exec /usr/local/libexec/tn-gw
tn-gw: permit-hosts 192.168.xxx.*
tn-gw: timeout 3600

ftp の中継

  • 内部から外部のホストに ftp する、あるいは外部から内部のホストに ftp するには、一度ファイアウォールのマシンに接続します
  • netperm-table で許可されているホストであれば、ftp-gw のプロンプトが表示されます
  • そこで、ユーザ名@接続先 と入力します
  • ファイアウォールに対応している ftp クライアントなら、この作業をやってくれます

telnet の中継

  • 内部から外部のホストに telnet する、あるいは外部から内部のホストに telnet するには、一度ファイアウォールのマシンに接続します
  • netperm-table で許可されているホストであれば、tn-gw のプロンプトが表示されます
  • そこで、connect 接続先 と入力します

http の中継

  • /usr/local/etc/netperm-table に中継を許可するホストを記述します
# 中継は許すが、Java と ActiveX は通さない場合
http-gw: permit-hosts 192.168.xxx.* -nojava -noactivex
  • inetd 経由でなくデーモンとして起動します
/usr/local/libexec/http-gw -daemon http 
  • ブラウザを設定し、proxy としてファイアウォールマシンのポート 80 を指定します
  • どのマシンからどこへアクセスしたかが全てログに記録されます

SSH の中継

  • plug-gw という汎用プロキシを使えば SSH も中継できます
  • ただし、中継先は1箇所に固定されるので、外部から内部への中継用として使います
# 筑波大学からの SSH を local-server で受ける
plug-gw: port ssh 130.158.*.* -plug-to local-server -port ssh
  • デーモンとして起動します
/usr/local/libexec/plug-gw -daemon ssh  
  • 内部から外部への SSH の中継は SOCKS を使えば簡単です

IPFW との併用

  • IPFW + NAT? のような複雑な設定は必要ありません
  • この程度で良いと思います
# ipfw.html を参照のこと
$fwcmd -f flush
$fwcmd add pass all from any to any via lo0
$fwcmd add deny all from any to 127.0.0.0/8
$fwcmd add deny all from ${inet}:${imask} to any in via ${oif}
$fwcmd add deny all from ${onet}:${omask} to any in via ${iif}
$fwcmd add pass all from any to any

まとめ

  • [good] 設定は簡単!
  • [good] 1つの接続で1つのプロセスが起動されるので、利用状況の確認は簡単
  • [nogood] マシンのリソースを消費します
  • [nogood]パケットフィルタに比べると低速
  • [nogood]ユーザは使い方が変更になります(導入を反対されるかも)
  • [good] Proxy を使うだけなら内部の DNS サーバは不要
  • [good] HTTP の中継で Java や ActiveX などを禁止できます

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2004-10-29 (金) 14:31:12 (5494d)