如何在nginx中阻止特定的人类用户代理

  • 本文关键字:人类 用户代理 nginx nginx
  • 更新时间 :
  • 英文 :


我最近一直有一些垃圾邮件和机器人注册的问题,所有这些反captcha系统似乎都不起作用。

我分析了我的访问日志,发现用户代理不被人类使用,可能是因为它们老了…但也注意到,有一些HEAD/GET/POST/攻击也进入到web服务器以及使用完全相同的字符串在用户代理。可能引导程序使用与垃圾邮件/添加机器人相同的用户代理。

216.151.139.172 - - [24/Mar/2013:00:58:20 +0000] "GET/index.php?action=verificationcode;vid=register;rand=12c64196f4558b2dff00db7ed3ee8ad9 .HTTP/1.1"200 2189"索引。php?action =注册"Mozilla/4.0(兼容;MSIE 7.0;Windows NT 5.1;三叉戟/4.0;net CLR1.1.4322)"-"

在nginx没有阻止所有的用户代理,是否有办法只是阻止这个字符串包含在useragent,这样这些机器人可以停止注册和广告。

" Mozilla/4.0 (compatible;MSIE 7.0;Windows NT 5.1;三叉戟/4.0;.net CLR 1.1.4322"

你可以试试这个

if ($http_user_agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)") {
  return 444; # 444 is a special nginx status code that's useful in fighting attack
}

但是这个用户代理字符串是有效的,这意味着你也可以阻止一些合法的访问。

我建议你尝试基于ip的访问控制。请参见http://wiki.nginx.org/HttpAccessModule进行设置。

if ($http_user_agent ~* (Windows 95|Windows 98|wget|curl|libwww-perl) ) {
return 403;
}

更多信息请查看下面的链接https://www.nxtcloud.io/block-unwanted-user-agent-traffic-on-nginx/

最新更新