#norelated
 #navi(Solaris でファイアーウォールを作ろう)
 *目次 [#a21a2167]
 #contents
 
 *変更内容の概要 [#e7755ce6]
 [[其の1>Solaris でファイアーウォールを作ろう/其の1]]では基本的なファイアーウォールモジュールの枠組みを準備しました。しかし、あれだけではフィルターする IP アドレスもコードに埋め込みなので、使い勝手がものすごく悪いです。なので、モジュールをロード、オープンしたあとでも専用コマンドをつかって、フィルターする IP アドレスを指定できるようにしました。
 [[其の1>Solaris でファイアーウォールを作ろう/其の1]]でハードコーディングした IP アドレスをコマンドから変更できるようにしただけなので、まだ1つの IP アドレスからのパケットを「破棄」することしかできません。(泣)
 
 *ご注意 [#uc9aef59]
 しつこいようですが、これはカーネルモジュールですのでプログラム上に問題があった場合即 system panic につながります。それを踏まえて panic してもよいマシンで検証してください。そんなマシンが無い場合は(普通あんまり無いとおもいますが)残念ながら試さないのが無難です。私も作成過程で何度となく panic させてます。なお、panic に備えて(?) /etc/vfstab の mount option に logging を設定してくのがお勧めです。fsck が走らない分再起動が早いです。(笑)
 
 *ソースコードのダウンロード [#s63ff34d]
 ソースファイル:  [[fwall-0.2.tar.gz>http://github.com/downloads/kaizawa/fwall/fwall-0.3.tar.gz]]
 ソースファイル:  [[fwall-0.2.tar.gz>http://github.com/downloads/kaizawa/fwall/fwall-0.2.tar.gz]]
 
 |>|CENTER:tar ファイルに含まれるファイルの概要|h
 |Makefile|	fwall モジュール、fwalladm コマンド用の makefile|
 |fwall.c|	fwall モジュールの本体&br;コマンドからの ioctl() コマンド(=M_IOCTLメッセージ)を解釈し、フィルターする IP を動的に変えられるように変更した。まだ1つの IP アドレスしかフィルタリングできない。&br;いずれは・・・きっと・・|
 |fwall.h| 	fwall モジュール、fwalladm コマンド共通の header ファイル&br;今のところあまり存在意義が少ない・・|
 |fwalladm.c|fwall モジュールのフィルタールールを変更するコマンド&br;IP デバイスを open() し、そのストリームに fwall モジュールを PUSH。その後、ioctl() を使って IP アドレスを fwall モジュールに伝える。&br;実行例: # fwalladm 192.168.49.7|
 
 
 *使い方 その他 [#i95eaa36]
 **使い方 [#u0d4c07c]
 
 Makefile の中で、ネットワークインターフェース(hme0)の指定している個所がありますので、そこを適宜変更します。
  ifconfig hme0 modinsert fwall@2
 
 あと make、make install するだけで、モジュールがロードされ、ネットワークインターフェースと IP モジュールの間にに挿入されます。
 
  # make
  # make install
 
 この段階ではフィルターする IP アドレスは設定されていません。モジュールと同時に作られる fwalladm コマンドにて拒否したい IP アドレスを指定します。
 
  # /usr/local/bin/fwalladm 192.168.49.7
 
 そうすると、以下のようなメッセージが /var/adm/messages ファイルに記録されます。
 
  Mar 18 01:01:24 u1 fwall: [ID 964665 kern.notice] Return M_IOCACK
  Mar 18 01:01:24 u1 fwall: [ID 850347 kern.notice] Rule Changed: 192.168.49.7
 
 このあと、指定したアドレスから packet が到着すると、packet は破棄され、以下のメッセージが記録されます。
 
  Mar 18 01:02:51 u1 fwall: [ID 782524 kern.notice] Packet Dropped
 
 **64bit 環境での利用 [#gf0bb956]
 
 [[其の1>Solaris でファイアーウォールを作ろう/其の1]]でも記しましたように、gcc でも version 3.2.2 では 64bit モジュールが作れるようです。&br;
 ですので、Makefile を以下のように変更すれば、64bit 環境でも動作可能と思います。&br;
 下線の部分が 32bit 版からの変更点です。・・・・がまだ試してません。最近 私も Ultra-1 を手に入れて、どうやら Ultra-1 でも64bit カーネルを動作させることができるようなので今度試してみます。&br;
 
 *追記  [#r9516437]
 **2003-03-20 64bit モジュール[#z3cb0062]
 Ultra-1 が手に入ったので、早速 Solaris9 をいれて 64bit モードで起動し、以下の方法で 64bit モジュールを作ってテストしてみました。gcc で作った 64bit モジュールでもちゃんと動きました。^^; panic もしませんでした。
 
     CC = /usr/local/bin/gcc
     PRODUCTS = fwall fwalladm
     CCFLAGS =
     CCKFLAGS = ${CCFLAGS} -D_KERNEL -c -m64
     CCADMFLAGS = ${CCFLAGS} -lnsl
     LDFLAGS = -dn -r
     AUTOPUSH = /etc/autopush
     ECHO = /bin/echo
     CP = /bin/cp
     RM = /bin/rm
     LD = /usr/ucb/ld
     RM = /bin/rm
     CAT = /bin/cat
     AWK = /bin/awk
     MODLOAD = /usr/sbin/modload
     MODUNLOAD = /usr/sbin/modunload
     MODINFO = /usr/sbin/modinfo
  
     all: $(PRODUCTS)
  
     clean:
     ${RM} -f fwall fwall.o fwalladm
  
     fwall: fwall.c fwall.h
     $(CC) ${CCKFLAGS} fwall.c
     $(LD) ${LDFLAGS} fwall.o -o fwall
  
     fwalladm: fwalladm.c fwall.h
     $(CC) ${CCADMFLAGS} fwalladm.c -o fwalladm
  
     install:
     -$(CP) fwall /kernel/strmod/sparcv9/fwall
     -$(CP) fwalladm /usr/local/bin/fwalladm
     $(MODLOAD) fwall
     ifconfig hme0 modinsert fwall@2
  
     uninstall:
     ifconfig hme0 modremove fwall@2
     -$(MODUNLOAD) -i `$(MODINFO) | $(AWK) '/fwall/{ print $1 }'`
     -$(RM) /kernel/strmod/sparcv9/fwall
     -$(RM) /usr/local/bin/fwalladm
 -----------------------------------
 #navi(Solaris でファイアーウォールを作ろう)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS