在 Apache 日志中阻止某些 GET 请求

在 Apache 日志中阻止某些 GET 请求

最近我有一个 VPS。现在似乎有一个不属于我的域名,其 DNS 记录指向我的 IP。因此,我的 Apache (2.4) 日志充斥着某种 GIT 请求。格式始终为:GET /?p=foo.git;...随机内容....

我尝试使用 iptables 和 Apache 配置来阻止它,但似乎不起作用,因为它以问号开头。我的整个网站都使用 SSL。

是否可以将其从我的日志中移除?如何操作?任何帮助都将不胜感激。

答案1

鉴于请求遵循特定的格式,您可以尝试以下技巧:将 HAProxy 放在 Apache 前面(这需要一些工作)并在 HAProxy 中创建一个与所述请求匹配的 ACL(基于主机/标头/请求标准)并确保它们永远不会到达 Apache。

答案2

有几种方法可以阻止这种情况:

  • mod_rewrite 可以匹配查询字符串
  • mod_security 可以阻止这种情况以及其他滥用服务器的尝试
  • 如果客户端使用 SNI,您可以为其他域设置单独的虚拟主机并阻止所有内容,并记录到单独的文件(或 /dev/null)
  • 让请求通过,但不记录它们

为了mod_rewrite, 有一个包含大量信息的典型问题. 基本规则如下

RewriteEngine On
RewriteCond %{QUERY_STRING} ?p=foo.git.*
RewriteRule .* - [F]

这将返回403 Forbidden给客户端。

为了mod_security请参阅文档modsecurity.org

为了虚拟主机请参阅文档Apache 文档站点。请注意,对于不使用 SNI 的客户端,可能会出现问题,如问题所述了解 SSL 设置

为了改变日志记录,你可以使用 mod_rewrite、环境变量和自定义日志格式的组合。以下是示例:

RewriteEngine On
RewriteCond %{QUERY_STRING} ?p=foo.git.*
RewriteRule .* - [F,E=nolog:1]
CustomLog /path/to/your/access.log common env=!nolog

相关内容