有什么方法可以阻止 IP 地址主机头欺骗?

有什么方法可以阻止 IP 地址主机头欺骗?

我已经将以下内容添加到我的 nginx 配置中以处理欺骗域:

    if ($host !~* ^(.*example.org|\d+\.\d+\.\d+\.\d+)$ ) {
            return 444;
    }

现在它将 IP 地址列入白名单,因为我需要接受它们的某些请求。

这是在 AWS ELB 后面,因此它也需要响应 IP 地址。

理想情况下,我希望它只接受自己的公共 IP 地址和自己的私有 IP 地址。但是,我不想将其硬编码到配置中,因为这些是 AWS 实例。

所以我想知道是否有人想出了阻止欺骗主机头的解决方案,该解决方案专门限制所需的 IP。

我能想到的最好的办法是编写一个脚本来生成配置文件,在启动时添加正确的 IP,然后将它们复制到 nginx 配置文件夹中。但我觉得一定有一个更优雅的解决方案,不需要我编写启动脚本。

原因

因为有人问我为什么要这样做,我基本上有两个目标:

  • 消除由于 HOST_HEADER SuspiciousOperation 错误而收到的 Django 错误
  • 防止机器人(占这些欺骗请求的 99.9%)到达我的 Web 应用层。

答案1

您最好的选择确实是生成一个配置文件部分并将其包含在内,因为如果没有它,nginx 就无法知道主机头中的授权 IP。

server {

    listen 80;

    server_name mypublicdomain.com anotherdomain.com;
    include conf.d\domain-ips;  

    [ ... ]        

}

domain-ips 文件包含:

server_name x.x.x.x; # Public IP
server_name x.x.x.x; # Private IP

相关内容