Apache

不要なロボット巡回と不正アクセスへの対策

ボチボチと当サイトのアクセス数が増えてきましたが、招かざる客も混じってる事に気がつきました。

そのお客は無駄にサーバーの負荷を上げていたので、対策を行いました。

備忘録として方法を残しておきます。

サーバーの負荷が急上昇

サーバー負荷上限の目安を超える値を
何度か記録してしまいアワアワ^^;

生ログを見てると何これ?ってアクセスが沢山ありました。

とりあえずこれは要らない、と思う巡回ロボットからのアクセスをピックアップ。

それと脆弱性が発見されたプラグイン『Yuzo-Related Posts』を狙ったアクセスや(当サイトでは不使用です
ログインを試みるアクセス(当サイトでは通常のログインURLを変更しています
スパムコメントを残そうとしている感じのアクセス(日本語の無いコメントは弾いてます
などのIPをピックアップしてみました。

IP検索すると国別ではロシアが多かったです。
あとはフランス、ウクライナ、中国。

とりあえずアクセスできないように、.htaccessファイルを編集してみます。

.htaccessファイルの編集

ファイルの先頭に下記のコードを書いてみました。


SetEnvIf User-Agent "AhrefsBot" bye_bot
SetEnvIf User-Agent "bidswitchbot" bye_bot
SetEnvIf User-Agent "BLEXBot" bye_bot
SetEnvIf User-Agent "GrapeshotCrawler" bye_bot
SetEnvIf User-Agent "integralads" bye_bot
SetEnvIf User-Agent "jet-bot" bye_bot
SetEnvIf User-Agent "Linguee" bye_bot
SetEnvIf User-Agent "ltx71" bye_bot
SetEnvIf User-Agent "Mappy" bye_bot
SetEnvIf User-Agent "MegaIndex" bye_bot
SetEnvIf User-Agent "MJ12bot" bye_bot
SetEnvIf User-Agent "proximic" bye_bot
SetEnvIf User-Agent "SemrushBot" bye_bot
SetEnvIf User-Agent "SeznamBot" bye_bot
SetEnvIf User-Agent "SMTBot" bye_bot
SetEnvIf User-Agent "trendictionbot" bye_bot
SetEnvIf User-Agent "Yandex" bye_bot
SetEnvIf User-Agent "YandexMobileBot" bye_bot
#SetEnvIf User-Agent "Cloudflare-AMPHTML" bye_bot

<RequireAll>
    Require all granted

#弾きたいIPに応じて増やす
    Require not ip  xxx.xxx.xxx.xxx

#bye bye BOT
    Require not env bye_bot

</RequireAll>

あまり馴染みの無い(私だけ?
ロボットは弾く対象にしました。

Yandexはロシアの大手検索エンジンの様です。
今回ロシアからの不要なアクセスが多かったので、巡回ロボットを弾く対象にしてみました。

巡回ロボットではありませんが、Cloudflare-AMPHTMLから、何故か同じURLに5秒毎くらいでアクセスがあるので、これも弾く対象にしました。
AMPページのキャッシュを残す巡回だったら、違うURLにアクセスするはずですよねぇ・・・
これ何でしょうねぇ^^;
(確実では無いので上記ではコメントアウトしてます。

対策後は

相変わらずアクセスはありますが、アクセスしても403扱いなので、CPUの負荷率は半分以下に低下しました。

怪しいIPは弾く対象に日々追加してますが、これはイタチごっこですねぇ。

最近は生ログチェックが日課となってしまいました。
おかげで時間とられてます^^;

何とかならんかねぇ・・・

追記

Cloudflare-AMPHTMLからの連続アクセスは、やっと納まりました。
同じURLにまだ1日に何度かやってきますけどね。
弾く対象から一旦外しても良いのかな。

それとマメに不正アクセスのIP追加していますが、リクエスト数が激減しCPUの負荷率も低い値で安定しています。

生ログ見てるとアクセス方法がある程度同じで、不正アクセスのテンプレでも出回ってるのかなって印象です。

追記2

怪しいIPですが、ほとんどの場合は同一IPで再度アクセスする事は無い感じです。
変わっている場合が多いです。
そのためIPを個別に設定しても徒労に終わる可能性大です^^;

アマゾン ウェブ サービスからのアクセスが異常に多いのと、
(AWSからのアクセスはIPがコロコロ変わるので絞りきれません)
不可解な行動が多いアクセス源のIPは共通のホストだったりしたので、ホスト指定で弾く指定をしてみました。


    Require not host amazonaws.com
    Require not host clients.your-server.de
    Require not host kyivstar.net

前記のIPで弾くコードの前後に入れればOKです。
さてどうなるかな。

追記3

IFTTTを利用して、ブログの更新時にツイッターなどへ勝手に更新情報を飛ばすようにしています。

が、IFTTTはAmazon AWSを使ってアクセスしてました。
なので上記コードでAWS拒否していると、IFTTTの自動更新が出来ない^^;

ユーザーエージェントにcurlが含まれるアクセスが、IFTTTからのアクセスっぽいのですが、これだけ許可するってのが、どうも上手くいかない・・・

あとFeedlyもAWSからのアクセスをしているため、弾いてますが、それ以外にも固定IPからのアクセスもあるので、こっちは大丈夫?

追記4

AWSからのアクセスは解放しました。
数日チェックしてますが、今のところ負荷率が上がること無く順調。

Broken Link Checkerと言うリンク切れをチェックしてくれるプラグインを停止させると、さらに負荷率は下がりました。

追記5

Qwantと言うクローラーが目立ってきたので、こちらも一旦拒否扱いにしました。

ユーザーエージェントはこんな感じです。

Mozilla/5.0 (compatible; Qwantify/Bleriot/1.1; +https://help.qwant.com/bot)

相変わらず負荷率は低い値で安定しています。

追記6

ロボットを追記しました。
今はこんな感じです。


SetEnvIf User-Agent "AhrefsBot" bye_bot
SetEnvIf User-Agent "Baiduspider" bye_bot
SetEnvIf User-Agent "Barkrowler" bye_bot
SetEnvIf User-Agent "bidswitchbot" bye_bot
SetEnvIf User-Agent "BLEXBot" bye_bot
SetEnvIf User-Agent "GrapeshotCrawler" bye_bot
SetEnvIf User-Agent "IAS crawler" bye_bot
SetEnvIf User-Agent "integralads" bye_bot
SetEnvIf User-Agent "jet-bot" bye_bot
SetEnvIf User-Agent "Linguee" bye_bot
SetEnvIf User-Agent "ltx71" bye_bot
SetEnvIf User-Agent "Mappy" bye_bot
SetEnvIf User-Agent "MegaIndex" bye_bot
SetEnvIf User-Agent "MJ12bot" bye_bot
SetEnvIf User-Agent "OutclicksBot" bye_bot
SetEnvIf User-Agent "proximic" bye_bot
SetEnvIf User-Agent "Qwantify/Bleriot" bye_bot
SetEnvIf User-Agent "SemanticScholarBot" bye_bot
SetEnvIf User-Agent "SemrushBot" bye_bot
SetEnvIf User-Agent "SeznamBot" bye_bot
SetEnvIf User-Agent "SurdotlyBot" bye_bot
SetEnvIf User-Agent "SMTBot" bye_bot
SetEnvIf User-Agent "trendictionbot" bye_bot
SetEnvIf User-Agent "Yandex" bye_bot
SetEnvIf User-Agent "YandexMobileBot" bye_bot

追記7

さらにロボットを追記しました。


SetEnvIf User-Agent "AdAuth" bye_bot
SetEnvIf User-Agent "AdsrvrBot" bye_bot
#SetEnvIf User-Agent "adstxt.com" bye_bot
SetEnvIf User-Agent "AhrefsBot" bye_bot
SetEnvIf User-Agent "archive.org_bot" bye_bot
SetEnvIf User-Agent "Baiduspider" bye_bot
SetEnvIf User-Agent "Barkrowler" bye_bot
SetEnvIf User-Agent "bidswitchbot" bye_bot
SetEnvIf User-Agent "BLEXBot" bye_bot
SetEnvIf User-Agent "CCBot" bye_bot
SetEnvIf User-Agent "Cincraw" bye_bot
SetEnvIf User-Agent "Cliqzbot" bye_bot
SetEnvIf User-Agent "coccocbot" bye_bot
SetEnvIf User-Agent "contxbot" bye_bot
SetEnvIf User-Agent "cortex" bye_bot
SetEnvIf User-Agent "Dataprovider.com" bye_bot
SetEnvIf User-Agent "DataXu" bye_bot
SetEnvIf User-Agent "DotBot" bye_bot
#SetEnvIf User-Agent "DuckDuckBot" bye_bot
SetEnvIf User-Agent "GarlikCrawler" bye_bot
SetEnvIf User-Agent "GigablastOpenSource" bye_bot
SetEnvIf User-Agent "Gluten Free Crawler" bye_bot
SetEnvIf User-Agent "GrapeshotCrawler" bye_bot
SetEnvIf User-Agent "heritrix" bye_bot
SetEnvIf User-Agent "HTTrack" bye_bot
SetEnvIf User-Agent "HubSpot" bye_bot
SetEnvIf User-Agent "IAS crawler" bye_bot
SetEnvIf User-Agent "integralads" bye_bot
SetEnvIf User-Agent "jet-bot" bye_bot
SetEnvIf User-Agent "keybot" bye_bot
SetEnvIf User-Agent "KOCMOHABT" bye_bot
SetEnvIf User-Agent "KomodiaBot" bye_bot
SetEnvIf User-Agent "libcurl" bye_bot
SetEnvIf User-Agent "LightspeedSystemsCrawler" bye_bot
SetEnvIf User-Agent "Linespider" bye_bot
SetEnvIf User-Agent "Linguee" bye_bot
SetEnvIf User-Agent "LinkpadBot" bye_bot
SetEnvIf User-Agent "ltx71" bye_bot
SetEnvIf User-Agent "Mail.RU_Bot" bye_bot
SetEnvIf User-Agent "MADBbot" bye_bot
SetEnvIf User-Agent "Mappy" bye_bot
SetEnvIf User-Agent "MB-LinkChecker" bye_bot
SetEnvIf User-Agent "MegaIndex" bye_bot
SetEnvIf User-Agent "MJ12bot" bye_bot
SetEnvIf User-Agent "MojeekBot" bye_bot
SetEnvIf User-Agent "NetcraftSurveyAgent" bye_bot
SetEnvIf User-Agent "netEstate" bye_bot
SetEnvIf User-Agent "Nimbostratus-Bot" bye_bot
SetEnvIf User-Agent " oBot/2" bye_bot
SetEnvIf User-Agent "OutclicksBot" bye_bot
SetEnvIf User-Agent "Pattern" bye_bot
SetEnvIf User-Agent "Presto" bye_bot
SetEnvIf User-Agent "proximic" bye_bot
SetEnvIf User-Agent "PurpleToolzBot" bye_bot
SetEnvIf User-Agent "Qwantify/Bleriot" bye_bot
SetEnvIf User-Agent "Researchscan/t13rl" bye_bot
SetEnvIf User-Agent "Riddler" bye_bot
SetEnvIf User-Agent "rootshell.org" bye_bot
SetEnvIf User-Agent "RyteBot" bye_bot
SetEnvIf User-Agent "Scrapy" bye_bot
SetEnvIf User-Agent "SearchAtlas.com" bye_bot
SetEnvIf User-Agent "seewithkids.com/bot" bye_bot
SetEnvIf User-Agent "SemanticScholarBot" bye_bot
SetEnvIf User-Agent "SemrushBot" bye_bot
SetEnvIf User-Agent "SEOkicks" bye_bot
SetEnvIf User-Agent "SeznamBot" bye_bot
SetEnvIf User-Agent "Streamline3Bot" bye_bot
SetEnvIf User-Agent "SurdotlyBot" bye_bot
SetEnvIf User-Agent "SMTBot" bye_bot
SetEnvIf User-Agent "TinEye-bot" bye_bot
SetEnvIf User-Agent "TprAdsTxtCrawler" bye_bot
SetEnvIf User-Agent "tracemyfile" bye_bot
SetEnvIf User-Agent "trendictionbot" bye_bot
SetEnvIf User-Agent "TurnitinBot" bye_bot
SetEnvIf User-Agent "vuhuvBot" bye_bot
SetEnvIf User-Agent "WebDataStats" bye_bot
SetEnvIf User-Agent "YaK" bye_bot
SetEnvIf User-Agent "Yandex" bye_bot
SetEnvIf User-Agent "YandexImages" bye_bot
SetEnvIf User-Agent "YandexMobileBot" bye_bot
SetEnvIf User-Agent "Yeti" bye_bot
SetEnvIf User-Agent "YisouSpider" bye_bot

DuckDuckGoのbotは動きは悪くないのと、ポリシーも良い感じなのでコメントアウトして許可しています。

adstxt.comからのアクセスを弾いていると、Google AdSenseからads.txtが公開されていない旨のメッセージが到着。
確証は無いのですが、連動している可能性も考慮して現在は許可しています。