1

我想禁止在我的網站上導致mupltiple 404錯誤的IP地址。我谷歌搜索了很多,發現了幾個腳本,給了我開始的想法。我將它們結合起來。這是我的腳本:mod_secure腳本來阻止導致多個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」目錄是創建,可訪問,我在那裏我可以看到2個文件的0字節大小。

謝謝!

+0

這可能是由於解析404錯誤的限制嗎? 「請注意,某些響應狀態代碼(如404)在Apache的請求週期中較早處理,我無法按預期觸發。「 」** SecAuditEngine ** ModSecurity目前能夠記錄大多數(但不是全部)事務。涉及錯誤的事務(例如,400和404事務)使用不同的執行路徑,而ModSecurity不支持。「 – EIKA

回答

0

您正嘗試讀取階段2規則中的響應狀態。這不會設置,直到第3階段,從而改變規則1007第3階段

不知道這是一個偉大的想法,雖然對於一些原因:

  • 一起來ModSecurity的持久化集合是出了名在任何負載情況下都不穩定,並且您正在追蹤每次遇到服務器的IP地址。這是很多跟蹤和大量訪問該集合。就個人而言,直到ModSecurity引入內存存儲系統而不是基於磁盤的存儲系統,我不推薦使用它們,而是強烈建議ModSecurity僅用於不需要持久存儲的同一事務規則。

  • 接下來,您在同一個30秒窗口中三個404之後阻塞。一個配置錯誤的網頁,其中包含一些丟失圖像,阻止合法流量。另外,如果您碰巧在搜索引擎中有3個缺頁,則會阻止搜索引擎抓取工具(例如GoogleBot),這可能會導致您的網站受到相當大的傷害。

  • 最後是什麼意思?您可能沒有在網絡服務器上保存任何負載,因爲運行此ModSecurity規則並返回403的開銷可能遠遠超過返回普通舊404的開銷。30秒超時似乎是任意的,很容易繞過(有意或者不會),並且會導致後來的混亂(「嘿怪異的bug,一些響應工作,一些返回403 - 看似隨意,我無法弄清楚)」,並分析真實的404或網絡流量將變成奇怪分類變化很困難。

不知道你是否想要這個建議,而不僅僅是答案,但是以爲如果你沒有考慮到這個問題,我會提醒你!

+0

感謝您的迴應。 。但不是3.你知道爲什麼嗎?我想修復它。 關於你的問題。請不要擔心它!這是測試值,我會用另一個。它是一個特殊的項目,低流量和非常高的黑客活動,這裏每天最多隻有20-50位訪問者,最後,我會調整禁令一週,並將404計數器增加到5或者其他。像Fail2Ban將無法工作 – EIKA

+0

第3階段工作完畢根據您的回答以下? –

+0

是的,謝謝!我張貼了最終的工作代碼。 – EIKA

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(禁止時間)和後GE(錯誤計數器)所需的值。例如。 3600和5相應。