如何在 ELB 或 httpd 级别阻止不需要的请求

Posted

技术标签:

【中文标题】如何在 ELB 或 httpd 级别阻止不需要的请求【英文标题】:How could I block the unwanted request at ELB or httpd level 【发布时间】:2017-12-27 19:44:00 【问题描述】:

我有两个运行 httpd 的网络服务器,上面运行着六个虚拟主机站点。我的网络服务器位于 AWS 的 ELB 后面。我的 ELB 日志显示,一些用户正在直接访问我的 ELB 服务器的 IP,这反过来又让他们响应我的第一个虚拟主机站点(响应基于我的虚拟主机站点的字母顺序)。所以在这里我需要阻止请求 url 中不包含我的虚拟主机名的请求。简而言之,有人正在访问 AWS IP 并试图从一些随机地址访问 /admin、/sql、/db 等,我需要在 ELB 级别或 httpd 级别阻止那些不需要的请求。以下是 ELB 日志中的此类错误之一。

2017-07-21T03:22:19.973661Z <loadbalancer> <Client IP>:48010 10.1.6.57:80 0.000049 0.068249 0.000039 401 401 0 0 "HEAD http://52.0.168.49:80/phpmy/ HTTP/1.1" "Mozilla/5.0 Jorgee" - -

【问题讨论】:

使用 NACL。您可以在 NACL 中添加 DENY 请求。 【参考方案1】:

关于忽略对您的网络服务器实例的直接 IP 请求,我会确保您的网络服务器安全组只接受来自运行 ELB 的子网的流量。这样,它将忽略所有直接流量。

关于阻止特定路径的特定访问,最好在 httpd 级别完成,您可能需要考虑 Fail2Ban 实现。见https://serverfault.com/questions/416926/automatically-block-ip-who-requests-certain-url

当然,您可以通过 Apache 配置控制/拒绝访问。上面的相同链接也表明了这一点:

您可以在论坛目录中创建一个 .htaccess 文件并将这些 以下几行可能有助于通过访问来保护该 url。

命令允许,拒绝拒绝所有

【讨论】:

以后,它仍然会保留在 access_log 条目中,代码为 404 或 403。【参考方案2】:

如果您使用的是应用程序负载均衡器,则可以使用 Web 应用程序防火墙 (WAF) 过滤直接指定 IP 地址的请求。

【讨论】:

以上是关于如何在 ELB 或 httpd 级别阻止不需要的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS ELB 日志中获取完整的 POST 正文?

上瘾云计算,从负载均衡ELB开始

在防火墙级别阻止 HTTP/2

CORS 请求未成功 - Cloudfront 和 ELB over HTTPS

我的请求是跨源请求吗?(heroku 上的 Django rest api,CORS 没有阻止我的请求)

ENI 已注册到 Elastic Load Balancer - AWS