amazonaws.comからの大量スパムをブロックする方法【知っておいたほうがいいサーバー対策・続編】

前回の続編です。追記として書いた部分が長くなったので、別記事にしました。

2月20日&22日追記しました。
※現在も追跡調査中なので、記事に補足や訂正をする場合があります。
※2018年11月10日に検証を補足しました。

前回記事
amazonaws.comからの大量アクセスが、スパムだったのでブロックした話

 

前回も書きましたが、amazonaws.comはAmazonが行っている(主に企業向けの)レンタルサーバー等のサービスです。なので、通販会社のAmazonさんがアクセスしているわけではありません。

問題は、amazonaws.comの利用者の中に、IPアドレスを偽装するために利用したり、大量のスパムアクセスに使う人がいることです。

たとえば、Twitterに投稿されたページを大量に検索し、色んなサイトから少しずつコピーして、コピーサイトを作るのに使われていると言われています。このことは以前から指摘されてきました(詳細は前回)。

 

実は心当たりがありまして、どうやら海外で、当サイトの一部のように見せかけて勝手にページを作っては、検索にかかる頃には消していた?節があります。

というのも、Google Search Consoleのエラー画面に出てきたのが、作成した覚えのない記事名ばかり。どれもブランドの靴や洋服名なんですよね。

search console

↓スマホでも読めるよう、文字起こししてみました。

 1
lauren-ralph-lauren-esterman-boots-shoes-black-womens
404
最終検出18/01/31
 2
ralph-lauren-womens-pink-buttondown-sweater-in-small/
404
18/02/02
 3
roxy-shore-break-bandeau-top-black-bone
404
18/01/29
 4
prada-sports-leather-sneakers-shoes-for-women-prw42
404
18/02/02

 

いずれにせよ、サーバーに不当な負荷がかかるため、個人サイトにとっては迷惑でしかありません。実際にブロックする方法を色々試してみたので、今回はその方法を一挙掲載します。

※国内サイトでは網羅的な情報があまりなかったのと、サーバーによって記載方法が異なることが確認できたため、情報を補足し、一部書き直しました(2018年2月6日)。2月20日・22日さらに追記しました。2018年11月10日に検証を補足しました。

 

1.海外サイトの情報+補足

(1)記載例1:RewriteEngineで記述(mod_rewriteが有効なサーバーの場合・例えばmixhost)

海外サイトの情報(これでamazonaws.comからのアクセスが止まった!との報告あり・ただし2009年2月の情報)をもとに、2018年現在の.htaccess(強力なやつ)を書いてみました。該当者は403エラー(アクセス禁止)になります。

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http(s)?://.*amazonaws\.com [NC,OR]
RewriteCond %{REMOTE_HOST} ^.*\.compute-1\.amazonaws\.com$ [NC,OR]
RewriteCond %{REMOTE_HOST} ^.*\.compute\.amazonaws\.com$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^AppEngine-Google [NC]
RewriteCond %{HTTP_USER_AGENT} ^Wget[NC]
RewriteRule ^(.*)$ - [F,L]

※amazonaws.comのURLがhttps、httpどちらでも対応するよう書き直しました。compute-1.amazonaws.comcompute.amazonaws.comからのアクセスをはじくよう、書き直しました。

※この他にブロックしたいものがあれば適時追加して下さい。(記載例:同様に悪用されているGoogleAppEngineとWgetをブロック)

RewriteCondで始まる行の最終行は、[NC]で締めくくるのがポイントです。

▼具体的な手順は下記の記事が大変参考になります。
しつこくアクセスしてくるBotからのアクセスを拒否する方法(MJ12Bot編)|Wordpress初心者な技術屋の忘備録

 

今回参考にさせていただいた海外サイトの記述はこちらです(2009年2月記事)。

▼Block amazonaws.com with .htaccess?
https://www.webmasterworld.com/webmaster/3848988.htm

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^http://.*amazonaws\.com [OR]
RewriteCond %{REMOTE_HOST} ^.*\.compute-1\.amazonaws\.com$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "AISearchBot" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "woriobot" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "heritrix" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "NetSeer" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "Nutch" [NC]
RewriteRule ^(.*)$ - [F]

補足:GoogleAppEnginのブロックについて海外サイトの情報

How to block Google App Engine?およびUser agent DB

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} ^AppEngine-Google [NC]
RewriteRule ^(.*)$ - [F,L]

 

(2)記載例2:さくらインターネット、スターサーバーの場合・・・補足情報

SetEnvIf Referer "http(s)?://.*amazonaws\.com" deny_ua
order allow,deny
allow from all
deny from env=deny_ua

前回ご紹介した記述(order deny,allow
deny from .amazonaws.com)で効かない場合は、この方法か、次項に記載するIPブロックが確実でした。

