OpenResty反爬虫

来源:互联网 发布:c 语言 编辑:程序博客网 时间:2024/05/06 02:56

近日网站的日志增长特别快,奇怪的是网商还没有上线,没有用户访问,哪来这么多出错日志,仔细查看日志发现,好多跟我们网站无关的请求,host也是一些什么,jd,58什么的。对于nginx我也是新手,当时就蒙了,第一反应是难道被攻击了,被人控制做什么操作了。由于不知道原因,上网查原因也无从下手,于是从openresty的安全入手开始查,在《OpenResty-Best-Practices.pdf》提到过b防火墙的demo,如下:


其中:access_by_lua:为每个请求在访问阶段的调用lua脚本进行处理。主要用于访问控制,能收集到大部分的变量。

在这里可以访问到nginx内置绑定的变量,这些可以增加nginx对网络行为的控制细度。这些变量大部分是在请求进入是解析的,并把它们缓存到会话中,以方便取用。这些变量有很多,并且还在不断迭代更新,我们来简单看几个变量:


1:host : 请求信息中的"Host"。(我的网站日志中就包括许多这样的信息,例如:“host: "ja.58.com"”)

2:remote_addr :客户端IP地址;


其实根据这两个变量就可以简单的把那个恶意的请求过虑掉,

例如:建 立一个 black_ips数组,把需要隔离的客户端IP存入,当进入access阶段时,获取remote_addr,进行比较,如果在隔离范围内,则直接返回ngx.exit(ngx.HTTP_FORBIDDEN);

示例代码:

            access_by_lua '
                if  block_ips[ngx.var.remote_addr] then
                    ngx.exit(ngx.HTTP_FORBIDDEN);
                end
            ';

但是这样有个问题,太麻烦,还要维护这个block_ips。

于是换了思路,检查请求中的host,只有host为我的网站的host时,才通过控制访问。如果证明是对的。

至此用一个比较简单的方法解了反爬虫和反代理的问题。但是作为新手没有对nginx有深入的了解,肯定还存在一些访问隐患。

没办法,只能战斗中成长。。。。。。

0 0
原创粉丝点击