首先我對別人抓取我網站的內容完全沒有意見,我也不是一定要嚴格限制別人抓取,但是某些人的抓取完全沒有底線,用一個腳本甚至多個腳本並發的去抓取某個伺服器的內容,跟ddos沒有差別。
我的伺服器目前就遇到了這樣的情況,惡意的毫無停頓的抓取,嚴重影響了我們的日誌分析,而且也額外增加了伺服器的負載。
請問如何對這種行為做出防範?我用的是nginx伺服器,據我所知它只能deny
某個ip,但是deny以後還是會出現在日誌中,只不過是403了。而且手動的deny太被動了,能否智能判斷某個ip訪問量猛增,然後把它ban掉?
1. ngx_http_limit_conn_module 可以用来限制单个IP的连接数
http://nginx.org/en/docs/http/ngx_htt...
2. ngx_http_limit_req_module 可以用来限制单个IP每秒请求数
http://nginx.org/en/docs/http/ngx_htt...
3. nginx_limit_speed_module 可以用来对IP限速
https://github.com/yaoweibin/nginx_li...
我也来提供一种解决思路,主要是利用fail2ban(http://www.fail2ban.org/)来解决。fail2ban是通过扫描log来异步判断是否用iptable封禁的,所以对原系统影响比较小,而且不需要重新配置nginx。不过不知道访问量太大是否撑得住。
首先在
/etc/fail2ban/jail.conf
里加入然后找到
/etc/fail2ban/filter.d/nginx-bansniffer.conf
,把里面针对404的判断改成最后重启
fail2ban
服务即可,在上面的配置中,我们对每120秒有超过120次访问的ip,封禁1小时。1. 根据User-Agent阻止spider抓取
2. 在操作系统Firewall建立规则,限制同一个IP的同时连接数
以Linux下的iptables为例,如下配置将限制同一个IP一分钟内最多建立15个连接,超出的连接会被iptables丢弃,不会到达nginx
3. 自己写个bash脚本统计各IP访问频率,自动将频率超过你设定的上限的IP扔到黑名单里
黑名单里的IP,用脚本自动写入iptables或者nginx.conf,封禁它几分钟,或者降低他的许可访问频率
我以前在yahoo的时候用一个叫YDoD(Yahoo! Department of Defense)的apache模块,可以自定义规则防止外部滥用我们的WEB服务,到了淘宝后改了个名字叫tdod,找了一圈,没找到开源的。不过原理跟我上面说得也差不多。
试试ngx_lua_waf
https://github.com/loveshell/ngx_lua_waf
功能: