Nginx位置阻止访问列表和' X-Forwarded-For'

时间:2017-12-11 12:07:46

标签: php wordpress nginx access x-forwarded-for

我在Load Balanced 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以进行登录,但是对于此位置块实例也是如此,我不确定原因。

如果重要,环境如下:

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

网络堆栈是:

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

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

2 个答案:

答案 0 :(得分:2)

事实证明,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设置为。

答案 1 :(得分:0)

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

修改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;

有关详细信息,请参阅DataTransfer 并为nginx Blocking IP