IPからのものではないTomcatマネージャーへのすべてのリクエストを制限しようとしています。
これまでのところ、次のようにserver.xmlにValveを追加することがわかりました。
<Valve className="org.Apache.catalina.valves.RemoteAddrValve" allow="IP"/>
「IP」からTomcat全体(webappsを含む)へのリクエストを除くすべてのリクエストをブロックします。誰かが同じことをする方法を知っていますが、Tomcatマネージャーにのみ適用しますか?
ちなみに、Tomcat7を使用しています。
[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" />
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に追加しましたが、それも機能しました。