跳转至正文内容

独立技术知识论坛 主机玩家与运维交流社区 • 与德国 netcup GmbH 无官方隶属关系。

NETCUP GUIDE
知识论坛 · 实时优惠码池
运维教程 难度:初级入门 耗时:20 分钟 // 阅读约 16 分钟 • 核验于

如何在 Netcup 上配置 Cloudflare(Full Strict 严格 SSL、真实访客 IP 还原与源站 mTLS 防火墙锁定)

将 Cloudflare 的全球 Anycast CDN 与 Web 应用防火墙(WAF)部署在您的 Netcup VPS 或 Root Server 前端,不仅可以将静态图片、CSS/JS 缓存在全球 300 多个边缘节点以大幅降低跨洲访问延迟,还能有效隐藏您的 Netcup 源站公网 IP。然而,许多个人与企业用户在接入 Cloudflare 时常会陷入三个工程误区:一是误用“灵活(Flexible)”SSL 模式(导致 Cloudflare 到纽伦堡/维也纳机房之间全程使用明文 HTTP 传输并引发无限重定向循环);二是未在 Nginx 中配置 RealIP 还原(导致访问日志全部变成 Cloudflare 节点 IP,甚至让 Fail2ban 误封整个 Cloudflare 机房);三是未在源站限制非 Cloudflare 流量直接访问 80/443 端口(导致攻击者直接扫描源站 IP 绕过 WAF)。本手册将逐一解决这三个核心工程问题。

楼主 (OP) // 实测发起人 Marcus Vance 首席云基础设施架构师(欧洲 KVM 与网络工程)
版主复核 // 共同维护 Elena Rostova 高级 Linux 系统与安全审计工程师
帖子状态 // 最后修订 社区核查规范 →
版主按语 // 实测环境与社区透明说明 本教程基于 Netcup 客户控制面板(CCP)域名 Nameserver 委派流程、Cloudflare 官方 IPv4/IPv6 边缘节点 CIDR 列表以及 Nginx ngx_http_realip_module 模块实测验证。

环境要求 // 前置条件清单

检查清单
  • ✓ 一台在 80 与 443 端口运行 Nginx 或 Caddy 的 Netcup VPS(如 VPS 500 G12.5 或 VPS 1000 G12.5)或 Root Server(如 RS 1000 G12.5)
  • ✓ 一个注册在 Netcup(或第三方注册商)的独立域名,以及一个免费的 Cloudflare 账户

核心技术结论 (Key Takeaways)

核心摘要
  • 01 严禁使用 Cloudflare 的“Flexible(灵活)”SSL 模式——它不仅会导致 HTTPS 重定向死循环,还会在公网上明文传输回源流量!请务必开启 Full (Strict) 完全(严格) 模式,配合 Let’s Encrypt 证书或 15 年有效期的 Cloudflare Origin CA 源站证书。
  • 02 部署每周自动更新的 /usr/local/sbin/update-cloudflare-realip.sh 脚本生成 /etc/nginx/conf.d/cloudflare-realip.conf,确保 Nginx 日志、后端应用以及 Fail2ban 能够准确获取访客的真实公网 IP(CF-Connecting-IP)。
  • 03 开启 Authenticated Origin Pulls(经过身份验证的源站拉取 / 双向 mTLS) 或在防火墙中仅允许 Cloudflare 官方 IPv4/IPv6 网段访问 80/443 端口,让全网 IP 扫描器无法绕过 Cloudflare 直接探测您的 Netcup 源站。
📑 本文目录导航(共 3 节) ▼
§ 01

第一步:在 Netcup CCP 面板修改域名权威 Nameserver 并配置双栈 DNS 解析

如果您的域名注册在 Netcup 旗下(包括 Netcup Webhosting 虚拟主机套餐附带的 .de 包含域名),请先登录 Netcup 客户控制面板(customercontrolpanel.de,简称 CCP)→ Domains → 选择对应域名 → Name Server(域名服务器),将模式切换为 Own name servers(自定义域名服务器),并填入 Cloudflare 为您分配的两个权威 NS 地址(例如 ada.ns.cloudflare.com 与 bob.ns.cloudflare.com)。由于 Netcup 的 AS197540 核心骨干路由器在德国法兰克福 DE-CIX 与奥地利维也纳 VIX 交换中心同 Cloudflare 建立了高带宽直连对等互联(Peering),Cloudflare 欧洲边缘节点回源至 Netcup 纽伦堡与维也纳机房的 RTT 延迟通常低于 2 毫秒。

