公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-014-CDN安全与防护
# Day 13: CDN 安全与防护 > 网络安全系列第 13 天 | 预计阅读时间:35 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [引言](#引言) 2. [CDN 基础架构](#cdn 基础架构) 3. [CDN 安全优势](#cdn 安全优势) 4. [CDN 配置风险](#cdn 配置风险) 5. [源站保护策略](#源站保护策略) 6. [CDN 绕过攻击](#cdn 绕过攻击) 7. [缓存投毒攻击](#缓存投毒攻击) 8. [HTTPS 配置安全](#https 配置安全) 9. [实验环境搭建](#实验环境搭建) 10. [实战演练](#实战演练) 11. [防护策略与最佳实践](#防护策略与最佳实践) 12. [总结与思考](#总结与思考) 13. [参考资料](#参考资料) --- ## 引言 ### CDN 的安全价值 内容分发网络(CDN)不仅是加速工具,更是现代 Web 安全架构的核心组件。根据 Akamai 2024 年报告,全球 90% 的互联网流量经过 CDN,CDN 承载的安全责任日益重大。 **核心安全价值**: - **DDoS 防护**:Tbps 级别攻击缓解能力 - **SSL/TLS 终止**:集中证书管理,统一安全策略 - **隐藏源站**:IP 地址不暴露,减少攻击面 - **WAF 集成**:应用层攻击防护 - 统计 **威胁情报**:全球攻击数据共享 **真实案例**: - **2022 年 AWS Shield 防护**:缓解史上最大 DDoS 攻击(2.4 Tbps) - **2021 年 Cloudflare 漏洞**:配置错误导致多个网站源站 IP 泄露 - **2020 年 Akamai 缓存投毒**:攻击者污染 CDN 缓存,影响数百万用户 ### CDN 市场规模 ``` 全球 CDN 市场(2024): - 市场规模:380 亿美元 - 年增长率:18% - 主要厂商: * Akamai (25%) * Cloudflare (18%) * Amazon CloudFront (15%) * 阿里云 CDN (12%) * 其他 (30%) 安全服务占比: - DDoS 防护:35% - WAF: 28% - Bot 管理:20% - 其他:17% ``` --- ## CDN 基础架构 ### CDN 工作原理 ``` 用户请求流程: 1. 用户访问 www.example.com ↓ 2. 本地 DNS 解析 ↓ 3. 权威 DNS 返回 CDN CNAME ↓ 4. CDN GSLB 选择最优边缘节点 (基于地理位置、负载、健康状况) ↓ 5. 用户连接到边缘节点 ↓ 6. 边缘节点检查缓存 - 命中:直接返回 - 未命中:回源获取 ↓ 7. 返回内容给用户 同时缓存到边缘节点 ``` ### CDN 架构组件 ``` ┌─────────────────────────────────────────────────────┐ │ 用户(全球分布) │ └─────────────────────┬───────────────────────────────┘ │ DNS 查询 ┌────────────▼────────────┐ │ 权威 DNS │ │ (Route53, Cloud DNS) │ └────────────┬────────────┘ │ CNAME 返回 ┌────────────▼────────────┐ │ GSLB (全局负载均衡) │ │ 选择最优边缘节点 │ └────┬────────────┬───────┘ │ │ ┌─────────▼───┐ ┌────▼────────┐ │ 边缘节点 1 │ │ 边缘节点 2 │ │ (北京) │ │ (上海) │ │ 缓存服务器 │ │ 缓存服务器 │ └─────┬───────┘ └─────┬───────┘ │ │ └────┬──────┬────┘ │ │ │ └──→ 缓存命中 → 返回 │ └──→ 缓存未命中 │ │ 回源请求 ▼ ┌────────────────┐ │ 源站 │ │ (Origin) │ │ 192.168.1.100 │ └────────────────┘ ``` ### 缓存机制详解 ``` 缓存键(Cache Key)组成: - URL 路径 - 查询参数 - Host 头 - Cookie(可选) - 请求头(可选) 缓存策略: - TTL(Time To Live):缓存有效期 - stale-while-revalidate:过期后宽限期 - stale-if-error:错误时使用过期缓存 示例: Cache-Control: public, max-age=3600, stale-while-revalidate=300 - 缓存 1 小时 - 过期后 5 分钟内可提供过期内容 - 后台异步刷新 ``` --- ## CDN 安全优势 ### DDoS 防护能力 #### 防护层级 ``` Layer 3/4 防护(网络层): - SYN Flood 防护 - UDP Flood 防护 - ICMP Flood 防护 - 反射放大攻击防护 - 防护能力:Tbps 级别 Layer 7 防护(应用层): - HTTP Flood 防护 - CC 攻击防护 - Slowloris 防护 - 防护能力:百万级 QPS ``` #### 防护机制 ``` 1. 流量清洗 - 异常流量识别 - 恶意 IP 过滤 - 行为分析 - 机器学习检测 2. 速率限制 - IP 级别限流 - 地理位置限流 - URL 级别限流 - 动态阈值调整 3. 挑战 - 响应 - JavaScript 挑战 - Cookie 挑战 - CAPTCHA 验证 - 指纹识别 4. 信誉评分 - IP 信誉库 - ASN 信誉 - 地理位置风险 - 历史行为分析 ``` ### WAF 集成优势 ``` 云 WAF vs 自建 WAF: 云 WAF 优势: ✓ 零部署:开箱即用 ✓ 自动更新:规则实时同步 ✓ 全球情报:共享威胁数据 ✓ 弹性扩展:按需付费 ✓ 专业运维:24/7 支持 自建 WAF 优势: ✓ 数据可控:日志本地存储 ✓ 定制规则:深度定制 ✓ 低延迟:内网部署 ✓ 合规要求:数据不出境 典型云 WAF 功能: - OWASP Top 10 防护 - 0day 虚拟补丁 - Bot 管理 - API 安全 - 敏感数据保护 ``` ### 隐藏源站价值 ``` 源站暴露风险: ✗ DDoS 直接攻击源站 ✗ 漏洞扫描和利用 ✗ 端口扫描和枚举 ✗ 应用层攻击 ✗ 数据泄露 CDN 保护机制: ✓ 源站 IP 不公开 ✓ 仅允许 CDN IP 访问 ✓ 攻击流量在边缘缓解 ✓ 源站负载均衡 ✓ 故障自动切换 ``` --- ## CDN 配置风险 ### 常见配置错误 #### 1. 源站 IP 泄露 ``` 泄露途径: a) 历史 DNS 记录 - 使用 CDN 前的 A 记录 - 工具:SecurityTrails, DNSDumpster - 防护:使用 CDN 后更换源站 IP b) 邮件服务器暴露 - MX 记录指向源站 - 邮件头包含源站 IP - 防护:邮件服务分离 c) 其他服务暴露 - FTP、SSH 直接暴露 - 测试环境未保护 - 防护:全面审查暴露面 d) SSL 证书透明度 - 证书申请记录 - 工具:crt.sh - 防护:使用 CDN SSL ``` **检测方法**: ```bash # 1. 查询历史 DNS # https://securitytrails.com/ # https://dnsdumpster.com/ # 2. 检查 SSL 证书 # https://crt.sh/?q=example.com # 3. 全网扫描 # https://shodan.io/ # https://censys.io/ # 4. 检查邮件头 dig MX example.com # 检查邮件服务器 IP 是否为源站 # 5. 直接访问测试 curl -H "Host: example.com" http://源站 IP # 如果返回内容,说明源站暴露 ``` #### 2. 缓存配置错误 ``` 风险场景: a) 敏感信息缓存 - 用户个人信息 - 认证令牌 - 管理页面 - 支付信息 b) 个性化内容缓存 - 用户专属页面 - 购物车内容 - 推荐内容 c) 动态内容缓存 - API 响应 - 实时数据 - 股票价格 案例: 2019 年,某电商网站缓存了包含用户名的页面, 导致所有用户看到其他用户的个人信息。 ``` **防护配置**: ```nginx # 不缓存敏感页面 location /user/ { proxy_cache_bypass $cookie_session; proxy_no_cache $cookie_session; add_header Cache-Control "no-store, no-cache, must-revalidate"; } location /admin/ { proxy_cache_bypass 1; proxy_no_cache 1; add_header Cache-Control "private, no-cache"; } # 仅缓存静态资源 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control "public, immutable"; } ``` #### 3. SSL 配置不当 ``` 常见问题: ✗ 启用 TLS 1.0/1.1(已废弃) ✗ 使用弱密码套件 ✗ 证书链不完整 ✗ 未启用 HSTS ✗ 未启用 OCSP Stapling ✗ 会话票据未禁用 检查工具: - SSL Labs: https://www.ssllabs.com/ssltest/ - SSL Decoder: https://ssl-decoder.org/ - TestSSL: https://testssl.sh/ ``` --- ## 源站保护策略 ### IP 白名单配置 #### Cloudflare IP 段 ```bash # Cloudflare IPv4 段(部分) # https://www.cloudflare.com/ips-v4 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22 # iptables 配置示例 # 仅允许 Cloudflare IP 访问 80/443 端口 for ip in 173.245.48.0/20 103.21.244.0/22 ...; do iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT iptables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT done # 拒绝其他所有 iptables -A INPUT -p tcp --dport 80 -j DROP iptables -A INPUT -p tcp --dport 443 -j DROP ``` #### Nginx 源站保护 ```nginx # /etc/nginx/conf.d/origin-protect.conf # 仅允许 CDN IP 访问 geo $cdn_ip { default 0; 173.245.48.0/20 1; 103.21.244.0/22 1; 103.22.200.0/22 1; # ... 其他 CDN IP 段 } server { listen 80; server_name origin.example.com; # 拒绝非 CDN 访问 if ($cdn_ip = 0) { return 403; } # 验证自定义头(双重保护) if ($http_x_cdn_secret != "MySecretToken123") { return 403; } # 仅允许特定 Host if ($host != "origin.example.com") { return 403; } location / { proxy_pass http://backend; } } # 禁止直接通过 IP 访问 server { listen 80 default_server; server_name _; return 444; # Nginx 特殊代码,关闭连接不响应 } ``` ### 自定义验证头 ``` 配置流程: 1. CDN 配置(Cloudflare) Transform Rules → HTTP Request Headers Add Header: X-CFDN-Secret: MySecretToken123 2. 源站验证(Nginx) if ($http_x_cfdn_secret != "MySecretToken123") { return 403; } 3. 定期轮换 - 每 90 天更换一次 - 使用强随机字符串 - 自动化轮换脚本 ``` ### 云服务商保护 #### AWS CloudFront + ALB ```yaml # CloudFormation 模板 Resources: # CloudFront 分发 CloudFrontDistribution: Type: AWS::CloudFront::Distribution Properties: DistributionConfig: Origins: - Id: ALBOrigin DomainName: !GetAtt ApplicationLB.DNSName CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 CustomHeaders: - HeaderName: X-Origin-Verify HeaderValue: !Ref OriginSecret # ... 其他配置 # ALB 监听器规则 ALBListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: ListenerArn: !Ref ALBListener Priority: 1 Conditions: - Field: http-header HttpHeaderConfig: Name: X-Origin-Verify Values: - !Ref OriginSecret Actions: - Type: forward TargetGroupArn: !Ref TargetGroup ``` --- ## CDN 绕过攻击 ### 绕过技术详解 #### 1. 源站 IP 发现 ``` 攻击者工具链: a) DNS 历史查询 - SecurityTrails API - DNSDumpster - Wayback Machine b) 全网扫描 - Shodan: port:80 hostname:example.com - Censys: services.http.response.headers.Server:example - FOFA: domain="example.com" c) 证书透明度 - crt.sh - certspotter.com - 查找源站证书 d) 邮件头分析 - 发送测试邮件 - 检查 Received 头 - 提取源站 IP e) 其他服务关联 - 同一 ASN 扫描 - 同一组织证书 - 子域名枚举 ``` #### 2. 直接攻击源站 ``` 攻击流程: 1. 发现源站 IP(如上) 2. 修改本地 hosts 文件 1.2.3.4 www.example.com (1.2.3.4 是源站 IP) 3. 直接访问源站 curl http://www.example.com # 绕过 CDN 防护 4. 发动攻击 - DDoS 源站 - 漏洞利用 - 数据窃取 5. CDN 失效 - 攻击者不经过 CDN - CDN 防护被绕过 - 源站直接暴露 ``` **防护方案**: ``` 1. 源站 IP 变更 - 使用 CDN 后立即更换 - 新 IP 仅 CDN 知道 - 定期轮换 2. 云负载均衡 - 源站无公网 IP - 仅内网可达 - 通过 LB 访问 3. 多 CDN 策略 - 使用多个 CDN - 源站 IP 不同 - 分散风险 4. 持续监控 - 监控源站直接访问 - 告警异常流量 - 快速响应 ``` --- ## 缓存投毒攻击 ### 攻击原理 ``` 攻击场景: 1. 发现缓存键漏洞 - URL 参数未纳入缓存键 - Host 头未验证 - Cookie 影响缓存 2. 发送恶意请求 GET /page?param=value HTTP/1.1 Host: victim.com X-Custom-Header: malicious 3. 污染 CDN 缓存 - CDN 缓存恶意响应 - 所有用户获取污染内容 4. 攻击影响 - XSS 攻击 - 钓鱼页面 - 恶意软件分发 - 品牌损害 ``` ### 实际案例 ``` 案例 1: 参数未纳入缓存键(2018) 漏洞: CDN 配置仅缓存 URL 路径,忽略查询参数 攻击: GET /search?q=normal GET /search?q=<script>alert(1)</script> 结果: 两个请求返回相同缓存,XSS 影响所有用户 修复: 将查询参数纳入缓存键 Cache-Key: $scheme$host$uri$args ``` ``` 案例 2: Host 头投毒(2019) 漏洞: CDN 未验证 Host 头,缓存基于 Host 攻击: GET / HTTP/1.1 Host: evil.com 结果: CDN 缓存了指向 evil.com 的重定向 修复: 白名单验证 Host 头 仅缓存已知域名 ``` ### 防护配置 ```nginx # 1. 完整缓存键 proxy_cache_key "$scheme$request_method$host$request_uri"; # 2. 验证 Host 头 if ($host !~* "^(www\.)?example\.com$") { return 403; } # 3. 不缓存敏感内容 map $request_uri $skip_cache { default 0; ~*/wp-admin/ 1; ~*/user/ 1; ~*/cart/ 1; ~*/checkout/ 1; ~*preview=true 1; } proxy_cache_bypass $skip_cache; proxy_no_cache $skip_cache; # 4. 设置合理 TTL location ~* \.(html|htm)$ { proxy_cache_valid 200 5m; proxy_cache_valid 404 1m; } location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ { proxy_cache_valid 200 30d; add_header Cache-Control "public, immutable"; } # 5. 缓存清除机制 location /purge { allow 10.0.1.0/24; # 仅允许管理 IP deny all; proxy_cache_purge CACHE_ZONE "$scheme$request_method$host$request_uri"; } ``` --- ## HTTPS 配置安全 ### CDN SSL 配置 #### Cloudflare SSL 模式 ``` SSL/TLS 加密模式: 1. Off(关闭) - 无 HTTPS - 不推荐 2. Flexible(灵活) - 用户 → CDN: HTTPS - CDN → 源站:HTTP - 风险:中间人攻击 - 适用:临时过渡 3. Full(完整) - 用户 → CDN: HTTPS - CDN → 源站:HTTPS - 源站证书:自签名即可 - 推荐:最低配置 4. Full (Strict)(严格) - 用户 → CDN: HTTPS - CDN → 源站:HTTPS - 源站证书:必须公有 CA 签发 - 推荐:最佳实践 5. Edge Certificate(边缘证书) - CDN 提供证书 - 免费 SSL - 自动续期 - 推荐:中小网站 ``` ### 最佳实践配置 ```yaml # Cloudflare Page Rules 配置 # 1. 强制 HTTPS URL: http://*example.com/* Setting: Always Use HTTPS # 2. HSTS URL: https://*example.com/* Setting: Security Header Strict-Transport-Security: max-age=31536000; includeSubDomains; preload # 3. 安全头部 URL: https://*example.com/* Setting: Security Headers X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Referrer-Policy: strict-origin-when-cross-origin # 4. SSL/TLS 设置 Minimum TLS Version: 1.2 TLS 1.3: Enabled Opportunistic Encryption: On ``` --- ## 实验环境搭建 ### Varnish CDN 模拟 ```bash # 1. 安装 Varnish apt update apt install varnish varnish-dev # 2. 配置 Varnish # /etc/varnish/default.vcl vcl 4.0; backend default { .host = "127.0.0.1"; .port = "8080"; } # 缓存规则 sub vcl_recv { # 不缓存 POST 请求 if (req.method != "GET" && req.method != "HEAD") { return (pass); } # 不缓存认证用户 if (req.http.Authorization) { return (pass); } # 不缓存管理页面 if (req.url ~ "^/admin") { return (pass); } return (hash); } # 缓存响应 sub vcl_backend_response { # 静态资源缓存 30 天 if (bereq.url ~ "\.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$") { set beresp.ttl = 30d; set beresp.http.Cache-Control = "public, max-age=2592000"; } # HTML 缓存 5 分钟 if (bereq.url ~ "\.html$") { set beresp.ttl = 5m; } # 不缓存敏感内容 if (bereq.url ~ "^/user" || bereq.url ~ "^/cart") { set beresp.ttl = 0s; set beresp.http.Cache-Control = "no-store, no-cache"; } } # 添加缓存头 sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS"; } } # 3. 启动 Varnish systemctl restart varnish # 4. 测试 curl -I http://localhost # 查看 X-Cache 头 ``` ### Docker CDN 环境 ```yaml version: '3.8' services: # CDN 边缘节点(Varnish) varnish: image: varnish:6.6 ports: - "80:80" volumes: - ./default.vcl:/etc/varnish/default.vcl:ro depends_on: - origin networks: - cdn-net # 源站(Nginx) origin: image: nginx:alpine volumes: - ./origin.conf:/etc/nginx/nginx.conf:ro - ./html:/usr/share/nginx/html:ro networks: - cdn-net - backend-net # 后端应用 app: image: httpd:alpine volumes: - ./app:/usr/local/apache2/htdocs:ro networks: - backend-net networks: cdn-net: backend-net: internal: true # 内部网络,模拟源站保护 ``` --- ## 实战演练 ### 实验 1: CDN 配置检查 **目标**:检测 CDN 配置问题 **步骤**: ```bash # 1. 检查 DNS 配置 dig example.com dig www.example.com dig MX example.com # 2. 检查 CDN 响应 curl -I https://example.com # 查看 Server, Via, X-Cache 等头 # 3. 检查 SSL 配置 openssl s_client -connect example.com:443 -tls1_2 openssl s_client -connect example.com:443 -tls1_3 # 4. 使用 SSL Labs 测试 # https://www.ssllabs.com/ssltest/analyze.html?d=example.com # 目标:A+ 评级 # 5. 检查源站暴露 # 尝试直接访问源站 IP curl -H "Host: example.com" http://源站 IP # 应该被拒绝(403 或无响应) ``` ### 实验 2: 缓存规则测试 **目标**:验证缓存配置 **步骤**: ```bash # 1. 测试静态资源缓存 curl -I https://example.com/style.css # 应看到: # X-Cache: HIT (第二次请求) # Cache-Control: public, max-age=2592000 # Age: xxx (缓存时间) # 2. 测试动态内容不缓存 curl -I https://example.com/user/profile # 应看到: # Cache-Control: no-store, no-cache # X-Cache: MISS # 3. 测试缓存清除 # 清除特定 URL 缓存 curl -X PURGE https://example.com/style.css # 应返回 200 或 405(取决于配置) # 4. 测试缓存投毒防护 # 尝试不同 Host 头 curl -H "Host: evil.com" -I http://localhost # 应返回 403 Forbidden ``` ### 实验 3: 源站保护验证 **目标**:验证源站访问控制 **步骤**: ```bash # 1. 从 CDN 访问(应成功) curl -I https://example.com # 应返回 200 OK # 2. 直接访问源站(应失败) curl -H "Host: example.com" http://源站 IP # 应返回 403 Forbidden # 3. 验证自定义头 curl -H "Host: example.com" \ -H "X-CFDN-Secret: MySecretToken123" \ http://源站 IP # 应返回 200 OK # 4. 检查 iptables 规则 iptables -L INPUT -n -v | grep -E "80|443" # 应看到仅允许 CDN IP # 5. 监控日志 tail -f /var/log/nginx/access.log # 观察直接访问尝试 ``` ### 实验 4: DDoS 防护测试 **目标**:验证 CDN DDoS 防护 **步骤**: ```bash # 1. 正常压力测试 ab -n 1000 -c 50 https://example.com/ # 观察响应时间和成功率 # 2. 模拟 HTTP Flood(隔离环境) ab -n 100000 -c 500 https://example.com/ # CDN 应触发防护 # 3. 观察 CDN 仪表板 # Cloudflare: Analytics → Security # 查看攻击缓解情况 # 4. 检查源站负载 top # 源站 CPU/内存应保持稳定 # 5. 验证防护效果 # 攻击流量应在 CDN 边缘被缓解 # 源站仅接收正常流量 ``` --- ## 防护策略与最佳实践 ### CDN 安全配置清单 ``` □ DNS 配置 ✓ CNAME 接入(非 A 记录) ✓ 移除历史 DNS 记录 ✓ 邮件服务分离 □ SSL/TLS 配置 ✓ TLS 1.2+ 仅 ✓ 强密码套件 ✓ HSTS 启用 ✓ OCSP Stapling ✓ 证书自动续期 □ 源站保护 ✓ IP 白名单(仅 CDN) ✓ 自定义验证头 ✓ 禁止直接 IP 访问 ✓ 源站域名隐藏 □ 缓存安全 ✓ 敏感内容不缓存 ✓ 完整缓存键 ✓ Host 头验证 ✓ 缓存清除机制 □ WAF 配置 ✓ OWASP Top 10 规则 ✓ 自定义规则 ✓ 速率限制 ✓ Bot 管理 □ 监控告警 ✓ 访问日志分析 ✓ 异常流量检测 ✓ 缓存命中率监控 ✓ 源站健康检查 □ 应急响应 ✓ 缓存清除流程 ✓ 源站切换预案 ✓ CDN 故障转移 ✓ 联系人列表 ``` ### 主流 CDN 对比 | 特性 | Cloudflare | AWS CloudFront | 阿里云 CDN | Akamai | |------|------------|----------------|-----------|--------| | **DDoS 防护** | 无限 | 按量 | 基础/付费 | 专业 | | **WAF** | 免费/付费 | 付费 | 付费 | 付费 | | **免费 SSL** | ✓ | ✗ | ✓ | ✗ | | **边缘节点** | 275+ | 216+ | 2800+ | 4100+ | | **价格** | 免费/$20/月 | 按量 | 按量 | 昂贵 | | **适用** | 中小网站 | AWS 用户 | 中国用户 | 大型企业 | ### 多云 CDN 策略 ``` 架构: 用户 → DNS (GSLB) → 选择 CDN → 边缘节点 → 源站 优势: ✓ 冗余备份 ✓ 成本优化 ✓ 地域覆盖 ✓ 风险分散 挑战: ✗ 配置复杂 ✗ 缓存一致性 ✗ 证书管理 ✗ 日志整合 实施建议: 1. 使用 DNS GSLB 智能路由 2. 统一缓存策略 3. 集中证书管理 4. 日志聚合分析 ``` --- ## 总结与思考 ### 核心要点回顾 1. **CDN 安全价值** - DDoS 防护(Tbps 级别) - WAF 集成(应用层防护) - 源站隐藏(减少攻击面) - SSL 集中管理 2. **配置风险** - 源站 IP 泄露(最大风险) - 缓存配置错误 - SSL 配置不当 3. **防护策略** - IP 白名单 - 自定义验证头 - 缓存键完整 - 持续监控 ### 深入思考问题 1. **边缘计算安全挑战** - Cloudflare Workers、AWS Lambda@Edge - 代码在边缘执行 - 如何保证安全? - 供应链攻击风险? 2. **CDN 供应链风险** - 依赖单一 CDN 供应商 - 配置错误影响全球 - 2021 年 Fastly 中断事件 - 多云策略必要性? 3. **去中心化 CDN 前景** - IPFS、Arweave - 区块链存储 - 抗审查特性 - 安全模型差异? ### 实战建议 **中小企业**: 1. 使用 Cloudflare 免费版 2. 启用基础 WAF 3. 配置 SSL/TLS 4. 隐藏源站 IP **大型企业**: 1. 多云 CDN 策略 2. 专业 WAF 配置 3. 定制缓存规则 4. 7x24 监控 **电商平台**: 1. 动态内容不缓存 2. 购物车/支付隔离 3. 严格源站保护 4. 实时缓存清除 ### 下一步学习建议 - **深入 WAF**:规则编写和调优 - **边缘计算**:Cloudflare Workers 安全 - **API 安全**:CDN + API Gateway - **零信任**:CDN 在零信任架构中的角色 --- ## 参考资料 ### 标准文档 - RFC 7234 (HTTP Caching) - RFC 6797 (HSTS) - OWASP CDN Security Cheat Sheet ### 工具资源 - [Cloudflare 文档](https://developers.cloudflare.com/) - [AWS CloudFront 指南](https://docs.aws.amazon.com/cloudfront/) - [Varnish 文档](https://varnish-cache.org/docs/) - [SSL Labs](https://www.ssllabs.com/) ### 在线资源 - [CDN 性能对比](https://www.cdnperf.com/) - [证书透明度](https://crt.sh/) - [DNS 历史查询](https://securitytrails.com/) ### 书籍推荐 - 《CDN 技术详解》 - 《Web 性能权威指南》 - 《HTTP 权威指南》 --- **标记 明日预告**:Day 14 - 网络时间协议(NTP)安全 > 本文内容仅供学习和研究使用,请勿用于非法目的。所有实验请在隔离环境中进行。 --- *本文是 365 天信息安全技术系列的第 13 篇,精编版本*
myh0st
2026年4月13日 23:08
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码