シンプルなファイアウォールを設定する
例として、以下のような単純なネットワーク構成における、ファイアウォールの構築を行います。
以下のルール2を、「/etc/opt/ipf/ipf.conf」という名前で保存(ただし、インターフェイス名は環境に合わせて変更する必要があります)、適用します。
ルール2を上から順番に説明していきます。
- (1)〜(2):
不正なIPパケットをすべて拒否して、ログに記録します(logオプション)。また、これ以降のルールのマッチングは行いません(quickオプション)。
- (3)〜(4):
外側のインターフェイス(iprb0)に出入りするパケットは基本的にすべて拒否します。また、このパケットをそれぞれグルーピング(headオプション)して、以降のルールのマッチングを行います。
- (5)〜(6):
内側のインターフェイス(iprb1)に出入りするパケットをすべて許可します。また、これ以降のルールのマッチングは行いません。
- (7)〜(9):
「10.0.0.0/8」「172.16.0.0/12」「192.168.0.0/16」は、予約済みのプライベートネットワーク用のアドレスなので、発信元がこれらのアドレスとなっているパケットは、外側のインターフェイスに到着することはあり得ません*4。仮にこのようなパケットが到着した場合、アドレスが偽造されている可能性があるので、このようなパケットをすべて拒否してログに記録します。このルールは、(3)でhead 100としてグルーピングされたパケットのみに適用されます(groupオプション)。
- (10)〜(11):
icmp/udpパケットが、外側のインターフェイスから出て行くのを許可します。このルールは、(4)でhead 150としてグルーピングされたパケットのみに適用されます。また、状態を保持するように指定されているため(keep stateオプション)、戻りのパケットも通過を許可されます。このオプションがないと、(3)のルールによって、戻りのパケットは拒否されてしまいます。
- (12):
(10)〜(11)と同じように、tcpパケットを許可します。ただし、特定のフラグが存在するパケットだけを許可するため(flagsオプション)、接続済みのコネクションと関係のないパケットは拒否されます。
*4ここでは実験環境のため、ファイアウォールの外側に「172.16.X.X」というアドレスを使用していますが、実際の環境では、プロバイダから割り当てられた公開用のアドレスとなります
これでルールの設定は完了ですが、これだけではファイアウォールとして動作しません。Solarisのデフォルトでは、2つのNIC間(図2のiprb0とiprb1の間)でIPパケットが転送されないため、ファイアウォールとして動作しないのです。異なるインターフェイス間でパケットを転送することをIPフォワーディングといい、ファイアウォールではこの機能が有効になっている必要があります。Solarisでは「ndd」コマンドを使って有効にすることができます。以下のリスト7の内容を「/etc/init.d/firewall」というファイル名で保存して、リスト8のコマンドを実行します。これで、マシン起動時にIPフォワーディングが有効になります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここまで完了したら、マシンを再起動します。ただし、この段階ではNATの設定が行われていないため、正しく通信できないはずです。
例えば、内側のホスト(192.168.0.10)からルータにpingを打ったときに、ルータに到着するパケットと、ルータから送信される戻りのパケットは以下のようになります。
ホスト → ルータ(行き) | ルータ → ホスト(戻り) | |
---|---|---|
発信元アドレス | 192.168.0.10 | 172.16.0.1 |
送信先アドレス | 172.16.0.1 | 192.168.0.10 |
表2 ネットワークの内側からpingを実行した場合にやり取りされるパケットのアドレス |
この場合、ルータには発信元が192.168.0.10であるパケットが到着しますが、このアドレスはプライベートネットワークのために使うものなので、このようなパケットを公開されているネットワークに流してはいけません。当然、ルータは戻りパケットの正しい経路を知らないので、戻りのパケットは行方不明となって、通信は確立しません。
NATの設定
この問題を、NATを使用することによって解決します。以下のリスト9の内容を、「/etc/opt/ipf/ipnat.conf」に保存して、ルールを適用します。(2)〜(3)は、内部ネットワークのIPアドレスを、ファイアウォールの外側のIPアドレス(172.16.240.241)で置き換えるという意味で、TCPとUDPについては、さらにポート番号を1025〜65000に置き換えます(portmap オプション)。
またftpについては、制御用とデータ用コネクションが分かれていて、データコネクションはサーバ側からクライアント側に向けて張られます。そのため、単純なパケットフィルタリングでは対応できないため、専用のプロキシが用意されており、(1)で有効になります。
(1)が有効になっていることを確認するには、ftpでサーバにログインしてから、dirコマンドなどを実行します。有効になっている場合は応答が返ってくるはずです。
以上で、簡単なファイアウォールの完成です。このファイアウォールは、内側のホストから外側への通信に対して一切の制限を行っていないので*5、使用には十分気を付けてください。通常は、余計なパケットが流れるのを防ぐために、サービスを絞って許可した方がよいでしょう。
*5ただし、プロキシで対応しなければ動かないサービス(ftp/RealAudio/ICQなど)で利用できるのはftpのみです。IP FilterはftpとRealAudio(raudio)にしか対応していません
次回は、構築したファイアウォールがセキュリティ的に正しく動作しているか? また、思ったとおりに動作しないときの動作確認など、フリーソフトウェアを使ったファイアウォール構築後の検査手法について解説していきます。
Copyright © ITmedia, Inc. All Rights Reserved.