重要 DNSSEC 安全提示:如果您的域名此前在 Netcup 默认 DNS(root-dns.netcup.net)上开启过 DNSSEC 签名,在修改 Nameserver 之前,请务必先在 CCP 面板中关闭 DNSSEC 并等待约 15 至 30 分钟让注册局(如 .de 域名的管理机构 DENIC)移除旧的 DS 委派签名记录。如果在旧 DS 记录尚未从顶级域注册局清除时就直接把 NS 切往 Cloudflare,全球启用了 DNSSEC 严格校验的公共递归解析器(如 1.1.1.1 与 8.8.8.8)会判定签名链断裂并对您的域名直接返回 SERVFAIL 错误。待域名在 Cloudflare 正式激活后,再从 Cloudflare 后台重新开启 DNSSEC 并将新生成的 DS 参数填回 CCP 面板即可。

在 Cloudflare DNS 面板中添加源站记录时,建议同时为您网站的根域名(@)和 www 子域名添加指向 Netcup 服务器 IPv4 地址的 A 记录以及指向 Netcup /64 子网主地址的 AAAA 记录,并将两者的代理状态均设为 已代理(Proxied / 橙色云朵)。Cloudflare 边缘节点具备天然的 IPv4/IPv6 双栈协议转换能力:无论终端访客使用的是纯 IPv6 移动网络还是传统 IPv4 宽带,Cloudflare 都能在边缘就近终结连接并通过最优路径回源。

最后,请妥善隔离非 Web 协议的解析记录。Cloudflare 默认的橙色云朵反向代理仅转发标准 HTTP/HTTPS Web 端口(如 80、443、8443、2053 等),不会转发 TCP 22(SSH)、465/587(SMTP)或 5432(PostgreSQL)端口的原始流量。如果您习惯通过域名连接 SSH,请按照下方清单单独创建一条关闭代理(灰色云朵)的子域名记录:

  • ▪ IPv4 主记录:类型选择 A,名称填 @(以及 www),内容填您的 Netcup IPv4 /32 公网地址(如 203.0.113.10),代理状态开启 已代理(Proxied / 橙色云朵)。
  • ▪ IPv6 主记录:类型选择 AAAA,名称填 @(以及 www),内容填您 Netcup /64 子网中的主 IPv6 地址(如 2a03:4000:60:1234::1),代理状态同样开启 已代理(Proxied / 橙色云朵)。
  • ▪ SSH 管理连接专用避让规则:由于 Cloudflare 免费版的橙色云朵 HTTP 代理默认仅转发 80/443 等 Web 端口而不转发 22 端口的 SSH 流量,日常连接 SSH 请直接使用服务器的原始 IPv4/IPv6 地址,或者单独添加一条关闭代理(仅限 DNS / 灰色云朵)的 ssh.example.com 子域名记录。
§ 02

第二步:配置 Cloudflare “Full (Strict)” 严格加密模式与双向 mTLS 源站拉取认证

进入 Cloudflare 仪表盘的 SSL/TLS → 概述(Overview),将加密模式强制锁定为 完全(严格)— Full (Strict)。切勿将生产站点留在 Flexible(灵活) 模式:在 Flexible 模式下,虽然访客浏览器到 Cloudflare 边缘节点之间显示为 HTTPS 绿锁,但 Cloudflare 边缘节点到您德国/奥地利 Netcup 服务器之间的跨国回源链路却是通过 80 端口以明文 HTTP 裸奔传输的!更糟糕的是,Flexible 模式始终向源站发送 X-Forwarded-Proto: http,一旦您的源站 Nginx 或 WordPress 开启了强制 HTTPS 跳转,就会立刻陷入无限 301 Moved Permanently 重定向死循环(ERR_TOO_MANY_REDIRECTS)。

在 Full (Strict) 模式下,Cloudflare 边缘节点不仅会使用 TLS 1.3 加密回源连接,还会严格校验您 Netcup 服务器 443 端口出示的 SSL 证书是否由受信任的公共 CA(如 Let’s Encrypt)签发、是否在有效期内且 SAN 域名完全匹配。如果您的网站流量 100% 经过 Cloudflare 代理,您还可以在 SSL/TLS → 源服务器(Origin Server)→ 创建证书 中免费生成一张长达 15 年有效期的 Cloudflare Origin CA 源站专用证书部署在 Nginx 上,从而省去每 90 天续期一次 ACME 证书的维护工作。

