2

我想禁止在我的网站上导致多个 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 字节大小的文件。

谢谢!

4

2 回答 2

1

您正在尝试读取第 2 阶段规则中的响应状态。这将在第 3 阶段之前设置,因此将规则 1007 更改为第 3 阶段。

不确定这是一个好主意,但出于多种原因:

  • 首先,ModSecurity 中的持久性集合在任何类型的负载下都是出了名的不稳定,并且您正在跟踪每个命中服务器的 IP 地址,每次命中。这是大量的跟踪和对该集合的大量访问。就个人而言,在 ModSecurity 引入内存存储系统而不是基于磁盘的系统之前,我不建议使用它们,而是强烈建议 ModSecurity 仅与不需要持久存储的相同事务规则一起使用。

  • 接下来,您在同一个 30 秒窗口中的三个 404 后阻塞。一个配置不当的网页缺少一些图像,您正在阻止合法流量。此外,如果您碰巧在搜索引擎中丢失了 3 个页面,那么您会阻止搜索引擎爬虫(例如 GoogleBot),这可能会对您的网站造成相当大的损害。

  • 最后有什么意义?您可能不会在您的网络服务器上节省任何负载,因为运行此 ModSecurity 规则并返回 403 的开销可能远远超过仅返回普通旧 404 的开销。30 秒超时似乎是任意的,很容易绕过(故意与否),并且会导致稍后会混淆的怪异(“嘿,奇怪的错误,一些响应有效,有些返回 403 - 似乎是随机的。我无法弄清楚”)并分析真正的 404 或网络流量将成为随着分类的变化,困难重重。

不知道你是否想要这个建议而不仅仅是答案,但我想我会警告你,以防你没有考虑到这些!

于 2016-09-18T19:02:05.197 回答
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 回答