据我所知,我在我的 Apache 生产服务器上禁用了所有 mod_proxy 东西。什么是测试或确认的合理方法?看看我的 httpd.conf,我可以告诉你,任何有“代理”的行都被评论了,因为这是值得的。
我问的原因是我今天早上在我的 logwatch 报告中看到了这些东西:
Connection attempts using mod_proxy:
81.88.124.30 -> 64.12.202.116:443: 1 Time(s)
81.88.124.30 -> 64.12.202.15:443: 1 Time(s)
81.88.124.30 -> 64.12.202.1:443: 1 Time(s)
81.88.124.30 -> 64.12.202.22:443: 1 Time(s)
81.88.124.30 -> 64.12.202.29:443: 1 Time(s)
81.88.124.30 -> 64.12.202.36:443: 1 Time(s)
81.88.124.30 -> 64.12.202.43:443: 1 Time(s)
81.88.124.30 -> 64.12.202.50:443: 1 Time(s)
81.88.124.30 -> 64.12.202.8:443: 1 Time(s)
Requests with error response codes
403 Forbidden
64.12.202.116:443: 1 Time(s)
64.12.202.15:443: 1 Time(s)
64.12.202.1:443: 1 Time(s)
64.12.202.22:443: 1 Time(s)
64.12.202.29:443: 1 Time(s)
64.12.202.36:443: 1 Time(s)
64.12.202.43:443: 1 Time(s)
64.12.202.50:443: 1 Time(s)
64.12.202.8:443: 1 Time(s)
不是我的报告中通常出现的东西。所以看起来他在尝试中得到了 403,我想这很好。但是什么让他觉得值得一试?
也许他/她/它试图弄清楚是否值得一试。只需向服务器发送代理请求并查看它是否有效,他们不会花费任何费用,因此通常他们会不加选择地发送这些请求。
仅供参考,确保 mod_proxy 被禁用的一种可靠方法是确保该行
被注释掉了。它应该只在配置文件中出现一次,但用 grep 确保它不会有什么坏处。此外,您可以运行
(或者可能是您的系统的等效项,在我的系统上
/etc/init.d/apache2 modules
)列出加载的模块并验证代理模块不在列表中。要测试以确保您不是开放代理,只需 telnet 到端口 80,然后发送:
(最后你需要两个两行返回,但它被吃掉了)。您应该返回一个 404 页面。如果你回到谷歌,你是开放的。
默认情况下,在 Apache 2.x 上,即使启用了 mod_proxy 模块,也会通过以下指令默认值禁用代理;
如果您将其设置为 On 那么您就是一个开放代理 - 否则 AFAIK 您应该是安全的。
https://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxyrequests
您可以关闭 ProxyRequests,未加载 mod_proxy,但仍会收到 200 响应。我在客户端的 Web 服务器上遇到了导致此行为的配置 - 默认虚拟主机有一个 .htaccess 指令,该指令通过 php 脚本发送所有请求,并且“找不到页面”页面返回 200 响应代码。您可以请求任何内容,并且永远不会收到 404 错误。不是一个理想的情况,但也不是一个开放的代理。这对搜索引擎索引器来说是地狱。哈哈
FWIW,确保不加载它的最佳方法是从驱动器中删除模块,然后重新启动 apache。