我能够使用服务器的外部 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 "%r" %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=""
。