ヘッダーをスキップ
Oracle® Coherenceセキュリティ・ガイド
リリース3.7.1
B71689-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

2 全般的なセキュリティ対策の有効化

この章では、Coherence環境の保護を支援するために利用可能な一般的なセキュリティの手順を説明します。この手順は、利用可能な場合は常時の設定が必要な第一のセキュリティ方法とみなすことができます。

この章には次の項が含まれます:

2.1 Javaセキュリティ・ポリシー・ファイル内のCoherence権限の指定

Coherenceの機能に最低限必要とされる権限セットは、security.policyファイル内で指定されています。これは、Coherenceインストールの一部として同梱されています。このファイルは、COHERENCE_HOME/lib/security/security.policyにあります。

ポリシー・ファイルの形式の詳細は、Java SEセキュリティ・ガイドを参照してください。次を参照してください。

http://download.oracle.com/javase/6/docs/technotes/guides/security/permissions.html

Coherence権限を指定するには:

  1. ポリシー・ファイルに最低限の権限セットを入力します。

    例:

    grant codeBase "file:${coherence.home}/lib/coherence.jar"
        {
                permission java.security.AllPermission;
        };
    
  2. 次のように、JDK jarsignerツールを使用してバイナリに署名します。

    jarsigner -keystore ./keystore.jks -storepass password coherence.jar admin
    

    さらに、次のようにポリシー・ファイルで保護することもできます。

    grant SignedBy "admin" codeBase "file:${coherence.home}/lib/coherence.jar"
        {
                permission java.security.AllPermission;
        };
    
  3. オペレーティング・システムのメカニズムを使用して、ポリシー形式、Coherenceバイナリ、権限などすべての関連ファイルを悪質な改ざんから保護します。

  4. セキュリティ・ポリシー・ファイルを使用するには、java.security.managerシステム・プロパティを定義し、java.security.policyシステム・プロパティをそのセキュリティ・ポリシー・ファイルの場所に設定することでJava Security Managerを有効にします。また、tangosol.homeシステム・プロパティをCOHERENCE_HOMEに設定する必要があります。例:

    -Djava.security.manager
    -Djava.security.policy=c:/tangosol/lib/security/security.policy
    -Dtangosol.home=c:/tangosol
    

    注意:

    セキュリティ・ポリシー・ファイルには、デフォルトのJREセキュリティ・パーミッションが付与されていることが想定されています。そのため、java.security.policyシステム・プロパティを設定するときは、2つの等号(==)ではなく、1つの等号(=)を使用するように注意してください。

2.2 ホストベースの認可の使用方法

ホストベースの認可は、指定されたホストのみがクラスタに接続できるようにするタイプのアクセス制御です。この機能は、クラスタ・メンバー接続とExtendクライアント接続の両方で使用できます。この種類のアクセス制御は、既知のホストがクラスタに参加またはアクセスしている環境に適しています。

この項のトピックは次のとおりです。

2.2.1 クラスタ・メンバーの認可済ホストの指定

クラスタのデフォルトの動作では、いずれのホストもクラスタに接続し、クラスタ・メンバーになることができます。この動作を変更することで、ホスト名またはIPアドレスに基づいてクラスタに接続可能なホストを限定できます。特定のクラスタ・メンバーを受け入れるかどうかを判断するために、カスタマイズされたフィルタを作成することもできます。

クラスタの認可済ホストは、<cluster-config>要素内の<authorized-hosts>要素を使用してオペレーション・オーバーライド・ファイルで構成されます。<host-address>要素を使用して特定のアドレスを入力するか、<host-range>要素を使用してアドレスを範囲を定義できます。

次の例では、IPアドレスが192.168.0.5、192.168.0.6、または192.168.0.10から192.168.0.20の範囲内のいずれかのクラスタ・メンバーのみを受け入れるようにクラスタを構成します。

<?xml version='1.0'?>

<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
   xsi:schemaLocation="http://xmlns.oracle.com/coherence/
   coherence-operational-config coherence-operational-config.xsd">
   <cluster-config>
      <authorized-hosts>
         <host-address>192.168.0.5</host-address>
         <host-address>192.168.0.6</host-address>
         <host-range>
            <from-address>192.168.0.10</from-address>
            <to-address>192.168.0.20</to-address>
         </host-range>
      </authorized-hosts>
   </cluster-config>
</coherence>

2.2.2 Extendクライアントの認可済ホストの指定

拡張プロキシのデフォルトの動作では、Extendクライアントの接続がすべて受け入れられます。ホスト名またはIPアドレスに基づいてクライアント接続を許可するように、この動作を変更できます。特定のクライアントを受け入れるかどうかを判断するために、カスタマイズされたフィルタを作成することもできます。

プロキシ・スキーム定義の<tcp-acceptor>要素内の<authorized-hosts>要素を使用して、キャッシュ構成ファイルでクラスタの認可済ホストを構成します。特定のアドレスを入力するには、<host-address>要素を使用します。アドレスの範囲を定義するには、<host-range>要素を使用できます。

