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 时被抛弃。