Apache 对 IP (X-Forwarded-For) 或有效用户的访问控制
Apache Access Control to IPs (X-Forwarded-For) or valid-user
我曾经使用 valid-user 或 ip 指令来阻止对我的 Apache 服务器的某些文件夹的访问,如下所示:
<Directory "/home/domain/public_html/secure">
Require ip x.x.x.x
Require ip y.y.y.y
AuthType Basic
AuthUserFile "/home/domain/secure/pass"
AuthName "Authentication Required"
Require valid-user
Satisfy Any
</Directory>
现在,我已将我的服务器放在 F5-BIGIP 设备后面,这不会让我完全 DNAT 客户端的连接。该设备也在 Linux 服务器后面,该服务器充当网关,DNAT/SNAT 规则帽子正在相应地工作。不过,我可以通过 X-Forwarded_For 记录客户端的 IP。但是我的 Apache 指令不再起作用了。
所以我的问题是,有什么方法可以使用 Require X-Forwarded-For x.x.x.x
之类的东西吗?
我的 Apache 版本是:
[root@webserver1 ~]# apachectl -version
Server version: Apache/2.4.6 (CentOS)
Server built: May 12 2016 1
0:27:23
提前致谢。
您应该可以执行以下操作:
SetEnvIf X-Forwarded-For x.x.x.x$ foo
SetEnvIf X-Forwarded-For y.y.y.y$ bar
...
Require env foo
Require env bar
您不能直接访问 headers 作为 require 指令的一部分,因此设置一个匹配的环境变量,并将其用作测试:
SetEnvIf X-Forwarded-For "^123\.456\.78\.9" MyAllowedIPAddress
Require env MyAllowedIPAddress
备注:
- SetEnvIf 需要正则表达式作为测试
- 环境变量名随便起(不要冲突!)
- SetEnvIf 在
指令之后进行评估,因此如果您同时使用两者,将会造成混淆。下面是使用 的替代方法。
<if "%{HTTP:X-Forwarded-For} == '123.456.78.9'">
Require all granted
</if>
<else>
Require all denied
</else>
我曾经使用 valid-user 或 ip 指令来阻止对我的 Apache 服务器的某些文件夹的访问,如下所示:
<Directory "/home/domain/public_html/secure">
Require ip x.x.x.x
Require ip y.y.y.y
AuthType Basic
AuthUserFile "/home/domain/secure/pass"
AuthName "Authentication Required"
Require valid-user
Satisfy Any
</Directory>
现在,我已将我的服务器放在 F5-BIGIP 设备后面,这不会让我完全 DNAT 客户端的连接。该设备也在 Linux 服务器后面,该服务器充当网关,DNAT/SNAT 规则帽子正在相应地工作。不过,我可以通过 X-Forwarded_For 记录客户端的 IP。但是我的 Apache 指令不再起作用了。
所以我的问题是,有什么方法可以使用 Require X-Forwarded-For x.x.x.x
之类的东西吗?
我的 Apache 版本是:
[root@webserver1 ~]# apachectl -version
Server version: Apache/2.4.6 (CentOS)
Server built: May 12 2016 1
0:27:23
提前致谢。
您应该可以执行以下操作:
SetEnvIf X-Forwarded-For x.x.x.x$ foo
SetEnvIf X-Forwarded-For y.y.y.y$ bar
...
Require env foo
Require env bar
您不能直接访问 headers 作为 require 指令的一部分,因此设置一个匹配的环境变量,并将其用作测试:
SetEnvIf X-Forwarded-For "^123\.456\.78\.9" MyAllowedIPAddress
Require env MyAllowedIPAddress
备注:
- SetEnvIf 需要正则表达式作为测试
- 环境变量名随便起(不要冲突!)
- SetEnvIf 在
指令之后进行评估,因此如果您同时使用两者,将会造成混淆。下面是使用 的替代方法。
<if "%{HTTP:X-Forwarded-For} == '123.456.78.9'">
Require all granted
</if>
<else>
Require all denied
</else>