反爬虫類と悪意のある攻撃に関するいくつかの策略と構想
この間comは常に悪意のあるspider攻撃を受け、ウェブサイトの内容を狂ったようにつかみ、一連のロボットspamが広告を出し、ウェブサイトの性能に大きな影響を及ぼしている.
次に、悪意のあるspiderとspamに対する戦略と考え方を話します.
1. ログ分析による悪意のある爬虫類/攻撃の識別
まずaccess logを分析し、クラスタは訪問質問量の上位50 IPを統計する.
ホワイトリストIPと正常spider(baidu,google...)を排除
分析はipリクエスト時間、周波数、パスなどがあり、これがspiderかどうかを簡単に見つけることができます.以下は明らかにspiderです.
spiderを発見した以上、当然iptablesを使ってこのIPを封殺しなければならないが、1つのIPだけでは足りないことが多い.一般的に爬虫類はホストルーム(複数台のサーバが交代)や自宅ADSL(IPを再ダイヤル)で動作するため、Cセグメント全体を閉じると直接効果的になります.もちろん、極小数の正常なユーザーアクセスに影響を与える可能性がありますので、しばらくしてからこのcセグメントを再閉鎖することをお勧めします.
以上、shell/pythonスクリプトと書いて、毎日1回実行できます.
2. リアルタイム反爬虫類
ログ分析によって悪意のある爬虫類/攻撃を識別し、これらのspiderを即時に遮断することはできず、ウェブサイトへの影響はまだある.また、分散型のspider(数百のエージェントサーバが一緒に登ってくる)を採用する人がいると、サイトにアクセスできない可能性が高く、分析ログも問題をタイムリーに解決できない可能性があります.リアルタイムの反爬虫戦略を採用し、悪意のある爬虫類のアクセスをリアルタイムで識別し、封鎖する必要があります.
実現構想:redisで各IPのアクセス頻度を記録し、単位時間以内に、アクセス頻度が1つのバルブ値を超えると、このIPが疑わしいと判断し、検証コードページに戻り、ユーザーに検証コードを記入するように要求することができる.爬虫類であれば当然検証コードを記入することは不可能であり,そのIPアドレスが短時間で継続した要求であれば爬虫類と判断してブラックリストに入れる.
もちろん、このIPが疑わしいかどうかを判断するには、アクセス頻度だけでは不十分であり、以下のポリシーを追加する必要があります.
referを解析します.一般的に爬虫類のreferは空または固定値です.
アクセス間隔を分析します.一般的に爬虫類がページを登る頻度は比較的固定されており、人がページにアクセスするのではなく、間隔が不規則である.
ホワイトリストIPアドレスセグメントを除外します.
具体的なredis操作:
//scoreはtimestamp、valueは{refer}{request_url}{sessionId}redis>ZADD log:ip:12.94.32.135613075104000000"{referr}{request_url}{sessionId}(integer)1//1時間以内にlogを残すのが合理的です.redis> ZREMRANGEBYSCORE log:ip:112.94.32.135 -inf {timestamp} (integer) 1 redis> ZRANGE log:ip:112.94.32.135 0 -1
より多くのRedisの応用シーンは、Redisの電子商取引における実際の応用シーンを見てください.
後記
ある同級生は、User-Agentに基づいてspiderを遮断することもできると言っていますが、これは意味がないと思います.今の悪意のあるspiderはすでにUser-Agentを普通のブラウザや正規の爬虫類のUser-Agentに偽装しています.私もここでは言いません.
以上の2つの戦略を組み合わせると、悪意のあるspiderの攻撃に大きく打撃を与え、ウェブサイトの正常な運行を保証できると思います.
次に、悪意のあるspiderとspamに対する戦略と考え方を話します.
1. ログ分析による悪意のある爬虫類/攻撃の識別
less guang.com_access.log | awk -F- '{print $1}' | sort | uniq -c | sort -rn | head -n 50
まずaccess logを分析し、クラスタは訪問質問量の上位50 IPを統計する.
ホワイトリストIPと正常spider(baidu,google...)を排除
host 112.94.32.135 // ip baidu、google 。
分析はipリクエスト時間、周波数、パスなどがあり、これがspiderかどうかを簡単に見つけることができます.以下は明らかにspiderです.
less access.log | grep '112.94.32.135' | less
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1888476 HTTP/1.1" 200 107876 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1922742 HTTP/1.1" 200 110053 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437104 HTTP/1.1" 200 10751 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1733527 HTTP/1.1" 200 98099 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437105 HTTP/1.1" 200 10891 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /baobei/1646377 HTTP/1.1" 200 95527 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:50 +0800] "GET /u/1437106 HTTP/1.1" 200 10681 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1922741 HTTP/1.1" 200 98356 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1733526 HTTP/1.1" 200 97690 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /u/1437107 HTTP/1.1" 200 10765 "-" "Mozilla/4.0"
112.94.32.135 - - [1/Oct/2012:00:00:51 +0800] "GET /baobei/1888475 HTTP/1.1" 200 96415 "-" "Mozilla/4.0"
spiderを発見した以上、当然iptablesを使ってこのIPを封殺しなければならないが、1つのIPだけでは足りないことが多い.一般的に爬虫類はホストルーム(複数台のサーバが交代)や自宅ADSL(IPを再ダイヤル)で動作するため、Cセグメント全体を閉じると直接効果的になります.もちろん、極小数の正常なユーザーアクセスに影響を与える可能性がありますので、しばらくしてからこのcセグメントを再閉鎖することをお勧めします.
iptables -A INPUT -i eth0 -j DROP -p tcp --dport 80 -s 112.94.32.0/24
以上、shell/pythonスクリプトと書いて、毎日1回実行できます.
2. リアルタイム反爬虫類
ログ分析によって悪意のある爬虫類/攻撃を識別し、これらのspiderを即時に遮断することはできず、ウェブサイトへの影響はまだある.また、分散型のspider(数百のエージェントサーバが一緒に登ってくる)を採用する人がいると、サイトにアクセスできない可能性が高く、分析ログも問題をタイムリーに解決できない可能性があります.リアルタイムの反爬虫戦略を採用し、悪意のある爬虫類のアクセスをリアルタイムで識別し、封鎖する必要があります.
実現構想:redisで各IPのアクセス頻度を記録し、単位時間以内に、アクセス頻度が1つのバルブ値を超えると、このIPが疑わしいと判断し、検証コードページに戻り、ユーザーに検証コードを記入するように要求することができる.爬虫類であれば当然検証コードを記入することは不可能であり,そのIPアドレスが短時間で継続した要求であれば爬虫類と判断してブラックリストに入れる.
もちろん、このIPが疑わしいかどうかを判断するには、アクセス頻度だけでは不十分であり、以下のポリシーを追加する必要があります.
referを解析します.一般的に爬虫類のreferは空または固定値です.
アクセス間隔を分析します.一般的に爬虫類がページを登る頻度は比較的固定されており、人がページにアクセスするのではなく、間隔が不規則である.
ホワイトリストIPアドレスセグメントを除外します.
具体的なredis操作:
//scoreはtimestamp、valueは{refer}{request_url}{sessionId}redis>ZADD log:ip:12.94.32.135613075104000000"{referr}{request_url}{sessionId}(integer)1//1時間以内にlogを残すのが合理的です.redis> ZREMRANGEBYSCORE log:ip:112.94.32.135 -inf {timestamp} (integer) 1 redis> ZRANGE log:ip:112.94.32.135 0 -1
より多くのRedisの応用シーンは、Redisの電子商取引における実際の応用シーンを見てください.
後記
ある同級生は、User-Agentに基づいてspiderを遮断することもできると言っていますが、これは意味がないと思います.今の悪意のあるspiderはすでにUser-Agentを普通のブラウザや正規の爬虫類のUser-Agentに偽装しています.私もここでは言いません.
以上の2つの戦略を組み合わせると、悪意のあるspiderの攻撃に大きく打撃を与え、ウェブサイトの正常な運行を保証できると思います.