web-dev-qa-db-ja.com

IPによるTomcatマネージャーへのアクセスの制限

IPからのものではないTomcatマネージャーへのすべてのリクエストを制限しようとしています。

これまでのところ、次のようにserver.xmlにValveを追加することがわかりました。

<Valve className="org.Apache.catalina.valves.RemoteAddrValve" allow="IP"/>

「IP」からTomcat全体(webappsを含む)へのリクエストを除くすべてのリクエストをブロックします。誰かが同じことをする方法を知っていますが、Tomcatマネージャーにのみ適用しますか?

ちなみに、Tomcat7を使用しています。

7
muilpp

[Tomcat]/conf/Catalina/[hostname]にファイルmanager.xmlを作成します。

したがって、ホスト名がwww.yourdomainname.comで、Tomcatがopt/Tomcat7/にある場合、次のようになります。

/opt/Tomcat7/conf/Catalina/www.yourdomainname.com/manager.xml

この新しく作成されたmanager.xmlでは、RemoteAddrValveをコンテキストに配置します。

<Context antiResourceLocking="false" privileged="true" docBase="${catalina.home}/webapps/manager">

   <Valve className="org.Apache.catalina.valves.RemoteAddrValve" 
    allow="127\.0\.0\.1|11\.22\.33\.44" denyStatus="404" />

</Context>  

複数のIPアドレスをパイプ文字で区切ります。

私はdenyStatus=404を選択するので、侵入者の可能性は、マネージャーが存在する場合でも手がかりがありません。

Tomcatを再起動します。


更新3/202

Tomcatがプロキシサーバーの背後にある場合、要求はすべてそのプロキシサーバーから送信されるため、リモートアドレスをTomcatに転送するようにプロキシサーバーに指示する必要があります(Nginxではproxy_set_header x-forwarded-for $remote_addr;行を含めます)。

さらに、EngineまたはHostブロックのいずれかにRemoteIpValveを含めることにより、転送されたヘッダーを監視するようにTomcatに指示する必要があります。

<Valve className="org.Apache.catalina.valves.RemoteIpValve"
        remoteIpHeader="X-Forwarded-For" 
        requestAttributesEnabled="true" />
22

Tomcat8では、RemoteAddrValveがすでにC:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\manager\META-INF\context.xmlにあるのを見つけたので、コメントを外す必要がありました...

<Context antiResourceLocking="false" privileged="true" >
  <!--
    Remove the comment markers from around the Valve below to limit access to
    the manager application to clients connecting from localhost
  -->

  <!--<Valve className="org.Apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->

</Context>

ステータスdenyStatus="404"を拒否するために、@ acdhirrの提案をValveに追加しましたが、それも機能しました。

6
gordon613