然而,仅仅配置单向 TLS 证书还不足以保护源站隐身。由于全网 IPv4 地址空间有限,像 Censys 与 Shodan 这样的安全测绘引擎每天都在全网扫描 443 端口的 TLS 证书,一旦扫描器发现您的 Netcup IP 返回了包含 example.com 域名的服务端证书,您的真实源站 IP 就会被公开记录在案。攻击者随后只需构造 curl --resolve example.com:443:203.0.113.10 请求,即可绕过 Cloudflare WAF 防火墙直接向您的 Netcup 服务器发起 CC 攻击或漏洞注入。

为了从密码学层面封堵直接扫 IP 绕过 WAF 的路径,我们强烈建议在 Nginx 中启用 Authenticated Origin Pulls(经过身份验证的源站拉取,即双向 mTLS 认证)。启用 ssl_verify_client on; 并加载 Cloudflare 官方客户端根证书(authenticated_origin_pull_ca.pem)后,任何未在 TLS 握手阶段出示合法 Cloudflare 边缘节点客户端证书的直接 IP 请求都会被 Nginx 在内核态/SSL 层直接拒绝。同时,建议在 Cloudflare 后台开启 Smart Tiered Cache(智能分层缓存),让全球边缘节点统一通过邻近法兰克福或维也纳的上层核心节点(Upper-Tier PoP)回源,将源站回源请求量再降低 60% 以上:

Cloudflare SSL/TLS 加密模式与 Netcup 源站安全性对比矩阵
Cloudflare SSL 模式Cloudflare 到 Netcup 回源链路源站证书合法性校验Netcup 生产环境安全评估结论
Off(关闭)/ Flexible(灵活)明文 HTTP(80 端口裸奔传输)完全不校验(易受中间人劫持与重定向死循环)严禁使用 —— 极度不安全且破坏 HTTPS 应用
Full(完全)加密 HTTPS(443 端口)允许任何自签名或过期证书,不校验域名匹配不推荐 —— 无法防御伪造源站的中间人攻击
Full (Strict) 完全(严格)加密 TLS 1.3(443 端口)严格验证 Let’s Encrypt 或 Cloudflare 15 年源站证书推荐标准基线 —— 实现端到端可信加密传输
Full (Strict) + 源站拉取验证 (mTLS)双向 TLS 1.3(服务端 + 客户端双证书)同时验证源站证书与 Cloudflare 客户端身份证书最高安全标准 —— 阻断直接扫 IP 绕过 WAF
下载 Cloudflare 官方源站拉取根证书并在 Nginx 中开启双向 mTLS 校验
bash
# 下载 Cloudflare 官方维护的 Authenticated Origin Pull 客户端根 CA 证书
sudo mkdir -p /etc/nginx/certs
sudo curl -fsSL https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem \
  -o /etc/nginx/certs/cloudflare-origin-pull-ca.pem

# 在您的 /etc/nginx/sites-available/example.com.conf 配置文件的 server { listen 443 ssl; ... } 块中加入:
# ssl_client_certificate /etc/nginx/certs/cloudflare-origin-pull-ca.pem;
# ssl_verify_client on;

sudo nginx -t && sudo systemctl reload nginx

命令与参数详解: 下载 Cloudflare 官方维护的客户端 CA 证书至 /etc/nginx/certs/cloudflare-origin-pull-ca.pem,在站点配置中取消注释两行 ssl_client_certificate 与 ssl_verify_client on; 后,任何直接扫描您 Netcup IP 443 端口的爬虫都会立即收到 400 Bad Request (No required SSL certificate was sent) 拒绝响应。

预期终端输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
§ 03

第三步:在 Nginx 中全自动还原真实访客 IP 地址(ngx_http_realip_module)

当流量经过 Cloudflare 橙色云朵代理后,由于 Cloudflare 在三层/四层充当了反向代理,到达您 Netcup 网卡的每一个 TCP 数据包的源 IP 地址都会变成 Cloudflare 边缘节点的 IP(如 172.64.0.0/13、104.16.0.0/12 或 2606:4700::/32)。在默认配置下,Nginx 的内置变量 $remote_addr 直接取自 TCP 套接字的对端地址,这会导致您的 /var/log/nginx/access.log 访问日志里记录的全是 Cloudflare 法兰克福或维也纳节点的 IP。