次の例では、IPアドレスが192.168.0.5か192.168.0.6であるか、または192.168.0.10から192.168.0.20の範囲内であるクライアントからの接続のみを受け入れるように拡張プロキシを構成します。

<proxy-scheme>
   <service-name>ExtendTcpProxyService</service-name>
   <thread-count>5</thread-count>
   <acceptor-config>
      <tcp-acceptor>
         ...
         <authorized-hosts>
            <host-address>192.168.0.5</host-address>
            <host-address>192.168.0.6</host-address>
            <host-range>
               <from-address>192.168.0.10</from-address>
               <to-address>192.168.0.20</to-address>
            </host-range>
         </authorized-hosts>
         ...
      </tcp-acceptor>
   </acceptor-config>
   <autostart>true</autostart>
</proxy-scheme>

2.2.3 フィルタ・クラスを使用した認可の決定

フィルタ・クラスでは、特定のホスト接続を受け入れるかどうかを決定できます。フィルタ・クラスは、Extendクライアント接続とクラスタ・メンバー接続の両方で使用できます。フィルタ・クラスでは、com.tangosol.util.Filterインタフェースを実装する必要があります。インタフェースのevaluate()メソッドに、ホストのjava.net.InetAddressが渡されます。実装は、trueを返して接続を受け入れます。

フィルタ・クラスを有効にするには、<host-filter要素内の<class-name要素を使用して、完全修飾クラス名を入力します。<init-params要素を使用して、実装クラスの初期化パラメータを設定することもできます。Filterインタフェースの詳細は、Oracle Coherence Java APIリファレンスを参照してください。

次の例では、MyFilterという名前のフィルタを構成します。このフィルタを使用して、ホスト接続が許可されるかどうかを決定します。

<authorized-hosts>
   <host-address>192.168.0.5</host-address>
   <host-address>192.168.0.6</host-address>
   <host-range>
      <from-address>192.168.0.10</from-address>
      <to-address>192.168.0.20</to-address>
   </host-range>
   <host-filter>
      <class-name>package.MyFilter</class-name>
         <init-params>
            <init-param>
               <param-name>sPolicy</param-name>
               <param-value>strict</param-value>
            </init-param>
         </init-params>
   </host-filter>
</authorized-hosts>

2.3 不正なクライアントの管理

許容範囲外で動作するExtendクライアントは不正なクライアントと見なされます。不正なクライアントには、応答の遅いクライアントや、サービス拒否攻撃の場合のようにプロキシを過剰に使用しようとする悪質なクライアントなどがあります。いずれの場合も、プロキシがメモリー不足になり、応答不能になる可能性があります。

このような悪用を防ぐために、サスペクト・プロトコルが使用されます。サスペクト・アルゴリズムを使用してクライアント接続を監視し、異常に遅い、または悪用されているクライアントを探します。不正なクライアント接続が検出されると、プロキシ・サーバーがメモリー不足になることを防ぐために、アルゴリズムによって接続が閉じられます。プロトコルは、クライアントの送信接続バッファ・バックログのサイズ(バイト数)と長さ(メッセージ数)の両方を監視することによって機能します。クライアントが疑わしいとき、正常に戻ったとき、または不正と見なされるときを判断するために、様々なレベルが設定されています。

サスペクト・プロトコルは、プロキシ・スキーム定義の<tcp-acceptor要素内で構成します。<tcp-acceptor要素の使用方法の詳細は、『Oracle Coherence開発者ガイド』のtcp-acceptorに関する項を参照してください。疑いのあるプロトコルはデフォルトで有効です。

次の例は、サスペクト・プロトコルの構成方法を示しており、デフォルト設定に類似しています。クライアントの送信接続バッファ・バックログが10MBまたはメッセージ数が10000個に達すると、クライアントは疑わしいと見なされ、監視されます。クライアントの接続バッファ・バックログが2MBまたはメッセージ数が2000個まで戻ると、クライアントは安全と見なされ、監視されなくなります。クライアントの接続バッファ・バックログが95MBまたはメッセージ数が60000個に達すると、クライアントは安全でないと見なされ、このクライアントとの接続が閉じられます。

<proxy-scheme>
   <service-name>ExtendTcpProxyService</service-name>
   <thread-count>5</thread-count>
   <acceptor-config>
      <tcp-acceptor>
         ...
         <suspect-protocol-enabled>true</suspect-protocol-enabled>
         <suspect-buffer-size>10M</suspect-buffer-size>
         <suspect-buffer-length>10000</suspect-buffer-length>
         <nominal-buffer-size>2M</nominal-buffer-size>
         <nominal-buffer-length>2000</nominal-buffer-length>
         <limit-buffer-size>95M</limit-buffer-size>
         <limit-buffer-length>60000</limit-buffer-length>
      </tcp-acceptor>
   </acceptor-config>
   <autostart>true</autostart>
</proxy-scheme>