下記のように複数記述することもできます。(参考:htaccessでSetEnvIf:ディレクトリを跨いでも有効。正規表現や複数のor条件をまとめる

SetEnvIf Referer "http(s)?://.*amazonaws\.com" deny_ua
SetEnvIf User-Agent "^(AhrefsBot|AppEngine-Google|FeedWordPress|MJ12bot|YodaoBot|Wget)" deny_ua
order allow,deny
allow from all
deny from env=deny_ua

ただし、複数記述の場合は、数が多くなるとサーバーに負担がかかり500エラー(内部エラー)が発生しますので、ご注意を!

実験:月額1000円未満のサーバーで、3サイトそれぞれに、SetEnvIfを30ほど複数記述でまとめてみたところ、どのサイトも500エラーになりました。

サーバーのスペックにもよりますが、最初は5,6個程を、まとめ記述ではなく、原則通り一つずつ書いて様子見するのが確実です。

追記:ドメイン名によるブロックは、サーバーの処理に時間を要するため、どうしてもサイトの表示速度が落ちます。プラグインなど他の方法で確実に総合的にブロックできるよう、現在検証実験中です。(追記ここまで)

 

2.IPブロック!

サーバーによっては、ドメインでのブロックができない場合があります。そのときはこちらを試してみてください。アクセス解析を見ると・・・

例:ec2-52-203-149-159.compute-1.amazonaws.com

この52-203-149-159が、実はIPアドレスなのです。(52.203.149.159)
参考:https://qiita.com/yKanazawa/items/db6627a999bbfdd8d10b

追記:サーバーでamazonaws.comをはじくと、amazonaws.comとしてではなくIPアドレスでアクセスしてくる場合が後日確認できました。確実にブロックしたい方は、アクセス解析でamazonaws.comのIPアドレスを控えておいて、IPブロックすることをお勧めします。

↑さらに追記:IPアドレスが分散している(数が多い)場合の対処法は、現在試行中です。後日検証記事を書く予定です。(追記ここまで)⇒後日検証して緑の文字で追記しています。

 

私の場合、アクセス解析でよくよく見ると、「52.203.」で始まるものがちらほら。しかも「52.201.」、「52.202.」と連番になっていました。

52.203.***.***をすべてブロックするには、下記のように.htaccessに記述します。

order deny,allow
deny from 52.203. IPアドレスの前方一致

数字の後に「.」(ドット)を入れるのがポイントです。これで52.203.***.***をすべてブロックできます。(後日追記)

後はこんな感じで、残りを書きます。

order deny,allow
deny from 52.201.
deny from 52.202.
deny from 52.203.
deny from 52.205.
deny from 52.207.
deny from 54.82.
deny from 54.83.
deny from 54.84.

海外から、こんなのがたくさん送られてきたら、たまったもんじゃないですね。サーバーの裏側ではこういうこともあるということで、何かのときの参考にしていただければ幸いです。

検証して後日追記:IPアドレスを前方一致でブロックする方法は、どのサーバーでも確実で、なおかつサーバーに過大な負担がありませんでした。月額約500円のレンタルサーバーで1つのサイトに100個程度記載してみましたが、特に反応が遅くなることもなく稼働しています。

 

3.付録:役に立つサイト

IPアドレス⇔ホスト名の検索
https://www.iphiroba.jp/(IPひろば)
たとえば、52-203-149-159と入力すると、ec2-52-203-149-159.compute-1.amazonaws.com と教えてくれます。逆引きも可能です。

ボットやクローラーが悪質なものかどうかを判定してくれるサイト
http://code.w3l.se/useragents/block.php(User agent DB)
「Blocklist」も列挙した海外のデータベースサイトです。サーバーにアクセスしてくるボットやクローラーが何なのか、検索しても日本語の情報が出てこないとき、放置しておいてもいいのか判断がつかないときに、参考になります。

https://www.distilnetworks.com/bot-directory/category/crawler/
こちらも海外サイトです。「Search the Bot Database」の箇所に入力すると、Good Bot(緑色)かBad Bot(赤色)か表示してくれます。

 

4.追記:役に立つプラグイン(WordPress) 

amazonaws.comからの大量スパムに限らず、コピー行為や情報収集を継続的におこなっていると思われるクローラーやボットを、できる限り阻止したいと思っている方は少なくないはずです。

StopBadBotsというプラグインを使うと、  .htaccessをいじることなくIPアドレスのブロックができます。ただし「52.203.」といった前方一致の指定には対応していません。

StopBadBotsは、Google、Yahoo、Bing(Microsoft)の検索クローラーをブロックすることなく、リスト化された膨大な数の「怪しいボット」をブロックしてくれます。自分で追加することも可能です。

有料版だとリストは毎週更新されるようですが、無料版でも適時更新されており、それなりに効果があって導入も簡単ですので、おすすめします。

WordPressのプラグインでbot対策&著作権侵害対策(1)StopBadBots

 

こんな記事も書いています。

▼GoogleAppEngine・FeedWordPressを悪用したコピーサイトの作成防止…mixhost、スターサーバーで検証済み

初めてのワードプレス(15)画像の直リンク禁止と自動コピーサイト作成阻止法(.htaccessで出来る盗用対策)

▼前回記事

amazonaws.comからの大量アクセスが、スパムだったのでブロックした話【知っておいたほうがいいサーバー対策】