8

我试图限制对我的 Tomcat 管理器的所有请求,这些请求不是来自我的 IP。

到目前为止,我发现向 server.xml 添加一个 Valve,如下所示:

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

将阻止所有请求,除了来自“IP”的请求到整个 Tomcat(包括 webapps)。有谁知道如何做同样的事情,但只适用于 Tomcat 管理器?

顺便说一句,我正在使用Tomcat7。

4

2 回答 2

23

[tomcat]/conf/Catalina/[hostname]创建文件manager.xml.

因此,如果您的主机名是www.yourdomainname.com并且 tomcat 在opt/tomcat7/其中,那将是:

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

在这个新创建的中,manager.xml 您将RemoteAddrValveContext 放入:

<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。


2020 年 3 月更新

如果 Tomcat 位于代理服务器后面,则所有请求都来自该代理服务器,因此您需要告诉代理服务器将远程地址转发给 Tomcat(在 Nginx 中您将包含一行proxy_set_header x-forwarded-for $remote_addr;)。

此外,您需要通过RemoteIpValve在 Engine 或 Host 块中包含 a 来告诉 Tomcat 监视该转发的标头:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
        remoteIpHeader="X-Forwarded-For" 
        requestAttributesEnabled="true" />
于 2015-11-03T15:22:44.113 回答
7

在 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>

我向阀门添加了@acdhirr 的建议以拒绝状态denyStatus="404",这也有效。

于 2017-03-14T16:04:56.030 回答