据我所知,我已在 Apache 生产服务器上禁用所有 mod_proxy 功能。有什么合理的方法来测试或确认这一点?查看我的 httpd.conf,我可以告诉您,其中任何包含“proxy”的行都已被注释,仅供参考。
我问这个问题的原因是我今天早上在我的日志监控报告中看到了这些内容:
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 错误,我想这是好事。但是什么让他觉得值得一试呢?
答案1
也许他/她/它正在尝试弄清楚是否值得一试。只需向服务器发送代理请求并查看它是否有效,他们无需花费任何成本,因此他们通常会不加选择地发送这些请求。
确保 mod_proxy 被禁用的一个可靠方法是确保以下行
LoadModule mod_proxy.so proxy_module
被注释掉了。它应该只在配置文件中出现一次,但用 grep 来确认一下也没什么坏处。此外,你可以运行
apache2ctl -M
(或者可能与您的系统等效,但在我的系统中是/etc/init.d/apache2 modules
)列出已加载的模块并验证代理模块不在列表中。
答案2
要测试以确保您不是开放代理,只需 telnet 到端口 80,然后发送:
GET http://www.google.com/ HTTP/1.0
(最后需要两个两行回车符,但它被吃掉了)。您应该会得到一个 404 页面。如果您得到 Google 的返回,则表示您已打开。
答案3
在 Apache 2.x 上,默认情况下即使启用了 mod_proxy 模块,也会通过以下指令默认值禁用代理;
ProxyRequests Off
如果将其设置为“开启”,则您就是开放代理 - 否则据我所知您应该是安全的。
https://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxyrequests
答案4
值得一提的是,确保它不被加载的最佳方法是从驱动器中删除该模块,然后重新启动 apache。