仅限制 apache 后端访问 nginx 反向代理?

仅限制 apache 后端访问 nginx 反向代理?

我已将 nginx 设置为监听端口 8080 的一组 apache(LAMP)后端的反向代理。

我还配置了每个后端服务器的mod_rpaf.conf文件以包含 nginx 服务器的代理 IP:

<IfModule mod_rpaf.c>
  RPAF_Enable       On
  RPAF_ProxyIPs     127.0.0.1 192.168.0.1 # <- nginx server IP
  RPAF_Header       X-Forwarded-For
  RPAF_SetHostName  On
  RPAF_SetHTTPS     On
  RPAF_SetPort      On
</IfModule>

我如何配置httpd.conf以拒绝任何不是来自 nginx 的连接?

我尝试了以下方法:

<Directory "/var/www/html">

    Order allow,deny
    Allow from 192.168.0.1
    Allow from 127
    Deny from all

</Directory>

但这似乎限制了对 nginx 代理本身以及任何其他 IP 的访问。

这是由于mod_rpaf 转发客户端 IP 造成的吗?如果是这样,我该如何解决这个问题?

答案1

由于 mod_rpaf 模块转发了真实的客户端 IP,因此您无法通过其自己的httpd.conf文件阻止对 apache 后端服务器的公共访问。

设置一些 IPtables 规则将阻止除 nginx 反向代理之外的所有人(公共访问)访问端口 8080,而不会影响客户端真实 IP 的转发:

跑步:

#iptables -A INPUT -p tcp --dport 8080 -s 192.168.0.1 -j ACCEPT
#iptables -A INPUT -p tcp --dport 8080 -j DROP

#service iptables save
#service iptables restart

现在仅限于 nginx 代理访问端口 8080 上的 apache 后端服务器。

答案2

我认为您应该像这样更改允许/拒绝语句的顺序:

<Directory "/var/www/html">

    Order deny,allow
    Deny from all
    Allow from 192.168.0.1
    Allow from 127

</Directory>

因为 (订单文档

  • 排序方式如下:

    允许、拒绝 - 首先,评估所有允许指令;至少必须有一个匹配,否则请求将被拒绝。接下来,评估所有拒绝指令。如果有任何匹配,则请求将被拒绝。最后,任何不匹配允许或拒绝指令的请求都将被默认拒绝。

    Deny,Allow - 首先,评估所有 Deny 指令;如果匹配,则拒绝请求,除非该请求还匹配 Allow 指令。任何不匹配 Allow 或 Deny 指令的请求均被允许。

例如文档

通过结合 Deny 和 Allow 指令,使用 Order 可以确保您确实将事物限制在您想要允许进入的组中:

Order deny,allow
Deny from all
Allow from dev.example.com

相关内容