如果不修正这一行为,一旦您在服务器上启用了 Nginx limit_req_zone $binary_remote_addr 速率限制或 Fail2ban 日志监控监狱,就会引发严重的生产事故:只要有一名恶意攻击者触发了登录限流或密码爆破阈值,Nginx 或 UFW 就会把当前回源的 Cloudflare 边缘节点 IP 当作攻击源直接封禁——瞬间导致成千上万经过同一个 Cloudflare 机房节点访问您网站的正常用户全部出现 522 Connection Timed Out 断网!

切勿通过在后端 PHP 或 Node.js 代码中直接无条件信任 $_SERVER['HTTP_CF_CONNECTING_IP'] 或 X-Forwarded-For 请求头来解决此问题,因为任何绕过 CDN 直连源站的攻击者都可以轻易通过 curl -H "CF-Connecting-IP: 1.2.3.4" 伪造任意 IP。正确的做法是利用 Nginx 原生编译的 ngx_http_realip_module 模块:通过 set_real_ip_from 显式列出 Cloudflare 官方公布的所有 IPv4 与 IPv6 网段,并配合 real_ip_header CF-Connecting-IP;,指示 Nginx 仅在底层 TCP 连接确实来自受信任的 Cloudflare 边缘网段时,才将 $remote_addr 与 $binary_remote_addr 覆写为 CF-Connecting-IP 头中的真实客户端地址。

下方自动化脚本中配置的 real_ip_recursive on; 参数在处理多级代理链路时尤为关键:当请求依次经过 Cloudflare 边缘节点与您宿主机内部的网关容器时,开启递归解析会让 Nginx 从右向左依次剥离所有位于 set_real_ip_from 授信列表中的代理服务器地址,最终精准提取出最左侧第一个非授信代理的真实客户端公网 IP。请在服务器上部署并运行该脚本:

/usr/local/sbin/update-cloudflare-realip.sh (全自动生成并更新 Nginx Cloudflare RealIP 配置)
bash
cat << 'EOF' | sudo tee /usr/local/sbin/update-cloudflare-realip.sh
#!/usr/bin/env bash
set -euo pipefail

CONF_FILE="/etc/nginx/conf.d/cloudflare-realip.conf"
TMP_FILE="$(mktemp)"

echo "# 自动生成的 Cloudflare RealIP 授信网段配置 ($(date -u +%Y-%m-%dT%H:%M:%SZ))" > "${TMP_FILE}"

