安全加固之限制访问时间段
之前我们做过按照 url 、客户端ip来做黑白名单,这次我们尝试通过控制时间段来做黑白名单的访问
主要的需求是开放某个日期范围内上午9点到下午18点之间访问,其余时间不允许访问。经过测试调整后的代码如下
map $time_iso8601 $deny {
default 0;
~*^2024-08-(2\d|3(0|1))T(0[0-8]|1[8-9]|2[0-3]):.* 1;
}
server {
listen 12000;
default_type text/html;
add_header Content-Type 'text/html; charset=utf-8';
set $checkurl 0;
if ( $request_uri !~ "/bhpoc($|/$|.*\.(jpg|png|css|js|woff|ico))" ) {
set $checkurl 1;
}
set $ss $checkurl$deny;
if ( $ss = 11 ) {
return 403;
}
location / {
proxy_pass http://192.168.10.120:19836;
}
}
上面的关键配置部分的含义如下:
- 映射一个变量 deny,其默认值是 0 ,但是如果正则匹配到
$time_iso8601
的时间范围是2024-08-23
到2024-08-31
的00-08
点18-23
点,则其值为 1 - 设置一个变量
$checkurl
,其值初始化为 0 - 进入 if 判断,如果客户端访问的
url
地址为上面的正则表达式,主要为首页和一些静态文件,则$checkurl
的变量值为 1 - 设置一个变量
$ss
, 其值为前面两个变量$deny$checkurl
的拼接 - 判断变量
$ss
如果其值为 11,则认为其匹配到禁止的时间范围,以及匹配到百名单以外的 url,则范围 403,或者范围 401 也是可以的 - 其他情况下,不符合时间范围和url黑名单的,则范围正常的请求
评论