Linux “依赖”是否安全;X-For";在使用Cloudflare时限制Apache中的IP访问?
我使用.htaccess文件将目录访问限制为某些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代
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