for ip in $(curl -fsSL https://www.cloudflare.com/ips-v4); do
  echo "set_real_ip_from ${ip};" >> "${TMP_FILE}"
done

for ip6 in $(curl -fsSL https://www.cloudflare.com/ips-v6); do
  echo "set_real_ip_from ${ip6};" >> "${TMP_FILE}"
done

echo "real_ip_header CF-Connecting-IP;" >> "${TMP_FILE}"
echo "real_ip_recursive on;" >> "${TMP_FILE}"

mv "${TMP_FILE}" "${CONF_FILE}"
chmod 0644 "${CONF_FILE}"
nginx -t && systemctl reload nginx
EOF

sudo chmod +x /usr/local/sbin/update-cloudflare-realip.sh
sudo /usr/local/sbin/update-cloudflare-realip.sh

命令与参数详解: 从 Cloudflare 官方接口拉取全量 IPv4(ips-v4)与 IPv6(ips-v6)网段,写入 set_real_ip_from 授信指令,指示 Nginx 仅在连接确实来自 Cloudflare 官方网段时才将 $remote_addr 替换为 CF-Connecting-IP 中的真实访客 IP。

预期终端输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
切勿在未验证来源 CIDR 的情况下直接读取 HTTP_CF_CONNECTING_IP

如果后端 PHP/Node.js 代码跳过 Nginx set_real_ip_from 校验而直接读取请求头中的 CF-Connecting-IP,攻击者只需直接向您的源站发送伪造的 CF-Connecting-IP: 127.0.0.1 头部即可轻松绕过登录限流与 IP 黑名单。

常见故障排查方案

排障手册

[故障现象] 开启 Cloudflare 代理后访问网站显示 Error 521: Web Server Is Down 或 Error 522: Connection Timed Out

根本原因: Netcup 服务器上的 Nginx 未监听 443 端口,或者服务器上的 UFW / Fail2ban / Netcup SCP 防火墙拦截了 Cloudflare 的回源 IP 段。

解决方案: 检查确认 80/tcp 与 443/tcp 在 Netcup SCP 防火墙与 UFW 中均处于放行状态,并运行 sudo fail2ban-client status 排查是否在启用 cloudflare-realip.conf 之前误将 Cloudflare 的 172.64.0.0/13 或 104.16.0.0/12 节点 IP 封禁。

[故障现象] Cloudflare 页面报错 Error 526: Invalid SSL Certificate(无效的 SSL 证书)

根本原因: Cloudflare 加密模式已正确设置为 Full (Strict),但您 Netcup 源站 Nginx 当前配置的仍是 Ubuntu 默认自签名证书(snakeoil)或已过期的证书。

解决方案: 在 Nginx 中部署一张 15 年有效期的 Cloudflare Origin CA 源站证书,或者运行 sudo certbot renew 更新 Let’s Encrypt 证书并确保域名完全匹配。

[故障现象] 开启 Cloudflare 橙色云朵代理后,后台上传超过 100 MB 的大文件或视频时报错 413 Payload Too Large

根本原因: Cloudflare 免费版(Free)与专业版(Pro)在边缘节点强制限制单次 HTTP POST 请求体最大不能超过 100 MB。

解决方案: 在前端应用中改用分片上传(Chunked Upload / tus.io 协议)、使用预签名 URL 直传对象存储(S3/R2),或者为管理员上传后台单独配置一个不经过代理(灰色云朵)的子域名。

常见问题解答 (FAQ)

权威解答

我的域名注册在 Netcup(或者是 Webhosting 套餐附带的 .de 包含域名),可以在不转出域名的情况下使用 Cloudflare 吗?

完全可以!您不需要将域名注册商从 Netcup 转走(包括包含在 Webhosting 2000 或 Webhosting 4000 套餐中的 .de 域名)。只需登录 Netcup CCP 面板,在域名设置中将 Nameserver 修改为 Cloudflare 提供的两个权威 NS 地址即可免费使用 Cloudflare CDN 与 WAF。

开启 Cloudflare 橙色云朵代理后,服务器上 Certbot 的 HTTP-01 自动续期还能正常工作吗?

可以正常工作,只要您的 Nginx 80 端口配置保留了 /.well-known/acme-challenge/ 路径转发即可;或者您也可以安装 python3-certbot-dns-cloudflare 插件改用 DNS-01 API 验证,甚至直接换用 15 年免续期的 Cloudflare Origin CA 源站证书。

在入门级的 Netcup VPS nano G11.5s(2 GB ECC 内存)前面接入 Cloudflare 效果明显吗?

效果非常显著!将静态图片、音视频、CSS/JS 以及高消耗的 TLS 握手计算卸载到 Cloudflare 全球边缘节点后,即便是配备 2 GB ECC 内存的紧凑型 VPS nano G11.5s,也能把宝贵的本地内存与 CPU 周期集中用于处理动态数据库请求,从容应对突发的热点访问洪峰。

如何设置定时任务让 update-cloudflare-realip.sh 自动同步最新的 Cloudflare IP 列表?

只需执行 echo "15 3 * * 1 root /usr/local/sbin/update-cloudflare-realip.sh >/dev/null 2>&1" | sudo tee /etc/cron.d/cloudflare-realip,系统就会在每周一凌晨 03:15 UTC 自动拉取最新网段并无感重载 Nginx。

在 Cloudflare 开启橙色云朵代理后,如何防止 WordPress 后台或动态 API 被错误缓存?

默认情况下 Cloudflare 仅缓存静态后缀文件(.css、.js、.png 等)而不缓存 HTML。如果您配置了激进的整站 HTML 缓存规则,请务必在 Cloudflare Caching → Cache Rules 中添加一条最高优先级的 Bypass 绕过规则:当 URI 路径包含 /wp-admin、/wp-login.php 或 /api/,或者请求 Cookie 中包含 wordpress_logged_in_ 与 woocommerce_items_in_cart 时,强制设为 Bypass Cache。

参考资料 // 官方技术文档与核验来源

延伸阅读 // 核心架构评测与买前必读

领取优惠码 →