我怎么写这个modsecurity规则?

  • 本文关键字:modsecurity 规则 regex
  • 更新时间 :
  • 英文 :


我正在尝试编写一个modsecurity规则,将匹配几个坏的User-Agent字符串。用户代理字符串看起来像这样:"坏代理名称(+http://example.com/)">

但我的规则似乎不起作用:

SecRule REQUEST_HEADERS:User-Agent "@rx (?:yandex|daum|bad-agent name)" 
"msg:'Spiderbot blocked - UA: %{REQUEST_HEADERS:USER-AGENT}',id:10008,log,t:lowercase,drop,phase:1"

我做错了什么?我正在尝试匹配用户代理字符串开头的字符串,如"以"开头。我非常熟悉正则表达式,但modsecurity正则表达式语法无处可寻。

感谢

你的规则看起来基本正确。

  1. 确保SecRuleEngine指令被设置为On而不是DetectionOnly,否则你的规则的drop动作将永远不会被执行,即使规则匹配。

    注意:检查错误日志文件。如果你看到你的规则匹配(并被记录),但您的测试没有预期的结果(没有丢失的连接),这将表明您的ModSecurity实例处于DetectionOnly模式。

    您还可以将drop替换为deny,这可能更容易测试(403响应将是您的规则正在工作的具体指示!)。

  2. 如果确实需要锚定正则表达式,可以使用:

    ^(?:yandex|daum|bad-agent name)
    
  3. 注意,使用变量的语法与定义变量的语法是不同的,所以:

    %{REQUEST_HEADERS:USER-AGENT}
    
    应:

    %{REQUEST_HEADERS.USER-AGENT}
    
  4. 使用t:none启动转换管道以取消任何"默认值"的效果是很好的实践。可能已经到位的转换。所以:

    t:lowercase
    

    将成为:

    t:none,t:lowercase
    

相关内容

  • 没有找到相关文章

最新更新