欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Nginx防盗链根据UA屏蔽恶意User Agent请求(防蜘蛛)

程序员文章站 2023-09-09 20:03:01
相对于 apache,nginx 占用的系统资源更少,更适合 vps 使用。恶意盗链的 user agent 无处不在,博客更换到 wordpress 没几天,就被 spa...

相对于 apache,nginx 占用的系统资源更少,更适合 vps 使用。恶意盗链的 user agent 无处不在,博客更换到 wordpress 没几天,就被 spam(垃圾留言)盯上,又被暴力破解后台用户名密码。以前介绍过 apache 使用 .htaccess 屏蔽恶意 user agent,今天来介绍 nginx 屏蔽恶意 user agent请求的方法。

先上规则&注释

#禁用未初始化变量警告
uninitialized_variable_warn off;
#匹配各种 bad user agent,返回403错误
if ($http_user_agent ~* "embeddedwb|nsplayer|wmfsdk|qunarbot|mj12bot|ahrefsbot|windows 98|msie 6.0; windows 2000|easouspider|sogou web spider") {
return 403;
}
#匹配post方法,给变量iftemp赋值
if ($request_method ~* "post") {set $iftemp x;}
#匹配 bad user agent,给变量iftemp赋值;这几个ua主要是发垃圾留言的
if ($http_user_agent ~* "msie 6.*net|msie 7.*net|msie 6.*sv1|msie 6.0; windows nt 5.0") {
set $iftemp "${iftemp}y";
}
#如果变量iftemp符合上面两个条件,返回403错误
if ($iftemp = xy) {return 403;}

禁用未初始化变量警告,不然会不停写入警告到错误日志error.log,如下

复制代码 代码如下:

2014/09/11 09:21:11 [warn] 18649#0: *132 using uninitialized “iftemp” variable, client: 220.181.51.209, server: www.wilf.cn, request: “get /wp-content/themes/dazzling/inc/fonts/glyphicons-halflings-regular.woff http/1.0”, host: “www.wilf.cn”, referrer: “http://www.wilf.cn/”
2014/09/11 09:21:11 [warn] 18649#0: *92 using uninitialized “iftemp” variable, client: 66.249.79.55, server: www.wilf.cn, request: “get /page/14?mod=pad&act=view&id=741 http/1.1”, host: “www.wilf.cn”

nginx 规则不支持2个以上的条件判断,绕个路,通过给变量两次赋值来完成2个条件判断。

nginx 规则也是使用正则表达式匹配字符串,分析日志,根据需要自己定制。

检验成果的时候到了

复制代码 代码如下:

183.60.214.51 — [10/sep/2014:22:16:18 +0800] — bytes: 13507 — get /?mod=pad&act=view&id=460 http/1.1 — 403 — – — mozilla/5.0 (compatible; easouspider; +http://www.easou.com/search/spider.html) — – — –
220.181.125.169 — [11/sep/2014:09:38:15 +0800] — bytes: 169 — get /page/51?mod=wap&act=addcom&inpid=860 http/1.1 — 403 — – — sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07) — – — –

easouspider 和 sogou web spider,再也不见。