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


9

私はもともとこれを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ここでの使用について不満があります。locationor directoryブロックでラップする必要がない場合、つまり、サイトごとに新しいブロックを追加する必要がありますが、サーバー全体へのアクセスを拒否する方法はありますか?


更新:私が得るエラー


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

回答:


7

今は古い質問のように見えますが、同じことをしたくて、上の神経からの答えを見つけました。それはまったく正しくありません-あるべきだと私には思われます<Location "/">、そしてSetEnvIf括弧は引用符で囲まれる必要があるので正規表現が必要です

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

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

それを仮想ホスト定義の前に含めるだけです。


(Apache 2.4の同等のものの場合)を追加しない限り、は<Location>他の許可制限をオーバーライドするため、注意して使用して<Directory>くださいAuthMerging AndRequireapache docs のセキュリティ警告を参照してください:httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Cedric Knight

4

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

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

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


1
注意:コピーされたダッシュは実際のダッシュではありません。編集を試みましたが、SFは私の編集が小さすぎると文句を言うでしょう。とにかくありがとう、御馳走を働かせます!
ThibautBarrère2014

@ThibautBarrère本当に必要な場合は、編集に非表示を追加して、小さな編集制限を<!-- -->
回避

1

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

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

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


これはエラーがないという点で優れていますが、ユーザーエージェントを偽装している間は拒否されません。なぜそうなるのでしょうか?
トム・ライト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.