web-dev-qa-db-ja.com

サーバー上のすべてのサイトからユーザーエージェントをブロックするにはどうすればよいですか?

私はもともとこれを webmasters.stackexchange.com に投稿しましたが、ここでより良いレセプションが得られると言われました。


ここ数日間、私は(おそらく不注意による)DDOS攻撃のように見えるものに苦しんでいます。 「Mozilla/4.0(compatible; ICS)」と識別されるエージェントから、Apacheが利用可能なすべてのメモリを介して大量のリクエストを受け取るようになっています。

結果として、このユーザーエージェントを伴うすべてのリクエストをブロックしたいので、httpd.confでこれを試みました。

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

しかし、Apacheを再起動すると、ここでdenyの使用について文句を言います。 locationまたはdirectoryブロックにラップする必要がない場合、つまり、サイトごとに新しいブロックを追加する必要があります。サーバー全体へのアクセスを拒否する方法はありますか?


更新:私が得るエラー

  • WebサーバーApache2の再起動
    /etc/Apache2/httpd.confの4行目の構文エラー:ここでは拒否できません[失敗]
9
Tom Wright

今は古い質問のように見えますが、同じことをしたくて、上の神経からの答えを見つけました。現状では正しくありません-<Location "/">、およびSetEnvIfには正規表現が必要なので、括弧を引用符で囲む必要があります。

これは私にとってすべての仮想ホストにアクセス制御を適用するのに役立ちました:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

仮想ホスト定義の前にそれを含めてください。

7
user3061288

mod_rewriteはドキュメントに従ってサーバーレベルで設定できます:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

RewriteCondの正規表現をエスケープすることを忘れないでください

4
fukawi2

SetEnv行の構文が正しければ、次のようにconfでそれをスローできるはずです。

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

それがすべての仮想ホストで動作することを許可する必要があります-2.2.24でテストされたばかりで、魅力のように機能しました。

1
nerve