2

Web サイトで複数の 404 エラーを引き起こす IP アドレスを禁止したいと考えています。私は多くのことをグーグルで検索し、開始するためのアイデアを提供するいくつかのスクリプトを見つけました。そして、それらを組み合わせました。これが私のスクリプトです:

# Determining temp data dir    
SecDataDir "C:\logs\datastore"
#
# Loading previous data for the IP request
SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'"
#
# Incrementing block_script counter if client caused status #404
SecRule RESPONSE_STATUS "@streq 404" "phase:2,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=30,id:'1007'"
#
# Denying the request if the block_script counter is greater than 3
SecRule IP:BLOCK_SCRIPT "@gt 3" "phase:2,deny,status:403,id:'1008'"

何らかの理由で、それは動作しません。多少の誤差はあると思います。申し訳ありませんが、私はコーディングの第一人者でもプログラマーでもありません。時間があるときは、自家製のプロジェクトで遊んでいます。誰かが私を助けてくれることを願っています。私の間違いは簡単に見つけて修正できます。

前もって感謝します!

「datastore」ディレクトリが作成され、アクセス可能になり、サイズが 0 バイトのファイルが 2 つ表示されます。

ありがとう!

4

2 に答える 2

1

最終的で正確に機能するバージョンのように見えます:

SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'"
SecRule RESPONSE_STATUS "@streq 404" "phase:3,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=600,id:'1007'"
SecRule IP:BLOCK_SCRIPT "@ge 3" "phase:2,deny,status:403,id:'1008'"

ip.block_script var (禁止時間) と3 after ge (エラーカウンター) を必要な値に変更する必要があります。たとえば、3600 とそれに応じて 5。

于 2016-09-18T22:26:28.160 に答える