1.
风险评估与流量观察准备
- 步骤:登录到防护不足的香港服务器,启用实时流量监控(iftop、nethogs、vnstat)。
- 操作:apt/yum 安装:sudo apt install iftop vnstat;运行:sudo iftop -i eth0,观察并记录峰值并发连接与源IP分布。
- 目的:明确是CC(大量短连接或伪造会话)还是带宽洪泛,为后续规则制定提供数据。
2.
启用连接限制与内核优化
- 步骤:修改sysctl以提高并发与缩短超时。编辑 /etc/sysctl.conf 添加或调整:net.ipv4.tcp_tw_reuse=1、tcp_fin_timeout=30、tcp_max_syn_backlog=4096、net.ipv4.ip_local_port_range=1024 65535。
- 操作:执行 sysctl -p 应用。
- 注意:测试期间逐步调整,避免影响正常长连接业务。
3.
使用iptables + ipset做快速黑名单与速率限制
- 步骤:安装ipset并建立速率表:sudo apt install ipset iptables-persistent。创建表:ipset create badips hash:ip timeout 600。
- 操作:将高频源IP加入表并用iptables拦截:ipset add badips 1.2.3.4;iptables -I INPUT -m set --match-set badips src -j DROP。
- 速率限制示例:iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --set;iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -m recent --update --seconds 1 --hitcount 20 -j DROP。
4.
使用nginx或HAProxy做第1层应用层负载均衡
- 步骤:在前端部署nginx或HAProxy作为反向代理与速率限制点。
- nginx示例:在server段使用 limit_conn_zone $binary_remote_addr zone=addr:10m; limit_conn addr 10; limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;并在server里引用。
- HAProxy示例:frontend绑定80/443,use_backend按ACL分流,stick-table track src,http-request deny if { src_http_req_rate(10s) gt 50 }。
5.
流量清洗点的部署:本地清洗与CDN/清洗服务结合
- 步骤:评估是否本地能承载清洗(CPU/带宽)否则接入第三方清洗或CDN(如阿里云、Cloudflare、专业清洗厂)。
- 操作:若本地清洗,设置一组清洗节点(两个或以上),在均衡器上按健康检查(HTTP 200)把可疑流量转发到清洗池,对通过ICP/JS挑战的流量放行。
- 建议:与CDN结合:把DNS切到CDN或在峰值时切换到清洗CNAME,确保切换流程演练。
6.
使用SYNPROXY、tcp_wrappers与SYN cookie防止半开连接耗尽
- 步骤:对抗SYN洪泛,在tcp stack启用SYN cookie:sysctl -w net.ipv4.tcp_syncookies=1。
- 操作:在iptables层启用SYNPROXY(需要内核支持):iptables -t raw -N SYNPROXY;iptables -A PREROUTING -p tcp --syn -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460。
- 注意:SYNPROXY对合法连接有微小延迟,先在测试环境评估。
7.
会话保持、粘性与后端健康检查设计
- 步骤:根据应用选择会话策略(IP粘性、cookie或JWT)。配置负载均衡器做健康检查,剔除不健康后端。
- 操作:HAProxy的server行加上 check inter 2000 rise 2 fall 3;nginx使用 proxy_next_upstream off 并结合 fastcgi_pass 后端健康性脚本。
- 目的:防止被攻击时将流量发送到已故障的节点,保证可用实例均匀承担清洗压力。
8.
日志、告警与自动化封禁流程
- 步骤:配置集中日志(ELK/Graylog)并建立告警规则(突发短时大量请求、单IP并发数异常)。
- 操作:用fail2ban解析nginx/HAProxy日志,自动将恶意IP加入ipset并同步到前端均衡器:在 /etc/fail2ban/jail.local 增加自定义filter和action。
- 扩展:对峰值攻击启用自动扩容或脚本在检测到流量阈值后自动切换到清洗CNAME。
9.
流量演练、测试与恢复步骤
- 步骤:使用压力测试工具(wrk、siege、hping3)在预发布环境做模拟,并记录系统瓶颈。
- 操作:示例:hping3 -S -p 80 --flood --rand-source target_ip(仅在授权测试环境)。检测是否触发ipset/iptables规则并记录响应时间。
- 恢复:制定清理命令脚本(清空ipset表、重载iptables/HAProxy/nginx配置)并在控制台保留回滚步骤。
10.
运维脚本示例与配置备份
- 步骤:把常用命令写成脚本:block_ip.sh(ipset add; iptables persist),unblock_all.sh(ipset flush)。同时定期备份 /etc/iptables/ /etc/ipset/ /etc/haproxy/ /etc/nginx/。
- 操作:使用crontab做每日备份并上传到安全的远程存储:tar czf /backup/conf_$(date +%F).tar.gz /etc/nginx /etc/haproxy && rclone copy ...。
11.
合规与沟通策略
- 步骤:在高峰或攻击时及时与上游线路提供商与清洗服务沟通并记录变更。
- 操作:准备好业务侧沟通模板(被攻击说明、影响范围、预计恢复时间),并与客户/内网发布临时访问策略如验证码或限流页面。
12.
问:当香港高防服务器出现CC攻击且本地无法清洗时,第一步应做什么?
- 答:立即启用前端速率限制并将DNS或流量切换到CDN/清洗服务;同时用ipset快速封禁高频源IP并开启SYN cookie与SYNPROXY减轻半开连接。
13.
问:如何在不影响正常用户体验下做好速率限制?
- 答:先统计正常峰值请求速率,设置limit_req_zone的阈值略高于正常峰值,使用令牌桶算法平滑突发,并对登录、API等关键路径设置白名单或更宽松的限流规则。
14.
问:能否仅靠iptables防CC?有哪些不足?
- 答:iptables/ipset能快速拦截已识别的恶意IP与速率,但对IP伪造、大规模分布式攻击或应用层复杂请求(例如携带合法cookie的刷流量)有限,需结合应用层(nginx/HAProxy)、清洗平台与CDN协同防护。
来源:香港高防服务器不防CC攻击时负载均衡与流量清洗的优化方法