实现网站对IP地址的限制访问
关于出口IP大家可能不是很了解。由于互联网上整个ipv4的ip有限,导致了上网的设备不能都分配到公网ip,所以路由器等设备出现了,让一个小区或一个学校等单位共享一个出口IP进行上网。再回到我们今天的主题,通常现在ip访问有3种做法:1.机房的网络设备限制(通过交换机,路由器,防火墙进行现在).2.通过程序进行限制.3.通过部署的web容器进行限制(tomcat,jboss,nginx,apache
关于出口IP大家可能不是很了解。由于互联网上整个ipv4的ip有限,导致了上网的设备不能都分配到公网ip,所以路由器等设备出现了,让一个小区或一个学校等单位共享一个出口IP进行上网。
再回到我们今天的主题,通常现在ip访问有3种做法:
1.机房的网络设备限制(通过交换机,路由器,防火墙进行现在).
2.通过程序进行限制.
3.通过部署的web容器进行限制(tomcat,jboss,nginx,apache等).
通过程序进行限制,主要是根据http协议带的ip头,或者socket带的ip信息来进行限制。限制步骤如下:
1.新建一个拦截器,http和socket都可以创建拦截器进行拦截。
2.获取ip头信息,http获取方法如下:
public static String getIpAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if ((ip == null) || (ip.length() == 0)
|| ("unknown".equalsIgnoreCase(ip)))
ip = request.getHeader("Proxy-Client-IP");
if ((ip == null) || (ip.length() == 0)
|| ("unknown".equalsIgnoreCase(ip)))
ip = request.getHeader("WL-Proxy-Client-IP");
if ((ip == null) || (ip.length() == 0)
|| ("unknown".equalsIgnoreCase(ip)))
ip = request.getRemoteAddr();
if(ip.startsWith(Constant.HUPU_ZERO)){
try {
ip=InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
logger.error("获取本机网络IP异常!"+e.getMessage(),e);
}
}
return ip;
}
通过socket获取方法如下(InetSocketAddress对象的方法):
getRemoteAddress().getAddress().getHostAddress();
3.匹配限制的ip,如何相同则进行拦截。
通过容器tomcat的限制方法如下:
找到tomcat配置文件server.xml,在<Host>节点之前配置
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.*" deny=""/>
之后重启,就会限制192.168.1.*网段的所有ip进行访问。allow="192.168.1.8"是限制192.168.1.8这个ip,限制多个ip或多个网段用英文逗号隔开。
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.8,192.168.1.9" deny=""/>
在tomcat的server.xml里面可以配置两个vavle来限制ip访问,可以使用allow配置白名单,用deny配置黑名单,都支持正则配置匹配,可以把这个vavle配置在any Catalina container (Engine, Host, or Context)的任何一个,只会有不同的作用于,可以用ip4或者ip6地址;denyStatus是黑名单访问的http状态码,
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" deny="178.238.\d+.\d+" denyStatus=“403”/>
tomcat还有Remote Host Filter RemoteHostValve这个来表示域名的匹配
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.aaa.com" deny="www.bbb.com" denyStatus=“403”/>
org.apache.catalina.valves.RemoteIpValve 这个vavle可以用来把代理或者负载均衡机器或者request header中的X-Forwarded-For的ip把request的remote ip替换掉,改成真正的地址。
更多推荐
所有评论(0)