CloudFlare 把所有访客的 IP 全都变成了他们自己的 IP,这怎么解决?很郁闷啊。

2020-10-04 10:15:50 +08:00
 WesleyNZ

https://support.cloudflare.com/hc/zh-cn/articles/200168236-Cloudflare-IP-地理位置有什么作用-

我是小白,只懂一些网站皮毛

请问 cloudflare 到底把这些访客的真实 IP 数据放在哪里了? 在我网站数据库的哪个地方? 如何查看? 我用的是 CPanel 。

然后他也有提供修复方案 给了我个 Github 地址我完全不会安装这个东西啊 太复杂了,完全看不懂 谁能帮忙解释一下?

https://support.cloudflare.com/hc/en-us/articles/200170786-Restoring-original-visitor-IPs-Logging-visitor-IP-addresses-with-mod-cloudflare-

7094 次点击
所在节点    问与答
74 条回复
WesleyNZ
2020-10-04 11:28:34 +08:00
@krixaar 人家怎么会管你的 Cloudflare 啊?
这是 cloudflare 不给我设置,关他们什么事?
mschultz
2020-10-04 11:30:48 +08:00
cPanel 貌似是一个管理面板的名字?不是 Web Server 的名字。Web Server 有比如 Nginx, Apache, EasyApache (其实你主题里那个 「修复方案」 列出了很多)。你看看你具体用的是哪个。

cPanel 的常见 log 文件的位置,我查到大概是 https://docs.cpanel.net/knowledge-base/cpanel-product/the-cpanel-log-files/
不过声明我没用过 cPanel,只是随手一搜,你需要的话自己 Google 一下。

----
然后,访客访问网站的时候会给你的 Web Server 发送请求,里面 HTTP Header 里包括一些字段,如果你用了 Cloudflare 的 CDN,那么 Cf-Connecting-Ip 这个字段的值就是访客的真实 IP. 这些 HTTP 请求 Header 一般都会留在 Web Server 的 log 里

另外不清楚为什么楼上几个同学说 X-Real-Ip 是正解,我个人了解的是,如果用了 Cloudflare CDN,X-Real-Ip 无法获取访客真实 IP,它依然是 Cloudflare 节点的 IP.
mschultz
2020-10-04 11:35:14 +08:00
另外就是你要确认一下你的网站具体是什么?你可以考虑一下你是不是有必要从 log 那么基础的文件里获取访客 IP.
搞不好你的网站应用里就有办法抓取到访客的真实 IP.

举个例子:
WordPress,它本身就有统计访客来源的功能,但是这个访客 IP 也是根据 HTTP Header 里的我忘了是 Remote-addr 还是 x-real-ip 了,总之如果用了 Cloudflare,这俩都不是访客真实的 IP. 但是,有一个插件 WP Statistics,里面可以指定「将哪个字段认为是访客 IP 」,这里我指定把 「 Cf-Connecting-Ip 」作为访客真实 IP 就可以了
also24
2020-10-04 11:36:41 +08:00
@WesleyNZ #21
如果你希望了解这件事的完整原因,建议你学习一下网络协议,了解一下三层转发的细节,以及 CloudFlare 的基础原理。

如果你不想知道细节,只是想解决这个问题,那么你只需要记以下结论:
1 、这件事确实是因为你加了 CloudFlare 引起的。
2 、解决方式就是 X-Forwarded-For 或 X-Real-IP 字段。
3 、要读取这两个字段,需要靠服务商或你自己的程序来解决。
4 、如果你自己不知道如何在自己的程序上解决,那你只能求助于服务商。
5 、服务商如果不愿意解决也是正常的,看具体沟通情况。
6 、如果想彻底解决,建议学习相关知识,买完整的 VPS 自己配置,而不是 CPanel 虚拟主机。


