如何处理攻击 IP 是比较高效节省资源的

2023-06-26 16:01:05 +08:00
 brader
前置:不讨论云防火墙、高防服务器这些话题,我知道有这个东西,单纯想了解技术而已。

假设 HTTP 接口有个自动拉黑超频 IP 机制,判断该 IP 在 IP 黑名单的话,接口就立马返回访问异常,虽然这样不需要继续往下走业务代码流程,立马结束了该次请求,但在实际环境应用中,我发现当攻击访问非常大量的时候,服务器的 CPU 占用其实挺高的。

这时候我就在思考一个问题,其实立马结束一个攻击请求,应该不是一个最高效节省资源的做法?我是否应该保持住这个连接?一直到它超时为止。理由是这样的:假设超时时间是 60 秒,如果我立马响应并结束请求,那这个 IP 在 60 秒内可能可以对我发起几千几万个请求,这是很可怕的,每个请求的进程创建、初始化代码、销毁等等都要消耗 CPU 资源,但是我保持住不响应它,每次可以拖着它 60 秒。

我会有这个想法的灵感是来自于云服务器防火墙,因为我发现我把自己 IP 在云防火墙拉黑后,我访问的表现特征就是等待几十秒后超时,而不是立马响应我拒绝我。

不知道我的设想有没有错误,我设想的这个做法,是否真的会比较节省服务器资源呢,欢迎懂的大佬指点一下。
3247 次点击
所在节点    程序员
50 条回复
codehz
2023-06-26 16:09:14 +08:00
对付普通 dos 工具还是有效果的(也不排除直接 bypass ip 栈绕过 tcp 状态机处理),ddos 就没啥用了
brader
2023-06-26 16:11:31 +08:00
@codehz ddos 的话不考虑,其实 ddos 的肉鸡,也等同于正常用户了,我的应对就是扩容服务器加大承受能力。但是尽量避免出现比如一个 IP 客户端,却短时间发起 N 多请求消耗掉很多资源。 一个肉鸡 IP 像正常用户的频率程度访问接口服务,我能接受
opengps
2023-06-26 16:11:34 +08:00
60 秒不一定是客户端试试服务端的设置,对方如果在客户端设置了 1 秒超时,那你这个就失效了
brader
2023-06-26 16:13:09 +08:00
@opengps 那么客户端这个设置来攻击的话,又可以等同回到原来的攻击效果?对客户端的资源消耗、或者其他方面不会有比较大的局限吗
520discuz
2023-06-26 16:29:21 +08:00
宝塔防火墙 N 秒内访问 N 次 自动拉黑
areless
2023-06-26 16:37:55 +08:00
我这边的方法通常是所提供的服务 分页缺失 pagesize 可以无限大 等漏洞,造成返回巨大 慢的 请求。 只要以普通用户的频率攻击,就能拖垮你的服务
opengps
2023-06-26 16:41:53 +08:00
@brader 客户端是肉鸡,假设是这批发动攻击的肉鸡是 100 万台设备 PC ,每个只发起一条连接,那么对其客户端的资源消耗是无感知的,但对拟于服务端来说,你需要自己扛起处理百万连接的负载,所以才是“拒绝服务攻击”
dqzcwxb
2023-06-26 16:45:30 +08:00
攻击者压根不会接收或者等待你的响应只是无限请求,所以你在响应上做任何动作都无意义
brader
2023-06-26 16:46:54 +08:00
@areless 这个意义不大,服务端只会暂时瘫痪,服务者发现这个问题后,可以有很明确的修复方法,不会无法应对。
opengps
2023-06-26 16:47:08 +08:00
给你分享个案例,加深下理解:
我之前做的 gps 服务端,正常来讲就是服务器承载外边进来的上百万 tcp 连接,正常来说每个连接就是一台 gps 终端。
然而我需担心的场景是:我服务器集群全挂了,这时候我手动启动了 1 台,结果是这台必然很快就扛不住巨大的连接数挂掉。
这里最起码应该改成:在我完成整个后端几十台服务器的启动之后,再从防火墙一股脑的把连接放进来。
当然实际上的业务场景还有很多值得优化的地方,不到了具体问题面前甚至都讲不出来这些过程。
brader
2023-06-26 16:48:36 +08:00
@opengps 额,我意思大概是这样,你有 100 万台肉鸡没问题,我就当 100 万正常用户,我要做的事情是,防止你单个设备高频发起的攻击,防止你 10 万台肉鸡,却发挥出 100 万台肉鸡的效果
Aloento
2023-06-26 16:49:07 +08:00
一般都是直接丢弃请求的,不会返回
finab
2023-06-26 16:49:36 +08:00
最好 TCP 那层就给拒绝掉,就算他疯狂的请求至少都比到应用层去处理强吧
opengps
2023-06-26 16:50:09 +08:00
@brader 10 万台肉鸡,却发挥出 100 万台肉鸡的效果,也不过才每个肉鸡发起 10 个连接。
要知道你的根本在于,不能给对方回复,因为一旦接起连接,从接起开始就已经消耗了服务器端资源,连接的建立本身,可能已经比你发送的几个字节消耗资源更大了
brader
2023-06-26 16:53:38 +08:00
@dqzcwxb 客户端确实可以不接收和等待响应,直接起 N 多进程或者直接切断,但是我感觉应该不是完全无意义的,如果完全无意义,为什么云防火墙都是做成那种保持住连接一直到响应超时呢
ppking
2023-06-26 16:56:26 +08:00
攻击者的资源相比于服务提供者来讲肯定是更充裕的,要不然也没办法对你进行 dos 攻击。这就是一场资源的比拼,你要是能用更少的资源处理掉这些攻击,那你就建立了防御的优势。
我想表达的意思是,你都打算封 ip 了,那么丢数据包的行为越往前,肯定处理成本越小。在报文进入内核协议栈之前就把拉黑 ip 的报文丢掉不更爽嘛。
areless
2023-06-26 16:56:47 +08:00
@brader 在瘫痪的正式环境下,通过日志很难排查这种低频率 dos 。而高频率 ddos 很容易被发现,也很容易被追究法律责任。几分钟一次的 dos ,基本很容易从法律层面圆过去
brader
2023-06-26 16:57:04 +08:00
@finab
@opengps 那意思就是,如果围绕最节约服务器资源的技术角度研究下去,最终还是要回到 TCP 层来拒绝比较好,其实这个就是专门的高防服务器,就是做这个事情的?
kera0a
2023-06-26 16:58:54 +08:00
@brader 你这个超时可能是你本地客户端自己设置的超时,人家防火墙早把你的包给扔了,不会好心的给你返回一个让你超时的数据包的,那也就不叫超时了。
xuanbg
2023-06-26 16:59:58 +08:00
你这不是凑上去让人家的攻击具备 DDOS 的效果吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951809

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX