
第6回 ファイアウォールの設定・動作チェック方法
大貫大輔
株式会社ラック
不正アクセス対策事業本部
2002/1/22
ツールを使ったアクセス制御の確認
目的のサーバに接続できるようになった後に考えなければならないのが、ルール上許可していないホストやポートに接続を許可していないかどうかです。つまり、「余計な穴」が開いていないかを確認します。これには、Nmapとhping2を使うといいでしょう。
■Nmapによるポートスキャン
Nmap(http://www.insecure.org/nmap/)はポートスキャナツールです。機能は多彩で、TCPのSYNスキャンやNullスキャン、OSの推測が可能です。このNmapを用いて、余計なポートが開いているように見えないかを確認します(注)。
| 注:当然のことですが、Nmapは自サイトのセキュリティを向上する目的にのみ用いるべきものです。 |
まずはNmapのオプションを知る必要があります。Nmapには多くのオプションがあるので、ここではその一部を紹介します。
| -sT | TCPポートのスキャンを行う |
| -sU | UDPポートのスキャンを行う |
| -sS | TCP SYNスキャンを行う。SYNパケットを送った後、SYN/ACKパケットを受信するとRSTパケットを送り、コネクションを中断する。このスキャンは、ログに残りにくいという特徴がある |
| -sP | 指定されたネットワーク上にICMP echo-requestを送り、稼働しているマシンを探す |
| -P0 | ファイアウォールなどでICMP echo-requestが許可されていないホストに対してスキャンするときに使用する |
| -O | TCP/IPのフィンガープリントにより、対象ホストのOSを調べる |
| -o filename | スキャンした結果を指定したファイルに出力する |
| -i filename | スキャン対象ホストをファイルから読み込む |
| -p port range | スキャンするポートを指定する。「-p 1-65535」のように指定することで、ポートをレンジ指定できる |
| Nmapのオプション | |
では、実際にNmapを使ってみましょう。Webサーバ(192.168.0.10)に対して、TCPのフルポートスキャンを実行します。ファイアウォールでICMP requestは特定のホストからしか許可していないので、-P0オプションを付けておきます。
# nmap -P0 -p 1-65535 -sT 192.168.0.10
|
Nmapの結果から、80/TCP(HTTP)が開いていることが分かります。ここで注目してもらいたいのが、「filtered」というステータスです。これにより、フィルタリングが行われているであろうということが分かるのです。許可していないポートが開いているように見えないか注意してください。
すべてのサーバに対してスキャンすることを忘れないでください。また、特定のIPアドレス(メンテナンス用ホストなど)からしかアクセスを許可していないサービスなどがある場合は、必ずそのIPアドレスからスキャンします。もちろん、ファイアウォールに対するスキャンも行いましょう。
■hping2によるリプライパケットのチェック
hping2(http://www.hping.org/)は、ファイアウォールの動作確認に非常に有効なツールです(注)。カスタマイズしたTCPパケットを生成して目的のポートに送信することで、リプライパケットの状態を見ることができます。そこから、許可されているのか、ドロップされているのか、拒否されているのかが判断できます。IPアドレスが偽造されたパケットについてテストすることも可能です。TCPだけでなく、ICMPやUDPについてもカスタムパケットを送信可能です。
| 注:hping2をファイアウォールの動作確認に使いましたが、ホストのセキュリティの確認もできます。ソースアドレスを指定して、偽造IPアドレスで動作確認することも可能です。また、IPスプーフィング対策が行われていないホストに対して実行する場合は注意が必要です。偽造IPアドレスが実在すると、ターゲットとなったホストは実在するホストに対してリプライパケットを送ってしまいます。 |
hping2もtcpdumpやNmapと同様にコマンドラインからオプションを指定して実行します。まずは、知っておいた方がいいオプションを紹介します。
| -c count | レスポンスパケットをいくつ送信するかを指定する |
| -I interface name | パケットを送信するために使うインターフェイスを指定する |
| -V | Verboseモード。より詳細な出力結果を得ることができる |
| -1 | ICMPパケットを送信するときに指定する。デフォルトでは、ICMP echo-requestを送信しする。--icmptype、--icmpoptionオプションを指定することも可能 |
| -2 | UDPパケットを送信するときに指定する。デフォルトでは0/UDPに送信する。--baseport、--destport、--keepオプションを指定することが可能 |
| -a hostname | ソースアドレスを偽造したパケットを送信する。ホスト名ではなくIPアドレスで指定することも可能 |
| -C --icmptype type | 指定したtypeのICMPパケットを送信することが可能 |
| -s | 送信元ポートを指定することが可能。送信元ポート番号は1つずつ増加していく。--keepオプションを指定することで、この増加を無効にすることが可能 |
| -p | 送信先のポートを指定することが可能 |
| -F | FINフラグをセットしたパケットを送信することが可能 |
| -S | SYNフラグをセットしたパケットを送信することが可能 |
| -R | RSTフラグをセットしたパケットを送信することが可能 |
| -P | PUSHフラグをセットしたパケットを送信することが可能 |
| -A | ACKフラグをセットしたパケットを送信することが可能 |
| -U | URGフラグをセットしたパケットを送信することが可能 |
| -X | Xmasフラグをセットしたパケットを送信することが可能 |
| -Y | Ymasフラグをセットしたパケットを送信することが可能 |
| -d data size | パケットのデータサイズを指定することが可能 |
| hping2のオプション | |
では、早速hping2を使ってみましょう。ソースアドレスを偽って、80/TCPにSYNフラグがセットされたパケットを送るには、次のようにオプションを指定します。
# hping2 192.168.0.100 -c 4 -p 80 -S
-a 192.168.0.200 |
ターゲットが「192.168.0.100」で、偽ったIPアドレスが「192.168.0.200」です。これで、80/TCPに4つのSYNフラグがセットされたパケットを送ったことになります。この指定で、ターゲットとなったホストにIPスプーフィング対策が行われているかどうかの確認ができます。
次にWebサーバ(192.168.0.10)の80番ポートにSYNフラグをセットしたパケットを送ってみます。
# hping2 192.168.0.10
-c 4 -p 80 -S -n |
| hping2実行結果1 |
「flags=SA」となっていることから、SYN/ACKパケットが返ってきていることが分かります。また、サーバから応答があったことから、接続が許可されていることも分かります。
ほかのポートについても調べてみます。Webサーバ上では22/TCP(ssh)をLISTEN状態にしてあります。このポートへの接続は特定のホストからしか許可していないので、許可されていないホストから試してみます。
# hping2 192.168.0.10
-c 4 -p 22 -S -n |
| hping2実行結果2 |
Webサーバの22番ポートは開いているにもかかわらず何ら応答がないことから、許可していないホストからであればパケットがドロップされていると判断できます。
では、ファイアウォールのルールが適切に設定されていない場合を考えてみましょう。Webサーバ上では、25/TCP(smtp)はLISTEN状態になっていないはずです。このままの状態でファイアウォールのルールを変更し、Webサーバの25/TCPへ接続できる設定を追加してみます。この状態で検査してみます。
# hping2 192.168.0.10
-c 4 -p 25 -S -n |
| hping2実行結果3 |
「flags=RA」となっており、SYN/ACKパケットが返ってきていないので実際に接続できているわけではありませんが、ファイアウォールを通過してWebサーバが応答しています。Webサーバで25/TCPポートはLISTEN状態になっていませんが、経路は存在するのではないかと判断できます。
Nmapでポートスキャンするだけでも、ポートが開いているかいないかの判断はできます。しかし、hping2などを使ってポートがどういう状態にあるのかも確認するようにしてください。ルールが複雑になると、必要のないルールを作成してしまうかもしれないので注意が必要です。
◆
ツールを使った動作確認の方法を解説しましたが、これらは一度行えばよいというものではありません。定期的に確認作業を行うことを推奨します。また、ルールについても定期的に見直しをかけるようにしてください。以前は必要でも現在は必要のないルールが存在すると、それがセキュリティホールとなる可能性があります。
|
2/2
|
|
|
||||
|
||||
| 連載 ゼロから始めるLinuxセキュリティ |
| Linux Squareフォーラム セキュリティ関連記事 |
| 連載:習うより慣れろ! iptablesテンプレート集(全4回) 初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう |
|
| 連載:ゼロから始めるLinuxセキュリティ(全11回) 奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見 |
|
| 特集:WebDAV時代のセキュリティ対策[前編] WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる |
|
| 特集:FreeS/WANによるIPSecの導入と運用[前編] LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう |
|
| 特集:Linux以外のIPSecスタックとの相互接続[前編] 別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる |
|
| 特集:sshでセキュアネットワーク サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる |
|
|
TechTargetジャパン
- OSSライセンスの採用傾向に「変化」あり (2012/5/21)
OSS普及の一翼を担ってきたライセンス、GPLファミリー採用の割合が減少傾向にあるそうです。いったいどうして? - ここからFirefoxの反撃が始まる (2012/3/12)
2月のLinux SquareのランキングではFirefoxの記事がダントツのページビューを集め、トップに立ちました - CMakeでMySQLをビルドしてみる (2012/3/8)
ここまでの作業でCMakeを使う準備が整いました。今回はひとまずMySQLをビルドしてみます - MySQLのビルドに欠かせないCMakeを準備する (2012/3/2)
今回は、MySQLをビルドするために欠かせないツール「CMake」をインストールし、使う準備をします
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
