正文:
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的DDoS攻击的时候。其中CC攻击(Challenge Collapsar)是DDoS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。
为了防止CC攻击,可以使用Nginx的HttpLimitReqModule和HttpLimitZoneModule来限制IP在同一时间段的访问次数。
HttpLimitReqModule是一个用来限制单位时间内连接数的模块,可以通过配置limit_req_zone和limit_req指令来实现限制。当并发连接超过指定数量时,服务器会返回503错误。
HttpLimitConnModule则是用来限制单个IP的并发连接数,可以通过配置limit_zone和limit_conn指令来实现限制。
这两个模块的区别在于,HttpLimitReqModule是对一段时间内的连接数进行限制,而HttpLimitConnModule是对同一时刻的连接数进行限制。
下面是一个使用HttpLimitReqModule限制某一段时间内同一IP访问次数的实例:
http{
...
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为20个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
...
server{
...
location {
...
#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
}
HttpLimitZoneModule 是一个用于限制并发连接数的模块实例
limit_zone 只能在 http 作用域中定义,而 limit_conn 可以在 http、server 和 location 作用域中定义。
http{
...
#定义一个名为one的limit_zone,大小10M内存来存储session,
#以$binary_remote_addr 为key
#nginx 1.18以后用limit_conn_zone替换了limit_conn
#且只能放在http作用域
limit_conn_zone one $binary_remote_addr 10m;
...
server{
...
location {
...
limit_conn one 20; #连接数限制
#带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k
limit_rate 500k;
...
}
...
}
...
}
服务器全局限IP
#vi nginx.conf
allow 10.57.22.172;
deny all;
指定目录的IP访问限制
在nginx的配置文件中,可以使用正则表达式来限制指定目录的IP访问。具体实现如下:
```
server {
listen 80;
server_name xxx.com;
location /test1/ {
allow 192.168.1.101;
deny all;
}
location /test2/ {
allow 192.168.1.101;
deny all;
}
location / {
# 其他目录的php程序,所有ip地址均可以访问
# 这里可以根据实际需求进行配置
}
}
```
注意事项:
1. 注意事项一:一定要在deny指令中加入一个IP地址,否则会直接跳转到403页面,不再执行后续操作。如果403页面是同一域名下的默认页,会导致无限循环访问。
2. 注意事项二:允许访问的IP段需要按照从小到大的顺序排列。例如,只有在127.0.0.0/24之后才能是10.10.0.0/16。其中,24表示子网掩码为255.255.255.0,16表示子网掩码为255.255.0.0,8表示子网掩码为255.0.0.0。
3. 注意事项三:在配置文件的结尾处添加deny all指令,表示除了上述允许访问的IP段之外,其他所有IP都被禁止访问。
如
转载请注明:汇站网 » 详解如何使用Nginx来查看高频访问IP并封禁IP