很多提供公开服务的网站都会遇到单一客户IP大量访问导致性能受到影响的问题,这些访问有可能是***流量,也有可能是来自代理服务器或者NAT设备后端若干客户的访问。如何有效地对这些流量进行限制而不影响正常用户使用,不同类别产品在这方面提供不同程度的防护。现以A10负载均衡产品AX为例介绍如何实现客户端IP限制。本文提到所有连接为完整TCP连接或未开启SYN-Cookie功能时的半连接。关于SYN-Flooding的防护,负载均衡设备均有较强防护能力,本文不做讨论。也可以针对服务器和虚拟服务器进行总连接数或连接速率限制,也不在本文讨论范围。
首先,某个客户端过渡使用资源体现在以下几个方面:
- 并发连接数,同一客户IP打开大量连接不关闭,耗费服务器连接资源
- 新建连接速率,同一客户IP每秒新建连接数量
- 并发7层请求数,同一客户IP并发的请求数量,并发连接限制了TCP连接数量,但一个TCP连接中可以传送很多个HTTP请求。
- 7层请求速率,同样由于一个TCP连接中有多个7层请求,单纯TCP连接限制可能无法有效防护。流行的CC***就是利用少数TCP连接发送大量HTTP请求的。
- 带宽使用,作为负载均衡设备,以连接为基础进行处理是更合理的方式。限制了合理的连接数量和请求数量后,带宽也相应得到限制。
负载均衡设备通常有足够的并发连接数和新建连接处理性能将这些连接转发给服务器,但服务器往往无法承受这些负担,因此客户端IP限制很多时候是为了避免服务器过载。而单纯针对服务器的连接限制保护又会导致所有客户端受影响。基于客户端IP的限制则可以保证未过量使用的用户不受影响,只是***流量和过量使用的用户收到限制。
下面介绍其工作原理,涉及部分配置命令,但不做完整配置介绍。
- AX可以定义叫做Class List的IP列表,最多可以定义255个Class List,每个Class List可以包含800万主机IP地址(/32掩码)和64K个网络子网。Class List可以以文件形式存在。
- Class List的格式如下:
ipaddr /network-mask [glid num | lid num] [age minutes] [; comment-string]
lid为Limiting ID,是在某个策略下定义的限制规则编号;
glid为Global Limiting ID,是全局下定义的限制规则编号;
age可以设定这个条目存在多久后删除,只对主机IP地址适用,可对可疑***IP短时间限制。
例如:
1.1.1.1 /32 lid 1
2.2.2.0 /24 lid 2 ; LID 2 applies to every single IP of this subnet
0.0.0.0 /0 lid 10 ; LID 10 applied to every undefined single IP
3.3.3.3 /32 glid 3 ; Use global LID 3
- lid或glid下定义对应的限制规则,可定义单个IP并发连接数量、每100ms新建连接数量、并发请求数、每100ms请求数量、以及超过限制时的可选动作(转发、reset、锁定、日志)
conn-limit num
conn-rate-limit num per num-of-100ms
request-limit num
request-rate-limit num per num-of-100msover-limit-action [forward | reset] [lockout minutes] [log minutes]
示例:
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
- 限制策略模板内会定义所使用的Class List名字和对应的lid规则,例如
AX(config)#slb template policy vp_policy
AX(config-policy)#class-list name vp_list
AX(config-policy)#class-list lid 1
AX(config-policy-policy lid)#request-rate-limit 50 per 1
AX(config-policy-policy lid)#request-limit 60000
AX(config-policy-policy lid)#over-limit reset logging
- 应用限制策略到VIP或者vport或者全局下,下面例子为应用到vport 80下对HTTP请求数量进行限制
AX(config)#slb virtual server vs1
AX(config-slb virtual server)#port 80 http
AX(config-slb virtual server-slb virtua…)#template policy vp_policy
在制定限制规则时,要考虑代理服务器和NAT设备后端若干客户使用同一IP的问题,采用的限制值由较大值逐渐下调。或者先采取只log不限制的方式获得IP地址,分析后再逐一制定具体限制策略。
R.S.
转载于:https://blog.51cto.com/virtualadc/774126