限制通过IP访问Tomcat管理器

问题描述 投票:0回答:2
tomcat tomcat7 tomcat-valve tomcat-manager
2个回答
25
投票

[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;
)。

此外,您需要通过在 Engine 或 Host 块中包含

RemoteIpValve
来告诉 Tomcat 监视转发的标头:

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

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"
,这也有效。

© www.soinside.com 2019 - 2024. All rights reserved.