BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > WebLogic Security プログラマーズ ガイド > ネットワーク接続フィルタの使い方 |
WebLogic Security プログラマーズ ガイド
|
セキュリティ ロールおよびセキュリティ ポリシーを使うと、WebLogic リソースをドメイン レベル、アプリケーション レベル、およびアプリケーション コンポーネント レベルで保護できますが、接続フィルタを使用すると、ネットワーク レベルでアクセス拒否ができます。したがって、ネットワーク接続フィルタを使用することで、セキュリティのレイヤを追加できます。接続フィルタを使うと、個々のサーバ、サーバのクラスタ、または全体的な内部ネットワークやインターネット上で、サーバ リソースを保護できます。
接続フィルタは、管理ポートを使用する場合に特に便利です。 ネットワーク ファイアウォールのコンフィグレーションに応じて、接続フィルタを使用して管理アクセスの制限を強化することができます。 一般的な使用方法は、管理ポートへのアクセスをドメイン内のサーバおよびマシンに制限することです。 攻撃者がファイアウォール内部のマシンにアクセスできたとしても、管理操作を許可されたマシン上でなければ、その操作を実行することはできなくなります。
ネットワーク接続フィルタは、プロトコル、IP アドレス、および DNS ノード名に基づいてフィルタ処理するようコンフィグレーションできる点において一種のファイアウォールです。たとえば、ユーザの企業のネットワーク外部からの非 SSL 接続を拒否できます。 これにより、インターネット上のシステムからのすべてのアクセスがセキュアであることが保証されます。
この節では、weblogic.security.net パッケージについて説明します。この API は、ネットワーク接続フィルタを開発するためのインタフェースとクラスを提供します。 またこれには、ネットワーク接続フィルタのすぐに使える実装である、ConnectionFilterImpl クラスが含まれます。 詳細については、WebLogic Server のこのリリースにおける WebLogic クラスの Javadoc を参照してください。
接続フィルタ処理を実装するには、接続フィルタ インタフェースを実装するクラスを記述します。接続フィルタの実装用に、以下の weblogic.security.net インタフェースが提供されます。
このインタフェースでは、接続フィルタ処理を実装するために使用する accept() メソッドが定義されています。接続フィルタ処理を実行するようにサーバをプログラミングするには、このインタフェースを実装するクラスをインスタンス化し、Administration Console でそのクラスをコンフィグレーションします。このインタフェースは、接続フィルタ処理に対する最低限の実装要件です。
注意: このインタフェースを実装しただけでは、Administration Console を使ってクライアント接続を制限するフィルタ処理ルールを入力および修正することはできません。他の方法 (Administration Console で定義するフラット ファイルなど) を使ってルールを指定する必要があります。Administration Console を使ってフィルタ処理ルールを入力および修正するには、ConnectionFilterRulesListener インタフェースも実装する必要があります。ConnectionFilterRulesListener インタフェースについては、ConnectionFilterRulesListener インタフェースを参照してください。
このインタフェースを使用する方法を示すコード例については、接続フィルタのサンプルを参照してください。
ConnectionFilterRulesListener インタフェース
サーバはこのインタフェースを使って、Administration Console の ConnectionFilterRules フィールドで指定したルールが有効であるかどうかを、setRules() メソッドおよび checkRules() メソッドに基づいて起動中および実行時に判断します。
注意: 必要に応じて、このインタフェースを実装することも、WebLogic Server 製品の一部として提供される WebLogic 接続フィルタ実装 weblogic.security.net.ConnectionFilterImpl を使用することもできます。
このインタフェースでは、接続フィルタ処理を実装するために使用する 2 つのメソッド setRules() と checkRules() が定義されています。ConnectionFilter インタフェースと共にこのインタフェースを実装すれば、クライアント接続を制限するフィルタ処理ルールを、Administration Console を使って入力することができます。
注意: Administration Console で接続フィルタ処理ルールを入力および編集するためには、ConnectionFilterRulesListener インタフェースを実装する必要があります。このインタフェースを実装しない場合は、フラット ファイルなどの他の方法を使用する必要があります。
このインタフェースを使用するコード例については、接続フィルタのサンプルを参照してください。
接続フィルタの実装用に、2 つの weblogic.security.net クラスが提供されます。
このクラスは、WebLogic 接続フィルタの実装です。ConnectionFilter インタフェースおよび ConnectionFilterRulesListener インタフェースを実装します。 いったん Administration Console を使ってコンフィグレーションされると、この接続フィルタはデフォルトですべての受信時接続を受け入れ、またサーバが現在の接続フィルタを取得できるようにする静的なファクトリ メソッドを提供します。 この接続でアクセスを拒否するには、Administration Console を使用して接続フィルタ ルールを入力するだけです。
このクラスは、WebLogic Server 製品の一部として提供されます。このクラスをコンフィグレーションして使用するには、WebLogic 接続フィルタのコンフィグレーションを参照してください。
これは、すべてのイベント ステート オブジェクトが派生する元のクラスです。すべてのイベントは、そのオブジェクト、つまり特定のイベントが最初に発生したオブジェクトであると論理的に見なされるソースを基準に作成されます。 アプリケーションは、このクラスで提供されるメソッド (getLocalAddress()、getLocalPort()、getRemoteAddress()、getRemotePort()、および hashcode()) を使用して、新しい ConnectionEvent インスタンスを作成します。
このクラスを使用するコード例については、リスト6-1を参照してください。
この節では、接続フィルタ ルールの記述方法と評価方法について説明します。接続ルールが指定されていない場合は、すべての接続が受け入れられます。
接続フィルタ ルールの指定は、接続フィルタ処理の実装方法により、フラット ファイルで記述したり、Administration Console で直接入力したりすることができます。ネットワーク接続フィルタのコード例 (SAMPLES_HOME¥server¥src¥examples¥security¥net ディレクトリ) では、2 つのメソッドが示されています。
以下の節では、接続フィルタ ルールを記述するために必要な情報とガイドラインを説明しています。
接続フィルタ ルールの形式は、フィルタ ルールを入力するフィルタ ファイルを使用するか、Administration Console でフィルタ ルールを入力するかによって異なります。
targetAddress localAddress localPort action protocols
targetAddress action protocols
dialup-555-1212.pa.example.net 127.0.0.1 7001 deny t3 t3s # http(s) OK
192.168.81.0/255.255.254.0 127.0.0.1 8001 allow # 23-bit netmask
192.168.0.0/16 127.0.0.1 8002 deny # like /255.255.0.0
スロー ルールは、ドメイン名の一部に適用されます。一致検査を実行するにはクライアントサイドで接続時の DNS ルックアップが必要なので、スロー ルールはファスト ルールよりかなり遅くなる場合があります。また、スロー ルールは DNS スプーフィング攻撃の対象になる可能性があります。スロー ルールの指定方法は次のとおりです。
アスタリスクは、パターンの先頭に対してのみ使用できます。ルールの他の位置でアスタリスクを使用すると、パターンの一部として扱われます。アスタリスクはドメイン名の一部として認められていないので、このようなパターンはドメイン名と一致しなくなります。
クライアントが WebLogic Server に接続すると、記述されている順序でルールが評価されます。一致する最初のルールにより、接続の処理方法が決まります。一致するルールがない場合には、接続は許可されます。
サーバの保護をさらに厳しくし、特定のアドレスからの接続だけを許可する場合は、最後のルールを次のように指定します。
0.0.0.0/0 * * deny
最後のルールをこのように指定すると、それまでのルールで許可されている接続だけが認められて、他の接続はすべて拒否されます。 たとえば次のルールを指定したとします。
Remote IP Address * * allow https
0.0.0.0/0 * * deny
Remote IP Address を持つマシンだけが、接続フィルタを実行する WebLogic Server のインスタンスへのアクセスを許可されます。 その他のシステムはすべて、アクセスを拒否されます。
接続フィルタのコンフィグレーション方法については、『WebLogic Security の管理』を参照してください。
WebLogic の接続フィルタを使用せず、独自に開発する場合は、weblogic.security.net パッケージで提供されているアプリケーション プログラミング インタフェース (API) を使用できます。 この API の詳細については、ネットワーク接続フィルタ APIを参照してください。
WebLogic Server でカスタム接続フィルタを開発するには、次の手順を実行します。
注意: Java クライアントまたは Web ブラウザ クライアントが WebLogic Server インスタンスへの接続を試行する際に接続フィルタ処理を実装すると、WebLogic Server インスタンスは ConnectionEvent オブジェクトを作成して、接続フィルタ クラスの accept() メソッドに渡します。接続フィルタ クラスは、ConnectionEvent オブジェクトを調べて、接続を受け付ける場合はオブジェクトを返し、接続を拒否する場合は FilterException を送出します。
実装されたクラス (ConnectionFilter インタフェースのみを実装するクラスと、ConnectionFilter インタフェースおよび ConnectionFilterRulesListener インタフェースの双方を実装するクラス) は両方とも、クライアント接続に関する情報を収集後に、accept() メソッドを呼び出す必要があります。 ただし、ConnectionFilter インタフェース だけを実装している場合、収集される情報にはリモート IP アドレスと接続プロトコル (HTTP、HTTPS、T3、T3S、GIOP、GIOPS、DCOM、または FTP) が含まれます。どちらのインタフェースも実装している場合、収集される情報には、リモート IP アドレス、リモート ポート番号、ローカル ポート番号、および接続プロトコルが含まれます。
WebLogic Server のソフトウェアには、2 つの接続フィルタ サンプルが付属しています。どちらにも、効率の良い一般的な接続フィルタが含まれています。どちらのサンプルも、ルールを解析し、接続フィルタ処理によって WebLogic Server 接続に付加されるオーバーヘッドが最小限になるようなルール照合アルゴリズムを設定します。必要に応じて、このコードを変更して再利用できます。たとえば、ローカルまたはリモートのポート番号を、フィルタ、またはフィルタ処理のオーバーヘッドを軽減するサイト固有のアルゴリズムに合わせることができます。サンプルをビルド、コンフィグレーション、および実行する方法については、WebLogic Server の SAMPLES_HOME¥server¥src¥examples¥security¥net ディレクトリにある package.html ファイルを参照してください。
examples.security.net.SimpleConnectionFilter サンプルは、WebLogic Server の SAMPLES_HOME¥server¥src¥examples¥security¥net ディレクトリにあります。このサンプルは、ConnectionFilter インタフェースを実装し、フィルタ ファイルで定義されているルールを使って接続のフィルタ処理を行います。
examples.security.net.SimpleConnectionFilter2 サンプルは、WebLogic Server の SAMPLES_HOME¥server¥src¥examples¥security¥net ディレクトリにあります。 このサンプルは、ConnectionFilter インタフェースと ConnectionFilterRulesListener インタフェースを実装し、Administration Console で定義されたルールを使って接続のフィルタ処理を行います。
ネットワーク接続をフィルタ処理する場合の accept メソッドの例
リスト6-1 では、WebLogic Server は、ConnectionEvent を指定した SimpleConnectionFilter.accept() メソッドを呼び出しています。SimpleConnectionFilter.accept() メソッドは、リモート アドレスとプロトコルを取得してプロトコルをビットマスクに変換し、ルール適合時に文字列が比較されることを防ぎます。次に、SimpleConnectionFilter.accept() メソッドは、ルールごとにリモート アドレスとプロトコルを比較して、一致するものを見つけます。
このコードは、SAMPLES_HOME¥server¥src¥examples¥security¥net ディレクトリの SimpleConnectionFilter.java ファイルからの抜粋です。
コード リスト 6-1 ネットワーク接続をフィルタ処理するサンプル コード
public void accept(ConnectionEvent evt)
throws FilterException
{
InetAddress remoteAddress = evt.getRemoteAddress();
String protocol = evt.getProtocol().toLowerCase();
int bit = protocolToMaskBit(protocol);
// この特殊なビットマスクは、
// 認識されたプロトコルのいずれかが接続で使用されないことを
// 示す
if (bit == 0xdeadbeef)
{
bit = 0;
}
// 記述された順でルールをチェック
for (int i = 0; i < rules.length; i++)
{
switch (rules[i].check(remoteAddress, bit))
{
case FilterEntry.ALLOW:
return;
case FilterEntry.DENY:
throw new FilterException("rule " + (i + 1));
case FilterEntry.IGNORE:
break;
default:
throw new RuntimeException("connection filter internal error!");
}
}
// 一致したルールがない場合でも、接続を成功させることができる
return;
}
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |