通过IP限制Tomcat Webapp的外部访问

通过IP限制Tomcat Webapp的外部访问

我能够使用服务器的外部 IP 成功访问我的 Web 应用。但是,我现在想通过 IP 限制对服务器的访问。

我在conf/server.xml中添加了以下内容:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt" 

               pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="true"/>

        <Valve className="org.apache.catalina.valves.RemoteAddrValve" 
        allow="127\\.0\\.0\\.1|192\\.*\\.*\\.*|0\\.*\\.*\\.*|<my external machine ip>" deny=""/>

但是我仍然无法从我的 访问 Web 应用程序。如果我删除 RemoveAddrValue 块,那么我就可以从外部机器访问 Web 应用程序。

我正在使用 apache-tomcat-7.0.47

我如何通过 IP 限制外部访问。这是正确的方法吗?

答案1

我会使用不同的方法。要么使用防火墙(这是最好的方法,除非您需要 Web 服务器可访问但应用服务器不可访问),要么使用 Apache 自己的控件允许和拒绝。

答案2

Envite 是正确的,防火墙方法更简单:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s $SOME_IP1 --dport 8080 -j ACCEPT
iptables -A INPUT -s $SOME_IP2 --dport 8080 -j ACCEPT
iptables -A INPUT --dport 8080 -j DROP

很可能是你没有正确配置防火墙,或者在你插入的规则之前还有另一条规则允许流量到该端口/主机

答案3

您是否检查过 tomcat 日志?这应该是您解决此类问题时首先要查看的地方。该文件通常称为 catalina.out。重现问题并使用相应的日志条目更新您的问题。

然而,有几件事引人注目:

尝试将双引号替换\\为单引号\。例如,Engine、Host 或 Context 容器中的 this 将允许从127.0.0.1和访问11.22.33.44(从远程地址过滤器):

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
       allow="127\.\d+\.\d+\.\d+|11\.22\.33\.44"/>

您也可以尝试删除deny=""

相关内容