私はもともとこれを 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行目の構文エラー:ここでは拒否できません[失敗]
今は古い質問のように見えますが、同じことをしたくて、上の神経からの答えを見つけました。現状では正しくありません-<Location "/">
、およびSetEnvIf
には正規表現が必要なので、括弧を引用符で囲む必要があります。
これは私にとってすべての仮想ホストにアクセス制御を適用するのに役立ちました:
SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
Deny from env=bad_ua
</Location>
仮想ホスト定義の前にそれを含めてください。
mod_rewriteはドキュメントに従ってサーバーレベルで設定できます:
RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]
RewriteCond
の正規表現をエスケープすることを忘れないでください
SetEnv行の構文が正しければ、次のようにconfでそれをスローできるはずです。
<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>
それがすべての仮想ホストで動作することを許可する必要があります-2.2.24でテストされたばかりで、魅力のように機能しました。