处理Apache服务器代理攻击

阻止请求外部站点

即使 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_rewriteLimit 规则,可以保留反向代理功能,同时阻止服务器被用作开放代理。调整配置后,密切监控日志,确保没有意外的 200 响应。

发表评论

error: Content is protected !!