Apache 记录完整的 URL 而不是 URI

Apache 记录完整的 URL 而不是 URI

我的 Apache Web 服务器记录了以下消息access.log

46.22.173.131 - - [23/Dec/2014:15:34:54 +0100] "GET http://pl.wikipedia.org/wiki/Special:Search?search=&go=Go HTTP/1.1" 302 482 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
182.254.156.77 - - [23/Dec/2014:16:53:22 +0100] "GET http://www.ly.com/ HTTP/1.1" 302 433 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"`
182.254.208.62 - - [23/Dec/2014:17:57:49 +0100] "GET http://www.ly.com/ HTTP/1.1" 302 433 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0"

Virtualhost定义了两个 - 一个用于端口 80,它重定向到 443 ...另一个Virtualhost用于端口 443,它登录到ssl_access.log

我不明白这些日志是什么意思?是否有人试图通过我的 Web 服务器访问这些 URL?

请帮助我理解这些日志。

大家圣诞快乐!

答案1

http://wiki.apache.org/httpd/ProxyAbuse

为什么我的日志文件中出现了对国外网站的请求?

显示这种情况的 access_log 条目可能如下所示:

63.251.56.142 - - [25/Jul/2002:12:48:04 -0700] “获取http://www.yahoo.com/HTTP/1.0" 200 1456
对于此日志行,200 代码(本例中倒数第二个字段)表示请求成功 - 但请参阅下文以了解这种情况下“成功”的含义。

这通常是恶意客户端试图利用开放代理服务器访问网站而不泄露其真实位置的结果。他们这样做可能是为了操纵按点击付费广告系统、向其他人的网站添加评论或垃圾链接,或者只是为了做一些不被发现的恶意行为。

防止您的服务器被用作开放代理来滥用其他网站非常重要。

答案2

除了 faker 提供的出色答案之外,302响应代码还因为您配置了 HTTPS 重定向。

要验证您是否容易受到通过 HTTPS 进行的相同攻击,请运行以下命令[来源]

openssl s_client -connect yourdomain.com:443
[wait for the connection to initialise]
GET http://www.yahoo.com/ HTTP/1.1
Host: www.yahoo.com

或者curl

curl -H -x https://domain.name.here:443 www.google.de

根据Apache 文档,您不应收到来自 yahoo.com 的内容,并且应显示 404 或 403 响应。如果发生这种情况,这些日志无需担心,很可能是机器人自动扫描的结果。

答案3

正如 @faker 所说,配置您的 Web 服务器以使其不能用作公共代理非常重要。这应该是默认行为(即禁用代理),除非您明确启用了一个或多个代理模块(查看 httpd.conf 中引用代理模块的 LoadModule 语句)并添加了相关的代理人指令。尽管如此,如果您希望明确阻止并记录此类请求,那么您可以按照我的做法,将以下行添加到 .htaccess 文件的 httpd.conf 中:

# There is some seriously broken malware that attempts to proxy via our web
# server to www.baidu.com, planeta.ru, etc. The proxy attempt per se isn't
# broken (although we don't allow proxying via this web server). It's that
# only the first request makes any sense. Subsequent requests mangle both the
# HTTP_HOST and REQUEST_URI into nonsensical strings. Eventually the request
# is so mangled Apache responds with a 403 status.
#
# So check the request line to see if it looks like an attempt to proxy via
# our web server. Since we don't allow proxying nip the insanity in the bud.
RewriteCond %{THE_REQUEST} ^GET\s+https?:// [NC]
RewriteRule ^ blocked.php [NC,END,E=REASON:proxy-probe]

我有一个“blocked.php”脚本,它提供了一个自定义响应页面,其中包括 REASON 环境变量,但您也可以用以下规则替换该规则:

RewriteRule ^ - [NC,L,R=403]

相关内容