服务商的解决方式参考:
https://support.cpanel.net/hc/en-us/articles/360051107513-Restoring-visitors-IP-with-mod-remoteip
krixaar
2020-10-04 11:40:40 +08:00
@WesleyNZ 统计 cf 的源 ip 需要给服务端设置记录 cf 的 header,也就是楼上说的那些,例如 Apache 需要装 mod_cloudflare 并启用,你作为 cPanel 用户一般是不可能有这种权限的,你必须找服务提供商,所以楼上这些回答你一个也搞不明白。cf 因为太常用,服务商兴许已经设置过需要你去开启,那么你就得去找他们的知识库,没有就发 ticket 。
所以说虚拟空间到处都是坑……
mschultz
2020-10-04 11:40:59 +08:00
@also24 #24 用了 Cloudflare 之后 X-Forwarded-For 或 X-Real-IP 都是 Cloudflare 节点的 IP 啊?
应该用 Cf-Connecting-Ip 吧🤔
windyskr
2020-10-04 11:43:25 +08:00
没用过,但是从你发的链接点进去

![看到]( https://i.loli.net/2020/10/04/7lTtFxMHBsPkIQV.png)
also24
2020-10-04 11:44:56 +08:00
@mschultz #26
CF 确实没有带 X-Real-IP,但是 X-Forwarded-For 是按照规范实现的。
我这里没有提 CF-Connecting-IP,主要还是因为 X-Forwarded-For 相对来说更常用一些。

http://support.cloudflare.com/hc/en-us/articles/200170986
mschultz
2020-10-04 11:56:54 +08:00
@also24 #28 哦哦,谢谢,我好像刚才也想发这个链接来着(不过这个链接里也是推荐用 Cf-Connecting-Ip )。

我这里有个 Traefik + whoami 的 docker 镜像搭的 demo,我打开的时候,X-Forwarded-For 显示的依然是 Cloudflare 节点的 IP. 这里面只有 Cf-Connecting-Ip 是真实 IP.

demo 地址: https://www.f-c.xyz

可能是因为隔了一层 Docker 的原因?

你可以试一下

(搭建的文档其实就是 Traefik 的 Hello World: https://doc.traefik.io/traefik/getting-started/quick-start/
also24
2020-10-04 12:02:29 +08:00
@mschultz #29
可能是因为你没有配置对这个字段的信任吧:
https://doc.traefik.io/traefik/routing/entrypoints/#forwarded-headers

此类字段,一般都需要配置 Trust IP 的,不然会有伪造 IP 的漏洞。
dototototo
2020-10-04 12:10:58 +08:00
cf 是个中介,你委托人家卖东西,人家也告诉你买家是谁了,你听不懂,质问中介怎么还要你来告诉我买家是谁啊,让他自己来买不就行了吗?
mschultz
2020-10-04 12:28:00 +08:00
@also24 是的
Actrace
2020-10-04 12:34:16 +08:00
CF 现在已经不提供 ipv4 的访客 IP 地址了。虽然它会提供一个转换后的 ipv4 地址,但是那个地址并不是客户的 IP 地址。

目前 CF 只在 http header 提供 ipv6 的地址。
presoul
2020-10-04 12:40:42 +08:00
SingeeKing
2020-10-04 12:42:51 +08:00
为什么我记得 CF 告知真实 IP 是一个付费功能
SingeeKing
2020-10-04 12:46:21 +08:00
WesleyNZ
2020-10-04 13:24:23 +08:00
@Actrace 你这个从哪里的得知的?
并没有这个说法啊
datou
2020-10-04 13:54:05 +08:00
在 header 里面找
Yourshell
2020-10-04 13:56:00 +08:00
WesleyNZ
2020-10-04 14:10:38 +08:00
@krixaar

服务商 5 分钟回复内给解决了,从现在以后都是显示真实 IP 地址,谢谢。

但是昨天的访客数据都是 cloudfare 的,我特别想知道这个恶意评论的人是谁,我知道 162.1xx.XXX.XXX 这个地址是转换后的地址,但是在我 header 里面,原地址是有的吧?请问去哪里找?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712445

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX