阻止请求外部站点
即使 ProxyRequests Off 已设置,仍需额外规则防止完整 URL 请求(如 GET http://beard.works/)被处理:
使用 mod_rewrite 阻止完整 URL: 在 <VirtualHost> 或全局配置中添加:
RewriteEngine On # 如果请求包含完整的 http:// 或 https://,拒绝 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\shttp[s]?:// [NC] RewriteRule ^ - [F]
这会返回 403 Forbidden 给任何试图访问外部站点的请求。
限制Host头部:只允许你的域名通过:
RewriteCond %{HTTP_HOST} !^yourdomain\.com$ [NC] RewriteRule ^ - [F]
处理CONNECT请求
CONNECT 请求通常由 mod_proxy_connect 处理。如果已禁用该模块,Apache 默认会返回 400。为确保安全,可以明确拒绝:
<Location /> # 拒绝 CONNECT 方法 <Limit CONNECT> Order deny,allow Deny from all </Limit> </Location>
配置完成后,检查语法并重启Apache服务。
再次测试
返回403,请求被拒绝。
检查日志
观察日志,确保:
- 合法请求(如 /grafana )正常转发。
- 外部请求(如 GET http://beard.works/ CONNECT)被拒绝,返回 403 或 400。
总结
通过明确配置 ProxyPass 并结合 mod_rewrite 和 Limit 规则,可以保留反向代理功能,同时阻止服务器被用作开放代理。调整配置后,密切监控日志,确保没有意外的 200 响应。
页码: 1 2