如何在Tomcat中限制源IP对某些URL的访问?

时间:2012-05-08 12:04:40

标签: security java-ee tomcat tomcat6 access-control

我想限制对Tomcat webapp中某些网址的访问。 只允许3个已知IP地址访问符合特定模式的URL。

e.g。 http://example.com:1234/abc/personId

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:12)

使用org.apache.catalina.filters.RemoteAddrFilter并将其映射到您要保护的URL。有关配置详细信息,请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Remote_Address_Filter

答案 1 :(得分:4)

您可以在server.xml中执行此操作:

 <Valve
    className="org.apache.catalina.valves.RemoteAddrValve"
        deny="117.40.83.*,122.224.95.*,119.255.28.*,218.8.245.*,218.85.139.*,219.117.197.*,124.89.39.*,58.18.172.*,180.153.225.*"
        />

(这些是真正的IP地址:所有者,你知道为什么: - |)但你可以看到它真的是一个阻止者而不是一个推动者。更好的解决方案是使用Deny All和Allow From语句将Apache HTTPD放在它前面,这样您就只允许访问该服务所需的3个IP地址。

答案 2 :(得分:3)

你可以使用这样的东西来阻止ips,如果你支持代理:

<Context path="/manager" docBase="manager" reloadable="true" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteIpValve"/>
  <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="<your IP regex>"/>
</Context>

答案 3 :(得分:0)

我不会通过IP地址限制访问,原因如下:

  • 这样说内部地址,例如10.0.0.0/24,表示您隐式信任整个范围。如果它被泄露会发生什么?
  • 并非所有客户都能够或将能够获得静态IP地址 - 假设您可能希望允许某些客户访问。
  • 代理不支持x-forwarded-for标头的网关设备后面的客户将只拥有网关设备的IP;相信IP信任网关背后的所有人,再次假设您可能希望为某些客户提供访问权。

相反,如果您需要运行一个系统,其中某些调用只能由某些用户访问,我会使用身份验证 - SSL客户端证书可以很好地用于此目的。或者,您可以使用类似OAuth的内容。