2017-06-08 17 views
2

Apacheのmodsecurityを設定して、特定のリソースに単位時間あたりにアクセスできるヒット数を制限しようとしています(例:リソースあたり1分あたり10ヒット、 IPアドレスが要求を行う事項)。リソースは、私はこのスニペットを理解すると、それは「各REQUEST_URIのURIという名前の変数を作成し、各カウンタを関連付け、そして10のそれをデクリメントModSecurityのを告げる「https://myhost/my-resource/my-resource-idApache modsecurity単位時間あたりのURI当たりのヒット数を制限する

# Limit the requests count by unit of time. 
SecRuleEngine On 

<LocationMatch "^.*/my-resource/.*"> 
    # SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog,id:132 
    SecAction initcol:uri=%{REQUEST_URI},pass,nolog,id:232 
    SecAction "phase:5,deprecatevar:uri.counter=10/60,pass,nolog,id:332" 
    SecRule URI:COUNTER "@ge 10" "phase:2,pause:10,deny,status:429,setenv:RATELIMITED,skip:1,nolog,id:432" 
    SecAction "phase:2,pass,setvar:uri.counter=+1,nolog,id:532" 
    Header always set Retry-After "60" env=RATELIMITED 
</LocationMatch> 

ErrorDocument 429 "Too Many Requests" 

の形式でURLパターンを持っています現在のuriカウンタが10の値に達すると、エラーコード429で失敗し、それ以外の場合は "増分"が必要です。

この設定では、「uri variable not found」というエラーが発生しますが、その理由はわかりません。

第1 SecActionのコメントを外して残りの設定を参照するように変更すると、10回のクイックコール後に429を返しますが、明らかにURIを考慮しません(たとえば、 my-resource/123および/ my-resource/456)

誰かがこれに助けを与えることができますか?すべての私の試みは悲惨に失敗し、一般的にApacheの設定にはあまり慣れていないので、私はここでいくつかの重要な概念が欠落していると思います。

PS:ApacheはV2.4では、MOD-セキュリティはV2.9

感謝です!

答えて

0

次の通りである作品の構成:

# Limit the requests count by unit of time. 
SecRuleEngine On 

<LocationMatch "^.*/my-resource/.*"> 
    SecAction initcol:resource=%{REQUEST_URI},pass,nolog,id:132 
    SecRule RESOURCE:COUNTER "@ge 10" "phase:3,pause:10,deny,status:429,setenv:RATELIMITED,skip:1,nolog,id:232" 
    SecAction "phase:2,setvar:resource.counter=+1,pass,nolog,id:332" 
    SecAction "phase:2,deprecatevar:resource.counter=10/60,pass,nolog,id:432" 
    Header always set Retry-After "60" env=RATELIMITED 
</LocationMatch> 

ErrorDocument 429 "Too Many Requests" 

ndlr:「リソース」に「URI」からコレクション名を変更し、廃止ビット

を適応それからそれは予想(CFとして働きます。modsecurityメーリングリスト:https://sourceforge.net/p/mod-security/mailman/message/35889575/

関連する問題