Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux “依赖”是否安全;X-For";在使用Cloudflare时限制Apache中的IP访问?_Linux_Apache_Cloudflare - Fatal编程技术网

Linux “依赖”是否安全;X-For";在使用Cloudflare时限制Apache中的IP访问?

Linux “依赖”是否安全;X-For";在使用Cloudflare时限制Apache中的IP访问?,linux,apache,cloudflare,Linux,Apache,Cloudflare,我使用.htaccess文件将目录访问限制为某些IP地址,如下所示: AuthType Basic AuthName "Protected" <RequireAny> Require ip 1.2.3.4 </RequireAny> AuthType-Basic AuthName“受保护” 要求ip 1.2.3.4 这在正常的服务器设置中可以正常工作,但是当使用Cloudflare作为WAF代理时,它会停止工作,因为服务器接收通过Cloudflare的IP代

我使用.htaccess文件将目录访问限制为某些IP地址,如下所示:

AuthType Basic
AuthName "Protected"

<RequireAny>
    Require ip 1.2.3.4
</RequireAny>
AuthType-Basic
AuthName“受保护”
要求ip 1.2.3.4
这在正常的服务器设置中可以正常工作,但是当使用Cloudflare作为WAF代理时,它会停止工作,因为服务器接收通过Cloudflare的IP代理的所有请求

作为一种解决方法,可以使用“X-Forwarded-For”标头来标识客户端的“真实”IP地址,因为Cloudflare会将此地址与其所有请求一起传递:

AuthType Basic
AuthName "Protected"

SetEnvIf X-Forwarded-For 1.2.3.4$ allowed

<RequireAny>
    Require env allowed
</RequireAny>
AuthType-Basic
AuthName“受保护”
SetEnvIf X-Forwarded-For 1.2.3.4允许$
要求允许使用env
在使用Cloudflare时,这是一种安全的方法还是有更好/更安全的方法来限制Apache中客户端IP的访问?

根据,标头可以包含逗号分隔的值列表,这是
X-Forwarded-For
as的情况

如果发送到的请求中已存在X-Forwarded-For标头 Cloudflare,Cloudflare将HTTP代理的IP地址附加到 标题:

Example: X-Forwarded-For: 203.0.113.1,198.51.100.101,198.51.100.102 
在上述示例中,203.0.113.1是原始访客IP地址,并且 198.51.100.101和198.51.100.102是通过X-Forwarded-For标头提供给Cloudflare的代理服务器IP地址

通常将最左边的IP作为真实IP,但情况并非总是如此

如果您这样做,您应该检查与您的IP地址匹配的正则表达式

SetEnvIf X-Forwarded-For ^1\.2\.3\.4 allowed
(最左边的IP,转义点)

更好的方法(IMHO) Cloudflare还发送头
cf connecting ip
(这是发送到您的机器之前最后一个命中Cloudflare的ip),我宁愿使用这个头

这是一种安全的方法还是有更好/更安全的方法来限制 使用Cloudflare时Apache中的客户端IP访问

有一个陷阱。在这个场景中,您告诉Apache:

“我们中间有CyrdFLARE,所以不是用你自己的方式告诉访问者的IP,让我们看看这个自定义标题”。p> 该自定义标题可以伪造。绝对地因此,你也应该说:

“如果且仅当请求来自Cloudflare IP时,此自定义标头应视为可靠的”

最后,您应该使用而不是手动构建SetEnvIf规则

基本上:

# /etc/apache2/conf-enabled/remoteip.conf
RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
...
RemoteIPTrustedProxy 2606:4700::/32
RemoteIPTrustedProxy 2803:f800::/32
或者,将IP列表放在单独的文件中:

# /etc/apache2/conf-enabled/remoteip.conf
RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxyList conf/trusted-proxies.lst

如果请求中没有出现上述头,Apache将退回ro REMOTE_ADDR。来自不受信任IP的请求也是如此。如果标头存在并且来自Cloudflare,则只需执行以下操作:

Require ip 1.2.3.4
这种方法可以在需要使用IP的任何地方(日志、身份验证等)替换IP,并在边缘情况下优雅地退回到原始的远程地址

Require ip 1.2.3.4