通过IP限制对Tomcat管理器的访问



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

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

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

将阻止所有请求,除了来自"IP"的请求到整个Tomcat(包括Web应用程序)。有人知道如何做同样的事情,但只适用于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/2020

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

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

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

在Tomcat8中,我发现RemoteAddrValve已经在C:Program FilesApache Software FoundationTomcat 8.0webappsmanagerMETA-INFcontext.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"的状态,这也起到了作用。

最新更新