news 2026/4/23 19:39:24

Cloudflare + Nginx 安全加固必备:除了获取真实IP,还能用这些配置防爬虫和CC攻击

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cloudflare + Nginx 安全加固必备:除了获取真实IP,还能用这些配置防爬虫和CC攻击

Cloudflare + Nginx 安全加固实战:从真实IP获取到全方位防护体系

当网站接入Cloudflare后,Nginx默认看到的都是Cloudflare的IP地址。虽然大多数教程会教你如何获取真实客户端IP,但很少有人告诉你如何利用这些信息构建完整的安全防护体系。本文将带你从基础配置升级到实战防护,打造多层次的网站安全防线。

1. 真实IP获取的进阶配置

在开始安全防护前,确保真实IP获取配置是最优的。标准的Cloudflare + Nginx配置通常这样设置:

set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; # ...其他Cloudflare IP段 real_ip_header CF-Connecting-IP;

但实际应用中,我们还可以优化以下几点:

  • IP段自动更新:Cloudflare的IP段会定期变更,手动维护不现实。建议使用以下脚本每月自动更新:
#!/bin/bash CF_IPS_URL="https://www.cloudflare.com/ips-v4" CONF_FILE="/etc/nginx/conf.d/cloudflare.conf" echo "# Auto-generated at $(date)" > $CONF_FILE curl -s $CF_IPS_URL | awk '{print "set_real_ip_from " $0 ";"}' >> $CONF_FILE echo "real_ip_header CF-Connecting-IP;" >> $CONF_FILE nginx -t && systemctl reload nginx
  • 日志格式优化:在nginx.conf中修改日志格式,确保记录真实IP:
log_format main '$remote_addr - $realip_remote_addr [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';

提示:使用$realip_remote_addr变量可以获取到经过Cloudflare代理前的原始客户端IP。

2. 基于真实IP的访问频率控制

获取真实IP后,第一道防线就是限制异常访问频率。Nginx的limit_req模块是防CC攻击的利器。

2.1 基础限流配置

