负载均衡器上实现客户端IP限制

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

很多提供公开服务的网站都会遇到单一客户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地址,分析后再逐一制定具体限制策略。

 


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/774126


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 网络协议 算法
【揭秘】IP负载均衡背后的神秘力量:如何让网站永不宕机?揭秘四大核心技术,解锁高可用性的秘密通道!
【8月更文挑战第19天】负载均衡技术保障互联网服务的高可用性和可扩展性。它像交通指挥官般按策略分配用户请求至服务器集群,提高响应速度与系统稳定性。本文轻松介绍IP负载均衡的工作原理、算法(如轮询、最少连接数)及实现方法,通过示例展示基于四层负载均衡的设置步骤,并讨论健康检查和会话保持的重要性。负载均衡是构建高效系统的关键。
31 2
|
1月前
|
负载均衡 网络协议 中间件
IP负载均衡技术
【8月更文挑战第17天】IP负载均衡技术
35 4
|
2月前
|
缓存 负载均衡 算法
微服务之客户端负载均衡
微服务中的客户端负载均衡是指将负载(即工作任务或访问请求)在客户端进行分配,以决定由哪个服务实例来处理这些请求。这种负载均衡方式与服务端负载均衡相对,后者是在服务端(如服务器或负载均衡器)进行请求的分发。
47 5
|
2月前
|
消息中间件 存储 负载均衡
消息队列 MQ使用问题之如何在grpc客户端中设置负载均衡器
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
4月前
|
负载均衡 Kubernetes 网络协议
如何在集群的负载均衡过程保留请求源IP
本文探讨了在Kubernetes (k8s)集群中如何确保服务获取到请求的源IP。通常,源IP可能会因网络地址转换(NAT)和代理服务器而丢失。为保留源IP,文章建议在代理服务器层添加HTTP头`X-REAL-IP`字段。在K8s中,通过设置`externalTrafficPolicy: Local`可保留源IP,但这会牺牲负载均衡。使用Ingress时,可通过配置Ingress Controller的`use-forwarded-headers`并调整ConfigMap来同时保留源IP和实现负载均衡。文章适用于对网络和K8s感兴趣的读者。
114 3
|
3月前
|
缓存 负载均衡 Java
Java一分钟之-Spring Cloud Netflix Ribbon:客户端负载均衡
【6月更文挑战第9天】Spring Cloud Netflix Ribbon是客户端负载均衡器,用于服务间的智能路由。本文介绍了Ribbon的基本概念、快速入门步骤,包括添加依赖、配置服务调用和使用RestTemplate。此外,还讨论了常见问题,如服务实例选择不均、超时和重试设置不当、服务列表更新不及时,并提供了相应的解决策略。最后,展示了如何自定义负载均衡策略。理解并正确使用Ribbon能提升微服务架构的稳定性和效率。
129 3
|
4月前
|
负载均衡 算法 网络协议
原来还可以客户端负载均衡
原来还可以客户端负载均衡
75 0
|
4月前
|
消息中间件 运维 负载均衡
负载均衡中后端连了三个rabbitmq,如果挂了一个,客户端连接mq会变慢吗
在负载均衡中使用三个 RabbitMQ 实例,如果其中一个实例发生故障,可能会影响客户端连接到 RabbitMQ 的性能。具体影响取决于负载均衡的配置和客户端的实现方式。 如果负载均衡器能够及时检测到故障的 RabbitMQ 实例并将流量路由到正常的实例,那么客户端连接的性能影响可能较小。但如果负载均衡器不能迅速切换流量或者客户端实现不支持及时的连接故障转移,那么可能会导致客户端连接的延迟或失败。 在设计这样的架构时,有一些考虑因素: 1. **健康检查和故障切换:** 确保负载均衡器能够定期检查 RabbitMQ 实例的健康状态,并在出现故障时快速将流量切换到其他正常的实例。 2.
|
11月前
|
负载均衡 网络协议 应用服务中间件
使用阿里云NLB获取客户端原地址
本文为您介绍NLB如何获取客户端真实IP,及通过Proxy Protocol获取客户端真实IP的场景和配置教程。
341 1
|
4月前
|
负载均衡 算法 Nacos
【Ribbon实现客户端负载均衡和故障转移】—— 每天一点小知识
【Ribbon实现客户端负载均衡和故障转移】—— 每天一点小知识
201 0