Nginx 速率限制计数整个子网,而不仅仅是每个 IP

Ist*_*ger 6 nginx rate-limiting

我在 Nginx 中定义了一个区域来限制请求,这很简单,如他们的文档中所述:

limit_req_zone $binary_remote_addr zone=leash:10m 速率=18r/s;

到目前为止,一切都很好。

它非常适合具有攻击性的客户,但最近他们中的一些人在访问我的服务时开始轮换其 IP 地址,大部分在 /24 范围内,所以我想知道是否可以将区域连接计数限制应用于整个 IP范围(不仅仅是每个 IP),像 --connlimit-mask 24 标志之类的东西可以与 iptables 一起使用...?

Sha*_* C. 2

最简单的方法是和指令nginx的组合,这也将为您提供最大的灵活性,恕我直言。mapgeo

geo $geoRateBlacklist {
    default        0;
    192.0.0.0/24   1;
    10.0.0.0/24    1;
    172.0.0.0/24   1;
}

map $geoRateBlacklist $rateBlacklist {
    1              $binary_remote_addr;
    0              "";
}

limit_req_zone $rateBlacklist zone=leash:10m rate=18r/s;
Run Code Online (Sandbox Code Playgroud)

凭记忆快速完成,但应该可以。