如何彻底防止源站IP泄露(Nginx+防火墙方案)

问题背景

  1. 即使Nginx设置了80/443端口返回444,用http://ip:443访问仍会暴露Nginx的400错误页
  2. 这会泄露服务器在线状态和使用Nginx的信息

终极解决方案

防火墙白名单模式:只允许Cloudflare的IP段访问80/443端口


零中断更新脚本(适合宝塔/手动用户)

#!/bin/bash
# 功能:安全更新Cloudflare IP白名单(不影响其他端口规则)

# 1. 获取最新CF IP列表
cf_v4=$(curl -s https://www.cloudflare.com/ips-v4)
cf_v6=$(curl -s https://www.cloudflare.com/ips-v6)

# 2. 给新规则打标记(避免误删)
marker="cf-$(date +%s)"

# 3. 先添加新规则(IPv4+IPv6)
for ip in $cf_v4 $cf_v6; do
    ufw allow proto tcp from $ip to any port 80 comment $marker
    ufw allow proto tcp from $ip to any port 443 comment $marker
done

# 4. 等待新规则生效
sleep 2

# 5. 删除旧规则(保留刚添加的)
ufw status numbered | grep -E '80\/tcp|443\/tcp' | grep -v "$marker" \
| awk -F'[][]' '{print $2}' | sort -rn | xargs -I{} ufw --force delete {}

# 6. 设置默认拒绝(如果尚未设置)
ufw status | grep -q "DENY.*80" || ufw deny 80/tcp
ufw status | grep -q "DENY.*443" || ufw deny 443/tcp

echo "✅ 安全更新完成!80/443端口仅允许Cloudflare访问"

使用建议

  1. 宝塔用户:放入「计划任务」每周自动更新
  2. 手动用户:保存为/usr/local/bin/cf-firewallchmod +x

常见问题解答

Q1:为什么不用CF隧道?

  • ✔️ 优点:完全隐藏源站
  • ❌ 缺点:部分地区会阻断(特别是国内)

Q2:为什么不能固定回源IP?

因为Cloudflare实际回源IP ≠ 网站解析IP,必须放行全部CF IP段

Q3:WARP代理能绕过吗?

不能!因为:

  1. WARP使用的IP不在CF官方公布的IP段中
  2. 防火墙会直接拦截非白名单IP

Q4:终极防御方案?

graph LR
A[用户] -->|只允许CF IP| B[反代服务器]
B -->|专用IP白名单| C[源站]
C -->|IPv6回源| B
  1. 反代机做WAF+CF接入
  2. 源站仅允许反代机IP访问
  3. 可用IPv6回源增加隐蔽性

总结

当前方案已能防御:

  • 直接扫描源站IP
  • Nginx版本泄露
  • WARP代理探测
  • 非CF官方IP的访问

如果还被穿透,建议:

  1. 上Tengine混淆指纹
  2. 启用IPv6专属回源通道
  3. 反代机+严格白名单组合
经实测和官方文档验证,这是目前最可靠的方案之一。除非攻击者能破解Cloudflare的IP体系,否则你的源站就是安全的!

标签: Cloudflare, 防火墙, 80, 443, 防止源站泄露

上一篇: Alist+Emby+Strm+302 实现免挂载直连播放
下一篇: 没有了

添加新评论