很多提供公开服务的网站都会遇到单一客户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-100ms

over-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

负载均衡器上实现客户端IP限制相关推荐

  1. 网页获取客户端IP的两种方法

    不用英文写了哈: 在网页上获取客户端IP地址是件容易的事,用JavaScript以下代码即可: ip = '<!--#echo var="REMOTE_ADDR"--> ...

  2. 将svn 项目发布到服务器上,svn客户端将项目上传到服务器

    svn客户端将项目上传到服务器 内容精选 换一换 为了实现通过NAT Server可使用SSH协议跳转到SAP HANA节点的功能,以及SAP HANA节点和NAT Server互相通过SSH协议跳转 ...

  3. c# 获取客户端IP地址方法

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString();  客户端主机名: Request.ServerVaria ...

  4. JS获取客户端IP地址、MAC和主机名的7个方法汇总

    今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...

  5. 后台获得客户端IP地址

    2019独角兽企业重金招聘Python工程师标准>>> 通常通过request.getRemoteAddr() 取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定request ...

  6. HAProxy客户端IP地址的透传

    HAProxy客户端IP地址的透传 环境准备 server IP client 172.20.27.10 haproxy 172.20.27.20,192.168.27.10 nginx 192.16 ...

  7. openwrt监控linux,OpenWRT上判断客户端在线个数

    OpenWRT上判断客户端在线个数,有两种方式: 一.通过DHCP client分配列表 (缺点:client列表会根据超时时间刷新,一般超时时间为12h,) 二.通过arp缓存列表/proc/net ...

  8. .net通过获取客户端IP地址反查出用户的计算机名

    这个功能看似很少用到,但又非常实用,看似简单,但又在其中存在很多未知因素造成让人悲痛莫名的负能量... 这是公司内部最近在使用的功能,因为是DHCP,所以有时会根据计算机名做一些统计和权限的设置. 也 ...

  9. c#中获取服务器IP,客户端IP以及其它

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...

最新文章

  1. python自动化办公:word篇。职场高手不是梦。
  2. Docker 图形界面管理工具 -- Portainer
  3. java实用教程——组件及事件处理——DocumentEvent事件
  4. postgresql查询mysql库_postgresql 查看数据库,表,索引,表空间以及大小
  5. linux audio A2B
  6. docker 改host_所以到底该如何修改 docker 容器的端口映射!!!
  7. 十进制转任意进制-数论
  8. java学习中,字符串使用(比较、构造方法)(java 学习中的小记录)
  9. go设置后端启动_使用 Go Wails 框架来构建桌面应用(Go+Vue.js)
  10. Apache Commons介绍(转载)
  11. Android获取mp3音频文件总播放时长大小
  12. Docker 搭建 YApi 可视化接口管理平台
  13. Linux兄弟连学习
  14. utools:比everything更好用的集成工具
  15. 2022京东年货节全民炸年兽活动时间和玩法阶段
  16. 推广网站的26种方法
  17. 狼的故事11:以牙还牙
  18. 【沃顿商学院学习笔记】宏观经济学——03国际移民与城市发展Immigration and Cities
  19. GO语言特殊常量之iota
  20. html下拉控件 拼音检索和中文检索,Combobox控件实现汉字按拼音首字母检索

热门文章

  1. openresty + lua
  2. table导出Excel
  3. 6000字思考!一篇看懂促销系统的底层逻辑
  4. 付费会员制,如何赋能产品?
  5. 互联网金融产品需要什么样的产品经理?
  6. 问答专场 | 我是蝉游记创始人纯银V,你有什么想问我?
  7. 你知道这些产品设计灵感网站吗?
  8. 北京活动:4月20号《科技媒体、SEO与PM》主题活动
  9. React性能优化之Context
  10. Putty通过ssh代理连接远程服务