针对线上对外NGINX代理服务安全非常重要,接下来针对域名IP白名单配置来拦截非法请求,同时通过Referer防盗链设置判断该请求是否为合法请求,具体看本文测试操作结果。
方式一:通过http_Host来源判断主机名正则匹配:
server_name www.test.com 172.17.80.104;
if ($http_Host !~* ^www.test.com|172.17.80.104$)
{
return 500;
}
域名和IP都可以访问:


IP172.17.80.104访问失败
server_name www.test.com;
if ($http_Host !~* ^www.test.com$)
{
return 500;
}
IP访问结果:
通过IP访问被限制并跳转到错误500

方式二:通过default_server 定义及匹配规则:
server {
listen 172.17.80.104:80 default_server;
server_name _;
return 500;
}
server {
listen 172.17.80.104:80;
server_name www.test.com 172.17.80.104;
名单中域名正常访问:

未加入域名访问失败:

IP地址访问正常:

方法三:Nginx-利用Referer防盗链
nginx的referer防盗链模块,利用http请求头中的 referer 信息进行校验,判断该请求是否为合法请求,是则放行,否则可以自定义返回一个结果,可防止大部分网址引用自己的资源,但是referer是可以伪造的,伪造后可以继续访问资源
1、ngx_http_referer_module模块:
用来阻止Referer首部无有效值的请求访问,可防止盗链
2、valid_referers none|blocked|server_names|string ...;
定义referer首部的合法可用值,不能匹配的将是非法值
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:referer首部中包含本主机名
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*.baidu.com
server_name www.test.com www.test2.com 172.17.80.104;
# 拦截非法referer ,none 和 blocked 的区别看以上说明
valid_referers blocked www.test.com 172.17.80.104 ;
if ($invalid_referer) {
return 403 ;
#rewrite ^.*$ http://www.baidu.com/403.jpg;
}
方法四:白名单加防盗链组合限制
server {
listen 172.17.200.234:80 default;
server_name _;
return 403;
}
server_name 172.17.200.234 121.52.218.104 abc.longdundata.com;
#拦截非法referer
valid_referers none blocked www.test.com;
if ($invalid_referer) {
return 403 ;
}
通过abc.longdundata.com访问显示异常,虽然白名单添加可以访问但referer未添加域名导致访问失败:

本文详细介绍了如何通过NGINX配置实现域名和IP白名单拦截非法请求,以及利用Referer防盗链保护资源安全。内容包括四种方法:主机名正则匹配、default_server定义、Referer防盗链模块以及白名单和防盗链的组合限制,通过实例展示了配置效果。
4717

被折叠的 条评论
为什么被折叠?



