2

我在负载平衡的 Nginx 集群上有几个 wordpress 站点。我希望在这些上阻止对 /wp-admin 和 /wp-login.php 的访问。客户不愿意使用 Wordfence 之类的插件来实现这一点(可以理解)。

负载均衡器在 X-Forwarded-For 中转发真实的客户端 IP,这存在于 Nginx 中,因为我目前在我的主要日志格式中使用它与"$http_x_forwarded_for"

这是我当前的位置块:

   location ~ ^/(wp-admin|wp-login.php) {

     real_ip_header X-Forwarded-For;

     try_files $uri $uri/ /index.php?$args;
     index index.html index.htm index.php;

     root           /var/www/vhosts/domain.com/html;
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;

     allow 1.1.1.1;
     allow 2.2.2.2;
     allow 3.3.3.3;
     #allow 10.10.85.0/24;
     deny all;
   }

如您所见,我使用“real_ip_header X-Forwarded-For;” 声明真正的IP应该是什么。但这不起作用。有了上述内容,所有对那里的请求都会被阻止。如果我取消注释私有10.10.85.0/24子网(这是从负载均衡器传送流量的私有网络),那么每个人都可以访问这些位置。

我确实在 Nginx 中编译了 realip 模块,如下所示:

[root@STR-MAI-ORDS1 conf.d]# 2>&1 nginx -V | tr -- - '\n' | grep http_realip_module
http_realip_module
[root@STR-MAI-ORDS1 conf.d]#

在我的日志文件中,我可以看到通过使用 X-Forwarded-For 打印到日志的真实公共 IP,但同样不适用于这个位置块 realip,我不知道为什么。

如果重要的话,环境如下所示:

  • pfSense 固件(2 节点 HA)
  • Zevenet 负载均衡器(2 节点 HA)
  • CentOS 6.x Web 服务器(3 节点集群)

网络堆栈是:

  • Nginx v1.12.0
  • PHP-FPM v7.0.20 (fastcgi)

关于我做错了什么的任何建议都会很棒。谢谢。

4

2 回答 2

7

原来 Nginx 中的“set_real_ip_from”不是可选的......即使我正确地将“real_ip_header”设置为“X-Forwarded-For”形式的 LoadBalancers,Nginx 完全拒绝这样做,因为它没有(默认情况下)信任LB作为可以设置真实IP的来源。

解决方法是在我的位置块中包含以下内容:

set_real_ip_from 10.10.85.0/24;
real_ip_header X-Forwarded-For;

然后 Nginx 信任 LB(在该子网内)并将 real-ip 设置为。

于 2017-12-11T13:25:46.523 回答
-2

您可以为多个阻止创建配置文件,如下所示。

修改ngnix配置文件

vi /usr/local/nginx/conf/nginx.conf

包括用于阻止 nginx.conf 中的 IP 的新配置文件

include blockips.conf;

保存 ngnix 配置文件并创建新文件

vi blockips.conf

添加您的黑名单 IP

deny 1.2.3.4;

或子网阻塞

deny 91.212.45.0/24;

有关更多信息,请参阅nginx 阻止 IP子网

于 2017-12-11T12:33:46.873 回答