【问题标题】:Using Nginx to block IP's behind proxy使用 Nginx 阻止 IP 在代理后面
【发布时间】:2012-10-31 14:25:45
【问题描述】:

我在这里运行 Nginx 1.2.4 网络服务器,并且我在我的主机代理后面以防止 ddos​​ 攻击。使用此代理的缺点是我需要从额外的标头中获取真实的 IP 信息。例如,在 PHP 中,通过 $_SERVER[HTTP_X_REAL_IP] 可以很好地工作。

现在,在我支持我的主机代理之前,我有一个非常有效的方法来阻止某些 IP,方法是:include /etc/nginx/block.conf 并允许/拒绝 IP。

但现在由于代理,Nginx 看到所有流量来自 1 个 IP。

我已经用--with-http_realip_module 配置了 Nginx,所以我现在应该能够从人们那里获得真实的 IP。

在我的 nginx.conf 中我添加了:

real_ip_header X-Forwarded-For;
include blockips.conf;

我也试过了:

real_ip_header X-Real-IP;
include blockips.conf;

在这两种情况下,blockips.conf 中列出的 IP 都不会被阻止。同样在我的日志文件中,我没有看到真实的 IP,但只显示了代理 IP。

我做错了什么?

【问题讨论】:

  • 只有代理访问您的站点,所以这是您看到的唯一 IP。如果你想通过 IP 阻止用户,你需要在代理上阻止他们,或者配置代理以某种方式转发真实的 ip 信息。
  • 代理也这样做,否则 PHP 将无法通过 $_SERVER[HTTP_X_REAL_IP] 获取 IP 信息。所以使用我为 Nginx 安装的模块,我应该也能够获取真实的 IP 信息。

标签: proxy nginx ddos


【解决方案1】:

我解决了。

必须补充:

set_real_ip_from 0.0.0.0;

其中 IP 0.0.0.0 是代理

【讨论】:

  • 需要在末尾添加 /0:set_real_ip_from 0.0.0.0/0;
  • 小心set_real_ip_from 0.0.0.0/0;。这实质上意味着您信任任何 IP 都能为您提供准确的标头(例如 X-Forwarded-For)。您将需要一些单独的方法来阻止来自不受信任的标头的请求; iptables 可以做到这一点。如果没有像 iptables set_real_ip_from 0.0.0.0/0; 这样的东西,黑客就可以轻易地欺骗 IP 地址。
  • 此解决方案需要您启用额外的 nginx 模块nginx.org/en/docs/http/ngx_http_realip_module.html
  • 对我来说,最后添加 /0 是不必要的。实际上,它只是产生了一个烦人的警告,所以我删除了它。
【解决方案2】:

小心:设置set_real_ip_from 0.0.0.0/0; 可能是一个潜在的安全问题,因为它将允许任何带有X-Forwarded-For 等标头的传入请求设置真实IP。即使在特殊情况下这可能有用,它几乎肯定会为 nginx 中的 ip 阻塞创建一种规避方法。感谢@phylae 在他的评论中澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多