通过IP限制访问Tomcat管理器

b4lqfgs4  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(151)

我试图限制所有的请求,我的Tomcat管理器,不来自我的IP。
到目前为止,我发现向server.xml添加Valve是这样的:

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

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

taor4pac

taor4pac1#

[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中:

<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" />
cclgggtu

cclgggtu2#

在Tomcat 8中,我发现C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\manager\META-INF\context.xml中已经有了RemoteAddrValve,我只需要取消注解它。

<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",这也起作用了。

相关问题