Firewall Builderによるファイアウォールの設定

 Firewall Builder(fwbuilder)は、IPトラフィックのフィルタリング設定に役立つグラフィカルアプリケーションだ。このツールでは、ユーザが定義したフィルタリングポリシーをCiscoルータおよびLinksysルータで使われる各種言語やiptablesの仕様に変換できる。定義したポリシーとその実装をこうして分けることにより、ファイアウォールを実行するハードウェアを変更してもポリシーを定義し直さずに済む。

 fwbuilderのパッケージは、Ubuntu HardyとFedora 9の各リポジトリに収められている。openSUSEの10.3にもワンクリックでインストール可能なパッケージがあるが、まだopenSUSE 11には対応していない。本稿では、64ビット版Fedora 9マシンでfwbuilderのバージョン2.1.19をソースからビルドして使用する。fwbuilderのパッケージは、libfwbuilderとfwbuilderという2つのtarballになっている。先にライブラリのほうをインストールする必要があるが、どちらのパッケージも通常の「./configure; make; sudo make install」という手順でインストールできる。私の環境では、configureの実行中に次の警告が出たが、無視しても問題はない。

Running qmake: /usr/lib64/qt-3.3/bin/qmake
WARNING: icns.path is not defined: install target not created

 fwbuilderを立ち上げると、以下のスクリーンショットにあるようなメイン画面(「New Firewall」[新規ファイアウォール]ダイアログの後ろ側)が現れる。新規ファイアウォールを作成するには、ツリービュー内の[Firewalls]を右クリックする。ファイアウォールテンプレートを利用してiptablesによるファイアウォールを作成する場合には、先ほどの新規ファイアウォールダイアログが表示される。fwbuilderには多くのユーザが使いそうなファイアウォールやそれに近いものがテンプレートとして用意されているため、初めてのユーザでも簡単に使える。

fb1_thumb.png
テンプレート

 スクリーンショットにあるテンプレート1(「fw template 1」)は、ISPから動的IPアドレスが割り当てられ、ローカルの固定非公開サブネットがサーバの2番目のネットワークインタフェースに設定される状況に対応している。テンプレート2もテンプレート1に似ているが、ローカルネットワーク上のDHCPサーバが想定されている点が異なる。テンプレート3はDMZ(DeMilitarized Zone:非武装地帯)サブネットの設定用であり、サーバの3つのネットワークインタフェースがそれぞれ、静的IPアドレスを持つインターネット側のインタフェース、ローカルの非公開サブネット、インターネットからアクセス可能なDMZサブネットになっている。

 4番目の項目「host fw template 1」は、単純に1台のホストを保護するもので、このホストへのSSHアクセスだけを許可する。この手のファイアウォールポリシーは単純ではあるが、ノートPCユーザがすばやくファイアウォールを設置できるようにリストに用意されている。テンプレート「linksys firewall」はLinksysルータでの利用を想定したもの、「c36xx」はCiscoルータ用のサンプルである。また、テンプレート「web server」は、ファイアウォールを実行するサーバへのHTTPおよびSSHトラフィックを許可する。

 次のスクリーンショットは、テンプレート1用のファイアウォールルールを示したものだ。画面の上側にあるグリッド内の各セルをクリックすると、下側のペインにそのセルのデータを編集する領域が表示される。このテンプレートのファイアウォールでは、単純にTCP接続の種類やポート番号を入力する代わりに、SSHサービスのオプションが画面左側のツリービュー内に用意されている(選択中のルールの接続先の定義にこのオプションが使われている)。テンプレートから参照されているサービスは、システム定義の一部として読み取り専用になっているため、ペイン上で詳細は確認できるが編集はできない。カスタムのポートでSSHを実行する場合は、SSHのシステムカタログを編集してもよいし、画面左側の標準(システム)カタログのツリービューで該当するアイコンを右クリックして「Duplicate/Place in library User(ユーザライブラリに複製/配置)」を選択することでSSHサービスの個人用コピーを作成することもできる。なお、左側のツリービューのすぐ上にあるドロップダウンリストでは、標準(システム)カタログかユーザカタログのどちらかを選択できる。

