#公平 #速率 #限制 #节流 #拒绝服务 (DoS) #速率限制 #IP 地址

fair-rate-limiter

检测过载并从不同的 IP 地址、子网、用户或系统公平地卸载负载。缓解拒绝服务 (DoS) 攻击。

1 个不稳定版本

0.1.0 2022 年 5 月 3 日

#4#公平

Apache-2.0 协议

23KB
296

fair-rate-limiter

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

使用 RateLimiter 结构体来检测过载并从不同的 IP 地址、用户或系统公平地卸载负载。缓解拒绝服务 (DoS) 攻击。

使用场景

  • 域名服务器:域名服务器必须在没有握手的情况下发送 UDP 响应。您的域名服务器可能会被用于 DNS 放大攻击。使用此 crate 防止这种情况。
  • 无握手的服务器:如果您的服务器在没有握手的情况下发送大响应,则可能会被用于放大攻击。使用此 crate 防止这种情况。
  • 负载均衡器:在负载均衡器中使用此 crate 以避免将 DoS 攻击转发到后端系统。
  • API 服务器:从行为不当的客户端卸载负载,并保持 API 对其他客户端可用。

功能

  • 全局吞吐量限制
  • IPv4 & IPv6
  • forbid(unsafe_code),仅依赖于 forbid(unsafe_code) 的 crate
  • 83% 测试覆盖率
  • 优化。在 i5-8259U 上的性能
    • 内部服务跟踪 10 个客户端:每次检查 150 纳秒,每秒 7M 次检查
    • 公共服务跟踪 1M 个客户端:每次检查 500 纳秒,每秒 2M 次检查
    • DDoS 缓解跟踪 30M 个客户端:每次检查 750 纳秒,每秒 1.3M 次检查

限制

替代方案

  • governor
    • 流行
    • 许多功能
    • 良好的文档
    • 不必要的 unsafe
    • 使用非标准的互斥锁库 parking_lot
  • r8limit
    • 支持单个桶。可用于不公平的负载卸载。
    • unsafe 或依赖项
  • 漏桶
    • 异步任务可以等待轮到它们使用资源的机会。
    • 不适用于负载卸载。

相关 Crates

示例

let mut limiter = new_fair_ip_address_rate_limiter(10.0).unwrap();
let mut now = Instant::now();
let key = IpAddrKey::from(Ipv4Addr::new(10,0,0,1));
assert!(limiter.check(key, 4, now));
assert!(limiter.check(key, 4, now));
now += Duration::from_secs(1);
assert!(limiter.check(key, 4, now));
assert!(limiter.check(key, 4, now));
now += Duration::from_secs(1);
assert!(limiter.check(key, 4, now));
assert!(limiter.check(key, 4, now));
now += Duration::from_secs(1);
assert!(limiter.check(key, 4, now));
assert!(limiter.check(key, 4, now));
assert!(!limiter.check(key, 4, now));

Cargo Geiger 安全报告


Metric output format: x/y
    x = unsafe code used by the build
    y = total unsafe code found in the crate

Symbols: 
    🔒  = No `unsafe` usage found, declares #![forbid(unsafe_code)]= No `unsafe` usage found, missing #![forbid(unsafe_code)]
    ☢️  = `unsafe` usage found

Functions  Expressions  Impls  Traits  Methods  Dependency

0/0        0/0          0/0    0/0     0/0      🔒  fair-rate-limiter 0.1.0
0/0        0/0          0/0    0/0     0/0      🔒  └── oorandom 11.1.3

0/0        0/0          0/0    0/0     0/0    

变更日志

  • v0.1.0 - 初始版本

待办事项

  • governor 比较性能
  • 发布
  • 模拟突发流量
  • 测量内存消耗,添加到限制部分
  • 将哈希表替换为跳表,看是否提高性能
  • 支持并发使用
  • 允许跟踪源使用未使用的未跟踪吞吐量分配

许可证:Apache-2.0

依赖项

~32KB