使用 mod_security2 阻止没有 Host 标头的 HTTP 请求

使用 mod_security2 阻止没有 Host 标头的 HTTP 请求

在我的 Apache 配置中,我只想允许基于主机头的虚拟主机。也就是说,我只想通过 IP 地址阻止任何流量。我安装了 mod_security2,但我只使用默认规则集。mod_security2 是配置此功能的最佳位置吗?如果是,如何配置?

Apache 2.4.7,Ubuntu 14.04,PHP 5.5.9

答案1

将其添加到<Directories>httpd.conf 中您希望它应用的章节中(例如默认配置中的 /var/www 和 /var/www/html 章节)

 <RequireAll>
    Require expr ( -n %{HTTP_HOST} && %{HTTP_HOST} != "1.2.3.4" )
 </RequireAll>

-n 匹配“非空”,其余匹配 Host: 标头不等于您的服务器 IP。您可能需要使用您的公共和内部 IP 重复第二部分,具体取决于您的 Web 路由设置。

答案2

我建议你阅读我对这个问题的回答我需要规则来删除一些恶意的 Apache,其中解释了如何下载和配置OWASP ModSecurity Core Rule Set 3.x。但是,这里有一个您所要求的规则的简单示例:

# Deny requests without a host header
#
SecRule &REQUEST_HEADERS:Host "@eq 0" \
    "id:160, phase:2, log, drop, deny, status:403, \
        tag:'requests-without-host-header'"

上述规则中最重要的是参数phase:2,因此在响应之前访问将被拒绝,但您可以在某些情况下(如果需要)将规则列入白名单phase:1。您可以使用nolog,也是的最终结果dropdeny并且status:403几乎相同,您可以决定只保留这三个参数中的一个。

id:160我的存储库中的签出规则pa4080/www-security-assistant更复杂的例子。你还可以Missing/Empty Host Header阅读REQUEST-920-PROTOCOL-ENFORCEMENTSpiderLabs/owasp-modsecurity-crs 3.x

相关内容