乐趣区

关于爬虫:利用免费WAF雷池社区版解决爬虫占用网络带宽问题

1. 背景

关联词:限频、访问控制、爬虫、反爬虫、WAF、长亭、雷池

对于一些主动的 bot 或者歹意的爬虫,其拜访网站的频率大、工夫长,如果关上云服务器的治理后盾,往往会发现网络的大部分流量都集中在一个或几个的 IP 上。对于这些状况其实都能够以一个很简略的伎俩实现,那就是 在服务器中对拜访 IP 限频

然而对于拜访 IP 的限频性能通常与业务逻辑关系不大,开发者通常不太想要去本人保护一个 IP 拜访频次表,同时在分布式、并发等条件下手动保护所有访问者的信息有着很大的开发成本。

长亭的雷池 WAF 正好解决了这一系列问题,雷池提供了限频、端口转发、手动 IP 黑白名单等性能,以及其外围性能——进攻 Web 攻打。

2. 装置雷池

官网提供了在线装置、离线装置、牧云助手装置三种形式,本文不再赘述,详情能够查看:
https://waf-ce.chaitin.cn/docs/guide/install

3. 登录雷池

雷池采纳了 OTP 伎俩进行登录鉴权,简略来说就是通过腾讯身份验证器等软件,向登录页面输出手机软件上生成的动静明码(约 15s 会更新一次明码)即可。

3.1 软件扫码绑定

扫码后即绑定,能够在首页看到动静明码

3. 2 输出口令明码

3.3 进入雷池治理界面

4. 配置站点和限频性能

4.1 雷池站点配置

雷池的站点配置性能比拟齐全,包含主动上传 TLS 证书、私钥,指定多个转发端口等,不须要开发者本人配置 nginx 转发

4.2 配置限频性能

具体的封禁策略能够进行自定义,举荐为 10 s,100 次,封禁 10 分钟

PS:如果是本人测试,或者发现误报的,能够手动解除封禁

5. 测试及其他

5.1 测试

后盾筹备了一个简略的服务器,提供一个 hello 的接口,带有一个 a 的参数
简略编写测试的爬虫代码:

def send_request(url,request_method="GET",header=None,data=None):  
    try:  
        if header is None:  
            header=Config.get_global_config().header  
        response = requests.request(request_method, url, headers=header)  
        return response  
    except Exception as err:  
        print(err)  
        pass  
    return None

if __name__ == '__main__':  
    # config=Config.get_global_config()  
    # print(config.header)    # send_request(header="asad")  
    for i in range(0,100):  
        str = random.choice('abcdefghijklmnopqrstuvwxyz')  
        resp = send_request("http://a.com/hello?a="+str)  
        print(resp.content)

打印值

b'{"a":"u"}'
b'{"a":"m"}'
b'{"a":"y"}'
b'{"a":"o"}'
b'<!DOCTYPE html>\n\n<html lang="zh">\n  <head>\n .... #后续是一串很长的 HTML 文本

此时从新拜访页面能够发现曾经被拦挡了

5.1 有些爬虫比拟刁滑,伪造 X -Forwarded-For 申请头怎么办

雷池能够间接在‘通用配置’->‘源 IP 获取形式’-> 选中‘从网络连接中获取’
示意从 TCP 连贯中获取 Source IP

如果你要问‘如果爬虫非常刁滑,伪造了 TCP 的 Source IP 字段怎么办?’
好吧,因为伪造了 TCP 头信息,因为 HTTP 基于 TCP 的握手会间接失败,爬虫自身曾经失去了爬取信息的能力,拜访申请也会在通过 nginx 时被抛弃。

退出移动版