我在Nginx中有一个用于限制请求的已定义区域,如文档中所述,它非常直接:
limit_req_zone $ binary_remote_addr zone = leash:10m rate = 18r / s;
到目前为止一切顺利。
它非常适合那些采取进攻行动的客户,但最近有些人在访问我的服务时开始轮换他们的IP地址,大多数在/ 24范围内,所以我想知道是否可以将区域连接数量限制应用于一个完整的IP范围(不仅仅是每个IP),类似于--connlimit-mask 24标志可以用iptables做什么......?
答案 0 :(得分:1)
最简单的方法是使用nginx
和map
指令的geo
组合,这也会给你最大的灵活性,恕我直言。
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;
从内存中快速完成,但应该可以正常工作。
答案 1 :(得分:0)
可以将map
指令与regex一起使用,以提取$binary_remote_addr
的子网。例如,对于斜线16子网:
map $binary_remote_addr $bin_slash16 {
"~^(?P<a>..)..$" "$a";
}
来源:https://forum.nginx.org/read.php?2,271483,271788#msg-271788