想给网站加速又不想暴露服务器真实 IP,Cloudflare 是成本最低的方案。它免费套餐就带 CDN 和 IP 隐藏,但很多人配完发现源站 IP 还是能被扫出来,问题出在 DNS 记录类型和源站防火墙没做对。下面按顺序走一遍。
一、把域名接入 Cloudflare 并开启代理
先在 Cloudflare 注册账号,添加你的域名,选免费套餐。之后 Cloudflare 会给你两个 NS 地址,去域名注册商那里把 NS 改成这两个,等生效(通常几分钟到 24 小时)。
生效后进入 DNS 页面,添加一条 A 记录指向你服务器的真实 IP。关键点:记录后面的云朵图标必须是橙色(Proxied),不能是灰色。灰色意味着 DNS 只做解析,流量直连源站,CDN 和 IP 隐藏全部失效。
类型: A
名称: @(或 www)
内容: 你的服务器真实IP
代理状态: 已代理(橙色云朵)
配好后用 dig 你的域名 查一下,返回的应该是 Cloudflare 的 IP(104.x 或 172.x 开头),而不是你的源站 IP,说明代理已生效。
二、源站防火墙只放行 Cloudflare IP
这一步是隐藏 IP 的核心。很多人只做了代理,但源站 80/443 端口对全网开放,别人扫段就能找到真实 IP,Cloudflare 白配了。
做法是:在服务器防火墙或云厂商安全组里,只允许 Cloudflare 的 IP 段访问 80 和 443,其他一律拒绝。Cloudflare 官方 IP 列表在 https://www.cloudflare.com/ips/,包含 IPv4 和 IPv6 两组。
以 UFW 为例,先拉取列表再批量放行:
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
ufw allow from $ip to any port 80,443 proto tcp
done
ufw enable
如果你用的是 Nginx,还可以在配置里加一层校验,只信任 Cloudflare 来源:
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
# ...其余网段
real_ip_header CF-Connecting-IP;
这样日志里记录的才是访客真实 IP,而不是 Cloudflare 节点 IP。
三、SSL 模式与常见踩坑
SSL/TLS 页面选 Full (Strict),前提是源站装了有效证书(Let’s Encrypt 免费证书即可)。如果选 Flexible,Cloudflare 到源站是 HTTP 明文,既不安全又容易出重定向循环。
- 开启 Always Use HTTPS,强制跳转。
- 开启 Automatic HTTPS Rewrites,避免混合内容警告。
- 不要同时开 Cloudflare 的“Under Attack”模式做日常防护,会误伤正常访客。
- 源站如果开了 CDN 或对象存储回源,注意别把真实 IP 写进页面报错信息里。
另外,邮件服务(MX 记录)不能走 Cloudflare 代理,必须保持灰色,否则收不到信。子域名如果直接暴露源站,也会成为突破口,建议一并代理或干脆不解析。
四、验证是否真的隐藏成功
配完后做两件事确认。第一,用第三方工具(如 ping 或在线 DNS 查询)看域名解析结果,应全是 Cloudflare IP。第二,直接访问源站 IP 的 80/443 端口,应该连接超时或被拒绝,说明防火墙生效。
curl -I http://你的源站IP
# 期望:Connection timed out 或 Connection refused
如果还能返回 200,说明防火墙没配好,真实 IP 依然暴露。把这一步做完,Cloudflare 的加速和 IP 隐藏才算真正落地。

