Hi, 万能的 ruby 朋友们,最近 我的网站 被攻击了。攻击的方式:
目前我能想到的是 通过 图片验证码,来提高 这个 api 的安全性。
请问如何能获取到 这个 爬虫的 真实 ip。
这种情况下,建议你跟你的主机供应商联系,启用主机供应商提供的高防或者流量清洗服务。 RubyChina 放在 UCloud 上,每次遇到攻击,都直接使用 UCloud 的高防服务,2015 年被攻击了 6~7 次,每次持续攻击一两天,每次都是 UCloud 帮忙扛下来的。
自己之前写过的一个粗糙的,可以借鉴一下
# Controller 里,
before_action :forbid_abuse_request
...
def forbid_abuse_request
ip = request.remote_ip
project_md5 = calculate_md5
key = "#{ip} #{project_md5}"
exists = $request_redis.exists key
if exists && $request_redis.get(key).to_i > 100
Rails.logger.warn "ABUSE_IP #{key}"
return render json: { status: 'ok' }
end
$request_redis.incr key
$request_redis.expire key, 60 unless exists
end
你和我元宵节遇到的情况一模一样。
状况:
1、每秒 8-20 次攻击某 api 地址,但不影响网站整体使用。 2、因为该地址不支持 get 请求,在封了一端时间 post 请求后,写了一个脚本,分析某一段时间的 ip,全部封掉 3、攻击 ip 逐渐增多,2k+,把域名放到了百度云加速。防了 2 天,攻击 ip 基本都被挡住了。
经验:
1、增加可以防 ddos 的网络应用,这次用的是百度云加速(原安全宝),经过一段时间的采样,可以有效阻止这次的 cc 攻击。 2、阿里云盾,可以防住 ddos,cc 攻击,但是要花钱,3 地机房,9 IP,900 元起。 3、应用上,自己写代码采集攻击 ip,使用 iptables 批量封掉。 4、加上 RuCaptcha,的确很方便,cache_limit 这个选项,在破解验证码的情况下还是要设置为 0。
以上方案都是免费的。