正文:
如何设置能限制某个
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
{
...
lo
cat
ion
{
...
#限制每 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
都被禁止访问。
如
deny
192.168.1.1; allow
127.0.0.0/24; allo
w
192.168.0.0/16; allow
10.10.0.0/16; deny
all
;转载请注明:汇站网 » 详解如何使用 Nginx
来查看高频访问 IP
并封禁 IP