我正在使用 nodejs 编写一个高度可扩展的基于浏览器的网络聊天服务器。所涉及的概念很简单——首先它检查浏览器是否支持 websocket。如果不支持或与服务器规范不兼容,它会优雅地降级为传统的长轮询。
利用其高度事件化的 I/O 模型,到目前为止,我找不到任何其他框架能像 nodejs 那样出色且适合这种工作。但是,我有一个与 DOS 攻击有关的问题,我决定提出一个简单的解决方案。但是,我不确定这是否是对抗这些大规模洪水攻击的最理想方式。
我打算做的是—— 如果来自单个 IP 地址的 50 个或更多请求在特定时间长度(例如 1 秒)内到达服务器,则拒绝来自该 IP 的所有进一步请求,直到该特定时间间隔失效,依此类推。
这样会好吗?
最佳答案
这不适用于 DDOS 攻击 - 分布式拒绝服务 - 其中使用了许多 IP,并且当您需要继续为与参与攻击的机器位于同一防火墙内的某些机器提供服务时。
DDOS 中使用的机器通常是被接管的僵尸机器。当针对大型目标的 DDOS 启动时,每个 IP 限制可能会禁止所有计算机进入同一个防火墙 LAN。当纽约时报的机器被感染并被用于 DDOS 时,这可能会给大公司带来非常糟糕的公关,时报的记者检查公司的网站是否关闭,并被阻止导致他们报告这次攻击比实际成功得多。
要在 DDOS 面前继续提供服务,您确实需要根据请求本身的常见元素来阻止请求,而不仅仅是 IP。 security.se可能是有关如何做到这一点的具体建议的最佳论坛。
关于javascript - nodejs 服务器抵御 DOS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755707/