想给网站加速,又不想暴露服务器真实 IP,Cloudflare 免费套餐就能做到。核心操作是把域名 NS 记录改到 Cloudflare,开启代理(小黄云),再配合防火墙规则堵住源站 IP 泄露的漏洞。下面按步骤来。
一、接入 Cloudflare 并开启代理
登录 Cloudflare,添加你的域名,选择 Free 计划。然后到你的域名注册商后台,把 NS 记录改成 Cloudflare 分配的两个地址,例如:
dana.ns.cloudflare.com
rob.ns.cloudflare.com
等生效后,进入 DNS 管理页面,添加一条 A 记录指向你服务器的真实 IP。关键一步:点击记录旁边的橙色云朵图标,让它变成已代理状态(小黄云)。这样流量才会先经过 Cloudflare,源站 IP 不会出现在 DNS 查询结果里。
如果网站有子域名,比如 blog.example.com,也建议同样开启代理。但邮件、FTP 等非 HTTP 服务不要开代理,否则会断连。
二、配置 SSL 与强制 HTTPS
Cloudflare 提供免费 SSL 证书,但模式选错会导致回源错误。进入 SSL/TLS 设置:
- 源站有有效证书:选“完全(严格)”,最安全。
- 源站只有自签名证书:选“完全”,但建议尽快换成 Let’s Encrypt 证书。
- 源站没证书:选“灵活”,但这样 Cloudflare 到源站是明文,有被中间人窃听风险,不推荐。
然后在“边缘证书”里开启“始终使用 HTTPS”和“自动 HTTPS 重写”,把 HTTP 请求强制跳转到 HTTPS。
如果源站是 Nginx,记得在配置里放行 Cloudflare 的 IP 段,否则获取不到真实访客 IP。可以用 Cloudflare 官方提供的脚本更新:
# 下载并自动更新 Cloudflare IP 列表
curl -s https://api.cloudflare.com/client/v4/ips | jq -r '.result.ipv4_cidrs[]' > /etc/nginx/cloudflare_ipv4.conf
然后在 Nginx 的 http 块中引入这个文件,并用 real_ip_header 还原客户端 IP。
三、防止源站 IP 泄露
开了小黄云不代表真实 IP 就绝对安全。攻击者可以通过扫描全网 IP、查看历史 DNS 记录、直接访问源站 IP 来找到你。所以必须做几件事:
- 防火墙只放行 Cloudflare IP: 在服务器防火墙(如 ufw、iptables)里,只允许 Cloudflare 的 IP 段访问 80 和 443 端口,其他 IP 一律拒绝。这样即使别人知道你的 IP,也无法直接访问。
- 关闭不必要的端口: 只开 80、443 和 SSH 管理端口,SSH 建议改端口并限制来源 IP。
- 检查历史 DNS 记录: 用 securitytrails 等工具查一下域名过去是否解析过真实 IP,如果有,考虑换 IP 或联系服务商。
- 避免在邮件头、SSL 证书里暴露: 源站 SSL 证书不要包含真实 IP 的 SAN,发信服务器不要用同一台机器。
以 ufw 为例,只允许 Cloudflare 的 IPv4 段访问 443:
for ip in $(curl -s https://api.cloudflare.com/client/v4/ips | jq -r '.result.ipv4_cidrs[]'); do
ufw allow from $ip to any port 443 proto tcp
done
ufw deny 443/tcp
注意顺序:先 allow 再 deny,否则会把自己也挡在外面。IPv6 段同理,用 ipv6_cidrs 字段。
四、验证与常见问题
配置完成后,用以下命令验证是否生效:
dig +short example.com
# 应返回 Cloudflare 的 IP,而不是你的服务器 IP
curl -I https://example.com
# 响应头应包含 cf-ray 和 server: cloudflare
如果发现返回的还是源站 IP,检查 DNS 记录是否开启了代理,或者本地 DNS 缓存未刷新。如果网站打不开,先临时把 SSL 模式改成“灵活”测试,确认回源是否正常,再逐步切回严格模式。
最后提醒:Cloudflare 免费版不提供中国内地节点,国内访问速度可能不如预期,但隐藏 IP 和基础防护完全够用。付费的 Argo 或企业版可以进一步优化线路。