fb2_thumb.png
ファイアウォールルールの編集

 個人用にコピーしたSSHサービスのポート定義は、自由に編集できる。編集したSSHサービス定義を利用するには、該当するアイコンを画面左側のツリービューからファイアウォールルールのサービスセルにドラッグ&ドロップすればよい。こうした操作はすべて問題なく行えるが、このままだとユーザインタフェース上の問題が1つ残る。標準(システム)カタログとユーザカタログのどちらのSSHサービス定義も名前が同じになっていることだ。つまり、先ほどのサービスセルに自分が編集したSSHサービスをドラッグすると、同じセル内に2つのSSHエントリが表示され、標準(システム)カタログ版との区別がつかなくなる。この問題は、編集したSSHサービス定義の名前を変更するだけで回避できる。

 画面左側のツリー上でファイアウォール自体をクリックするか、ファイアウォールポリシーを示す画面上部のグリッドで任意のセルをクリックすると、ホストとファイアウォールの両方の設定の編集が可能になる。ホストの設定では、マシン上にある特定のツールのパスを設定するオプションが存在し、FINおよびkeep-aliveのタイムアウトや明示的輻輳通知(ECN:Explicit Congestion Notification)、タイムスタンプ、SYNクッキーの有効化といったさまざまなTCP設定を変更できる。もっと一般的なホスト設定のオプションとしては、カーネルによるアンチスプーフィングのサポート、ソースルーティングの無視、各種ICMPパケットの処理方法などがある。「template 1」のファイアウォールでは、これらの設定がすべてデフォルトのままになっている。

 また、画面左側のツリーからファイアウォールをクリックして、画面の「Firewall details(ファイアウォールの詳細情報)」セクションにある「Firewall settings…(ファイアウォールの設定)」ボタンを押すと、一定時間内のパケット上限数のようなグローバルオプションの設定、生成されたファイアウォールウォールの調整に有効なprologおよびepilogコマンドの追加、カスタマイズの際に変更が必要になる各種システムパスの指定ができる。既知の接続との関連がないパケットをデフォルトでドロップするかどうかなど、拒否するパケット(送り返すICMPメッセージ)の指定や、最初のファイアウォールルールを実行する前に、確立済みおよび関連のある接続を受け入れるかどうかの指定も行える。

 「NAT」タブでは、サーバ通過時にIPトラフィックの送信元および宛先アドレスをどのように変更するかを設定できる。サーバにこうしたアドレスの変更を行わせるには、一連のルールを設定したうえで、左側ペインのツリーから該当するネットワークインタフェースをルールを表すグリッド内の「Source(送信元)」または「Destination(宛先)」のセルにドラッグする。NATルールでは、送信元、宛先、サービスを設定できる。各ルールによって、接続の送信元および宛先アドレスの変更、あるいは最終的な接続先となるポートの変更が行われる。

 次のスクリーンショットにあるように、ネットワークインタフェースは説明的な名前を持ち、画面左側のペインでは設定中のファイアウォール(ここでは、テンプレート1を使って生成したもの)の下に表示される。もちろん、こうした名前やネットワークインタフェースとの対応は変更が可能で、必要に応じて新しいインタフェースを追加することもできる。このスクリーンショットに示されたルールでは、インターネット上のmysshサービスへの接続を試みると、このファイアウォールマシンから接続したかのように、接続の送信元が変換される。

fb3_thumb.png
NATポリシーの編集

 fwbuilderで特に便利なのが、ファイアウォールおよびNATポリシーにおける特定のサービスの使用状況を確認できる機能だ。画面左側のツリービューからサービスを右クリックして「Where used(使用先)」を選択すると、そのサービスを使用しているNATまたはファイアウォールのルールにジャンプできる画面が下側のペインに現れる。この機能を利用すれば、サービスに接続できる対象を監査したり、そのサービスの使用を許可するNATが実行されているかどうかを確認したりできる。

 サービスだけをそのまま利用するルールの定義では、不便さを感じることが多い。必要な機能を得るために多くのサービスを組み合わせて使うことがあるからだ。fwbuilderでは、「グループ」を定義することで、多数のサービス定義を1つの論理的単位として扱える。たとえば、「Useful_ICMP」グループには、ICMP時間超過メッセージ、pingパケット、すべてのICMP未達パケットが含まれる。グループを利用することで、特定のサーバ機能を1つの単位として定義できるわけだ。また、グループを利用して論理的な「機能」単位を作っておけば、許可したい特定の相互作用にどのサービスが利用されているかをいちいち覚えておく必要がなくなる。

 NATおよびルーティングを同じツールで定義できるのは便利である。トラフィックの流れ、フィルタリング、場合によっては拒否についても1つのツールで設定できる。ドラッグ&ドロップ操作やグリッドからのネットワークアドレスやサービスのコピーによってファイアウォールを設定でき、そのうえテンプレートまで用意されているfwbuilderは、パケットフィルタリングポリシーをすばやく作成するのに非常に便利なツールだ。画面左側にあるツリービューの標準カタログには、クラスA、B、Cの非公開サブネット、各種サービスとそのグループ、時間に関する定義などが十分に揃っており、週末を待たずとも気軽にファイアウォールルールを変更できる。

要望リスト

 ユーザカタログとシステムカタログとで左側のツリービューの色が変わるようになっていると、どちらが表示されているのかが一目でわかってよい。またfwbuilderには、残念ながらあまりユーザフレンドリとはいえない部分がある。たとえば、ファイアウォールの構築時にポリシーに誤りがあるとエラーが出るのだが、その場合はエラーの原因となったルールを確認したうえで、エラーダイアログを閉じ、そのルールを手作業で選択しなければならない。fwbuilder側でエラーメッセージの内容を解析しておいてメッセージをダブルクリックすると問題のあるルールにジャンプできるようにすると共に、エラーメッセージは履歴を参照できるように画面一番下の新たなペインとして表示してもらったほうがありがたい。また、ルールを数行上に移動させる場合には、新しいルール番号を手で入力しなくても、そのルールを右クリックして「Move Rule(ルールの移動)」を選択したうえでドラッグ&ドロップできるとよい。さらに、fwbuilderからファイアウォールを設置する際には、ユーザ名と接続するサーバを指定して、ファイアウォールポリシーを適用するサーバマシンにSSH経由で接続するようになっているが、単純にiptablesをエクスポートしてもらって、あとのことは手作業で行ったほうがよさそうだ。

Ben Martinは10年以上もファイルシステムに携わっている。博士号を持ち、現在はlibferris、各種ファイルシステム、検索ソリューションを中心としたコンサルティングサービスを提供している。

Linux.com 原文