Tomcat Webアプリケーションで特定のURLへのアクセスを制限したい。特定のパターンに適合するURLへのアクセスは、既知の3つのIPアドレスのみに許可する必要があります。
例えばhttp://example.com:1234/abc/personId
どうすればこれを達成できますか?
Org.Apache.catalina.filters.RemoteAddrFilterを使用して、保護するURLにマッピングします。設定の詳細については http://Tomcat.Apache.org/Tomcat-7.0-doc/config/filter.html#Remote_Address_Filter を参照してください。
これをserver.xmlで行うと、次のようになります。
<Valve
className="org.Apache.catalina.valves.RemoteAddrValve"
deny="117.40.83.*,122.224.95.*,119.255.28.*,218.8.245.*,218.85.139.*,219.117.197.*,124.89.39.*,58.18.172.*,180.153.225.*"
/>
(これらは実際のIPアドレスです:所有者、理由はわかります:-|)しかし、ご覧のとおり、それは実際にはイネーブラーではなくブロッカーです。より良い解決策は、Apache HTTPDをDeny AllステートメントとAllow Fromステートメントでその前に置くことです。これにより、サービスへのアクセスに必要な3つのIPアドレスのみを許可できます。
次のようなものを使用してipsをブロックできます。プロキシを使用している場合は、
<Context path="/manager" docBase="manager" reloadable="true" privileged="true" >
<Valve className="org.Apache.catalina.valves.RemoteIpValve"/>
<Valve className="org.Apache.catalina.valves.RemoteHostValve" allow="<your IP regex>"/>
</Context>
次の理由により、IPアドレスでアクセスを制限しません。
x-forwarded-for
ヘッダーをサポートしていないゲートウェイデバイスの背後にいる顧客は、ゲートウェイデバイスのIPのみを取得します。 IPを信頼するすべての顧客をゲートウェイの背後で信頼します。ここでも、一部の顧客にアクセスを許可する場合があります。代わりに、特定のユーザーのみがアクセスできる呼び出しがあるシステムを実行する必要がある場合は、認証を使用します。SSLクライアント側の証明書は、この目的に非常に適しています。または、 OAuth のようなものを使用できます。