实现网站对IP地址的限制访问

关于出口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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值