#Solaris でファイアーウォールを作ろう/其の3

目次

変更点の概要

其の二で作ったモジュールにさらに以下の変更を加えました。

  • fwall_rput() に加え、fwall_wput() でもルールのチェックを行うようにした。
  • ダウンストリーム、つまりアプリからのパケットも調査できるようにした。
  • fwalladm コマンドから複数の新規ルールの追加ができるようにした。
  • fwalladm コマンドから現在設定されているルールの表示できるようにした。
  • fwalladm コマンドから既存ルールの削除ができるようにした。

機能を追加した分、コードも少々長く、複雑になってきてしまいました。本当は内容の解説を載せたいと思っていたのですが、ちょっと辛くなってきたので省きます。そのかわりにコード内に日本語(EUC)のコメントを多く記述するようにしましたので、そちらを参照いただければと思います。

ご注意

処理が多くなった分、見落としが多くなり、ここまでくるまでにも何十回もシステムを PANIC させました。大分無茶なテストをして PANIC はどうにかしないところまで修正したつもりですが、依然問題を含んでいると思われます。ですので、PANIC するとまずいことになるマシンでは絶対に動作させないでください。

ソースコードとダウンロード

ソースファイル: fwall-0.3.tar.gz

tar ファイルに含まれるファイルの概要
Makefilefwall モジュール、fwalladm コマンド用の makefile
fwall.cfwall モジュールの本体。
コマンドからの ioctl() コマンド(=M_IOCTLメッセージ)を解釈し、拒否する IP を動的に追加・変更できる。
fwall.hfwall モジュール、fwalladm コマンド共通のヘッダーファイル。
fwall_rule_t 構造体は、fwall モジュール、fwalladm コマンド双方で参照・利用される構造体。 fwall モジュールは fwalladm コマンドから指示されたルールを fwall_rule_t 構造体のリンクリストとして保持している。
fwalladm.cfwall モジュールのフィルタールールを変更するコマンド
IP デバイスを open() し、そのストリームに fwall モジュールを PUSH。その後、ioctl() を使ってルールの追加、削除、参照コマンドを fwall モジュールに伝える。

使い方 その他

使い方

Ultra-1 が手に入り、64bit kernel の Solaris9 上にてテストできるようになったので、これ以降は Solaris9 の 64bit kernel を前提にしてインストール方法を解説します。個人で中古 sparc マシンをもっている人でも大部分の方は Ultra Sparc マシンを持っていると思いますので・・。ですが、基本的にコードは変わらないので、tar ファイルに添付している Makefile32 という Makefile を使えば sun4m マシン上で 32bit モジュールも作成できます。

make を実行する前に、Makefile の中で、ネットワークインターフェース(hme0)の指定している個所がありますので、そこを適宜変更します。

ifconfig hme0 modinsert fwall@2

あと make、make install するだけで、モジュールがロードされ、ネットワークインターフェースと IP モジュールの間にに挿入されます。

# make
# make install

この段階ではフィルターする IP アドレスは設定されていません。モジュールと同時に作られる fwalladm コマンドの「-a」オプションにて拒否したい IP アドレスを指定します。

Usage: fwalladm [-a addr] | [-r number] | [-l]
         -a <address>    :<address> で指定したアドレスを拒否するルールを追加
         -r <rule nuber> :<rule nuber> で指定した既存のルールを削除
         -l              : 既存のルール(ルール番号と、拒否するアドレス)を表示
# /usr/local/bin/fwalladm -a 192.168.49.7

其の二までは一つのルールしか指定できませんでしたが、今回からは複数のルールを指定できます。

# /usr/local/bin/fwalladm -a 192.168.49.7
# /usr/local/bin/fwalladm -a 192.168.49.8
# /usr/local/bin/fwalladm -a 192.168.49.9

追加したルールは fwalladm コマンドの「-l」オプションで確認できます。

# /usr/local/bin/fwalladm -l
Rule 0: 192.168.49.7
Rule 1: 192.168.49.8
Rule 2: 192.168.49.9

これにより、指定したアドレスから packet が到着すると、packet は破棄され、以下のメッセージが記録されます。

Mar 18 01:02:51 u1 fwall: [ID 782524 kern.notice] Packet Dropped

設定したルールを削除する場合には、fwalladm コマンドの「-r」オプションでルール番号(-l オプションで表示される)を指定します。以下の例では上記のルール番号1(Rule 1: 192.168.49.8)を削除しています。

# /usr/local/bin/fwalladm -r 1
# /usr/local/bin/fwalladm -l
Rule 0: 192.168.49.7
Rule 1: 192.168.49.9

モジュールのアンインストールするには以下ようにします。

# make uninstall

これでモジュールの STREAM からの取り外し、アンロード、ファイルの削除まで一辺に行われます。

32bit 環境での利用

32bit 環境では Makefile32 という Makefile をつかって、コンパイル、インストールが行えます。

# make -f Makefile32
# make -f Makefile32 install
# make -f Makefile32 uninstall

今後の課題

  1. ルールにあて先アドレスを指定できるようにする。
  2. ルールにプロトコルを指定できるようにする。(ICMP, TCP, UDP)
  3. ルールに送信元、あて先ポート番号(TCP・UDP)を指定できるようにする。
  4. 許可ルールを追加できるようにする。(これが無いと全部の拒否ルール追加しなくちゃならないので)
  5. fwalladm コマンドを使って、STREAM への fwall モジュールの挿入、および取り外し。(毎回 make コマンドじゃ・・)
  6. fwalladm コマンドから任意の順番でのルールの追加。(これができないと、ルールの再構成が大変!)
  7. 複数のインターフェースを持つルータマシンでも動作するようにする。(これは今でも可能かも?)
  8. プロトコル違反のパケットや、異常なアクセスを拒否する(これはとーぶん先でしょう・・)


ȥå   ñ측 ǽ   إ   ǽRSS
Last-modified: Mon, 03 Jan 2022 20:21:50 JST (227d)