http { limit_req_zone $realip_remote_addr zone=one:10m rate=10r/s; server { location / { limit_req zone=one burst=20 nodelay; # ...其他配置 } } }

这个配置表示:

  • 每个真实IP每秒最多10个请求
  • 允许突发20个请求
  • nodelay表示不延迟处理突发请求,直接拒绝超额请求

2.2 多级限流策略

针对不同URL路径设置不同的限流策略:

map $uri $limit_bucket { default "global"; ~^/api/ "api"; ~^/admin/ "admin"; } limit_req_zone $realip_remote_addr zone=global:10m rate=5r/s; limit_req_zone $realip_remote_addr zone=api:10m rate=20r/s; limit_req_zone $realip_remote_addr zone=admin:10m rate=2r/s; server { location / { limit_req zone=$limit_bucket burst=10; # ...其他配置 } }

这种分层限流可以:

  • 保护敏感后台(如/admin)更严格
  • 给API接口更高限额
  • 普通页面适中限制

3. 智能识别与封禁恶意流量

单纯的限流可能误伤正常用户,我们需要更智能的识别机制。

3.1 区分搜索引擎爬虫与恶意爬虫

map $http_user_agent $is_bad_bot { default 0; ~*(bot|crawl|spider|scan|python|curl|wget) 1; ~*(nmap|nikto|sqlmap) 1; "~*Googlebot" 0; "~*Bingbot" 0; } server { if ($is_bad_bot) { return 403; } }

常见恶意爬虫特征:

  • 无User-Agent或伪造UA
  • 包含扫描工具关键词(nmap、sqlmap等)
  • 非常规的爬虫名称

注意:需要定期更新恶意UA列表,避免误封合法爬虫。

3.2 基于地理位置的访问控制

使用ngx_http_geo_module模块:

geo $realip_remote_addr $allowed_country { default no; 1.0.0.0/24 yes; # 示例IP段 # 从MaxMind等数据库导入IP段 } server { if ($allowed_country = no) { return 403; } }

可以结合MaxMind的GeoIP数据库实现更精确的地理围栏。

4. 高级防护:动态黑名单与挑战机制

对于更高级的攻击,我们需要动态防御策略。

4.1 Fail2ban联动配置

  1. 首先安装Fail2ban:
apt install fail2ban # Debian/Ubuntu yum install fail2ban # CentOS/RHEL
  1. 创建Nginx规则配置文件/etc/fail2ban/filter.d/nginx-cc.conf
[Definition] failregex = ^<HOST>.*"(GET|POST).*HTTP.*" (404|503) .*$ ignoreregex =
  1. 配置jail.local:
[nginx-cc] enabled = true port = http,https filter = nginx-cc logpath = /var/log/nginx/access.log maxretry = 100 findtime = 60 bantime = 3600

这个配置会:

  • 监控Nginx日志
  • 1分钟内100次请求触发封禁
  • 封禁1小时

4.2 人机验证挑战

对于可疑但不确认的流量,可以返回验证挑战:

location / { if ($http_cf_connecting_ip ~* "(123\.123\.123\.123|124\.124\.124\.124)") { add_header Set-Cookie "challenge=1; Path=/"; return 503; } if ($cookie_challenge) { # 这里可以插入JS挑战或CAPTCHA return 444; } }

5. 监控与日志分析

防护措施需要配合监控才能发挥最大效果。

5.1 关键监控指标

指标阈值监控工具
请求频率>100r/sPrometheus
4xx错误率>5%Grafana
封禁IP数突增Fail2ban
爬虫比例>30%ELK

5.2 日志分析命令示例

查找高频访问IP:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

分析恶意请求模式:

grep -E 'nmap|sqlmap' /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c

6. 综合配置示例

最后给出一个完整的Nginx配置示例:

http { # Cloudflare真实IP配置 include conf.d/cloudflare.conf; # 限流区域定义 limit_req_zone $realip_remote_addr zone=global:10m rate=10r/s; limit_req_zone $realip_remote_addr zone=api:10m rate=30r/s; # 恶意UA检测 map $http_user_agent $is_bad_bot { default 0; ~*(nmap|sqlmap|scan) 1; } # 地理位置检测 geo $realip_remote_addr $block_country { default 0; include /etc/nginx/block_country.conf; } server { # 基础防护 if ($is_bad_bot) { return 403; } if ($block_country) { return 403; } location / { limit_req zone=global burst=20 nodelay; # 正常请求处理 } location /api/ { limit_req zone=api burst=50; # API处理 } # 动态挑战 location /challenge { if ($cookie_challenge_passed) { return 204; } return 503; } } }

这套配置在实际项目中可以有效防御:

  • 高频CC攻击
  • 恶意爬虫扫描
  • 特定地区攻击
  • 自动化工具滥用

防护策略需要根据实际流量特点不断调整优化。建议先设置较宽松的限制,观察正常流量模式后再逐步收紧规则。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 19:39:22

Qwen3Guard-Gen-WEB硬件选型攻略:从个人测试到生产部署配置详解

Qwen3Guard-Gen-WEB硬件选型攻略&#xff1a;从个人测试到生产部署配置详解 1. 硬件选型的重要性与挑战 在部署Qwen3Guard-Gen-WEB这类大型安全审核模型时&#xff0c;硬件配置直接决定了系统的性能、稳定性和成本效益。与通用大模型不同&#xff0c;安全审核模型需要实时响应…

作者头像 李华
网站建设 2026/4/23 19:35:19

别再傻傻分不清了!用Kubernetes和Prometheus实战定义你的服务SLI/SLO

从零构建Kubernetes服务健康指标体系&#xff1a;PrometheusGrafana实战SLI/SLO 当你的电商网站在大促期间突然出现响应延迟&#xff0c;客服电话被打爆时&#xff0c;能否快速判断这是偶发波动还是系统性故障&#xff1f;去年我们团队就经历过这样的至暗时刻——由于缺乏明确的…

作者头像 李华
网站建设 2026/4/23 19:33:46

算法训练营第十天|26.删除有序数组中的重复项

1.视频讲解&#xff1a;(https://www.bilibili.com/video/BV1fc2FByE4f/) 2.题目链接&#xff1a;(https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/) 3.思路&#xff1a;双指针法 定义两个指针&#xff0c;慢指针j用来标记无重复的数&#xff…

作者头像 李华
网站建设 2026/4/23 19:32:22

d2s-editor:暗黑破坏神2存档编辑器的终极免费解决方案

d2s-editor&#xff1a;暗黑破坏神2存档编辑器的终极免费解决方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Web的暗黑破坏神2存档编辑器&#xff0c;专为《暗黑破坏神2》玩家和模组开发者设计&#x…

作者头像 李华
网站建设 2026/4/23 19:30:17

2026年AI漫剧创作工具选购指南与产业效能深度研究报告

第一章 2026年AI漫剧行业现状深度综述1.1 产业周期转型&#xff1a;从“泡沫狂欢”到“提质增效”在2026年的数字视听产业图谱中&#xff0c;AI漫剧&#xff08;人工智能生成漫画视频剧&#xff09;已由边缘的技术尝试演变为内容市场的绝对主干。根据最新的行业测算&#xff0c…

作者头像 李华