拿到一台美国高防服务器,跟拿到一台普通VPS完全是两回事。普通VPS你装个面板、传个网站就完事了,高防服务器从选型那一刻起,整条部署链路的逻辑就不一样。你得考虑防御架构是Anycast还是单IP静态牵引,源站IP怎么藏住,内核参数怎么调才能扛住SYN Flood,WAF规则什么时候该开什么时候该关。这些东西少做一步,高防的钱就白花了。
先搞清楚你买的“高防”到底是什么架构。市面上大量的廉价方案用的是单IP静态绑定,平时看着正常,一旦攻击流量超过基础清洗上限,服务商直接触发黑洞机制,你的IP从互联网上消失,业务瞬间全断。这种方案的问题不在于它不防护,而在于它的防护上限是硬性的,到了就切,没有缓冲。Anycast架构是另一回事,攻击流量在全球边缘节点就被分散和清洗,不会集中到一个点上被压垮,清洗产生的延迟也更低。选美国高防服务器的时候,如果服务商只告诉你“防御多少G”但不说架构类型,基本可以判断是静态牵引。真正做Anycast的机房会主动告诉你他们的PoP节点分布。

下单的时候有几个参数需要明确。清洗带宽问清楚是独享还是共享,共享清洗池的意思是攻击来了你分到的清洗能力取决于当时有多少人在被打。备份IP是另一个容易被忽略的东西,如果主IP被打进黑洞,备份IP就是业务恢复的唯一通道。如果服务商支持BGP,下单时可以要求提供AS号,这个在后面配置Anycast或者多线接入的时候会用到。
系统初始化这块,跟普通服务器的加固逻辑一样,但要求更严格。拿到服务器第一件事是改SSH端口,22端口每天的扫描量不是开玩笑的。创建一个普通用户并赋予sudo权限,禁用root直接登录,攻击者想爆破就得先猜用户名再猜密码,成本翻倍。防火墙默认策略设成DROP,只放行业务必需的端口。Web服务器就开80和443,SSH端口改成高位随机端口。
内核层面的调优是高防服务器和普通服务器拉开差距的地方。普通VPS你不需要动sysctl,但高防服务器面对的是SYN Flood和连接耗尽型攻击,内核参数直接决定了你在被打的时候能撑多久。net.ipv4.tcp_syncookies = 1 打开,SYN队列被塞满的时候用cookie机制处理新连接,不丢弃也不等待,能有效缓解SYN Flood。tcp_max_syn_backlog调到4096或者更高,给半连接队列留出足够的缓冲空间。tcp_fin_timeout和tcp_keepalive_probes适当缩短,加快空闲连接的回收速度,防止连接表被撑爆。这些参数改完之后用sysctl -p生效,然后确认/proc/sys/net/ipv4/下面的值确实变了。
防火墙规则里,iptables的recent模块值得用上。针对SSH的暴力破解,限制每分钟新连接数不超过5个,配合fail2ban自动封禁多次认证失败的IP。针对HTTP Flood,可以用recent模块记录异常高频请求的IP,超过阈值自动加入黑名单。ICMP包限制速率在1/s,ping洪水这种低端攻击直接过滤掉。注意规则顺序,高频匹配的规则放前面,减少CPU消耗。
但主机层的防火墙规则只是补充,真正扛流量的还是机房层面的清洗设备。你的iptables规则在100G的攻击面前起不了什么作用,它的价值在于过滤掉那些漏过清洗的小规模扫描和CC。清洗设备把大部分垃圾流量拦掉了,iptables处理剩下那点残余,这个分工要搞清楚。
源站IP的隐藏是整个部署里最容易被跳过但后果最严重的一步。如果你把域名直接解析到高防IP,然后高防IP回源到你的源站IP,但源站IP没有做任何限制,攻击者通过历史DNS记录、邮件头、或者扫段就能找到你的真实IP,然后绕过清洗设备直接打源站。这样一来高防就成了摆设。
正确的做法是:源站服务器的防火墙只允许高防厂商的回源IP段访问80和443端口,其他所有IP一律拒绝。高防厂商会给你回源IP段列表,拿到之后在源站的iptables或者安全组里加白名单。域名解析层面,A记录指向高防IP而不是源站IP,源站的真实IP不出现在任何公开的DNS记录里。如果你的源站还跑着邮件服务或者SSH,这些端口的公网暴露也需要单独处理,能走内网的就走内网,走不了的就限制来源IP。
DNS切换这个环节,TTL值的事得提前做。如果你域名的TTL现在是24小时(86400秒),你改了A记录指向高防IP,理论上要等24小时才全局生效,这期间一半用户走旧IP一半走新IP,体验是分裂的。正确做法是在计划切换的前24到48小时,先把TTL降到300到600秒,等旧的TTL缓存过期之后再改A记录,这样几分钟内就能全局生效。切换完成之后TTL不用一直保持很低,回到一个合理的值比如3600秒,减少DNS查询压力。
业务部署层面,Nginx做反向代理是比较常见的选择。配置里禁止IP直接访问,只允许通过域名访问,这样攻击者用IP扫到你的时候拿不到任何响应。HTTPS强制开启,TLS 1.2以下全部禁用。PHP-FPM的进程数根据内存来调,不要贪多,进程数拉满内存不够的时候反而会因为OOM被系统杀掉。数据库不要暴露公网端口,MySQL只监听127.0.0.1,业务代码走本地socket连接。这个规则看起来基础,但很多被拖库的案例就是因为3306端口开着公网访问。
部署完成之后,验证环节不能省。先做性能基线测试,用iperf测带宽、用dd测磁盘IO、用ping和traceroute记录不同时间段的延迟和路由。这些数据是后面判断“被打的时候性能下降了多少”的参照系。然后做应用层压测,用wrk或者ab模拟并发请求,观察Nginx的响应时间和错误率,确认业务在正常负载下的表现。DDoS模拟测试建议跟服务商配合做,自己拿hping3或者LOIC去打,流量大了可能触发上游运营商的封禁,反而惹麻烦。测试的时候观察清洗设备有没有正常触发,攻击流量被牵引到清洗中心之后业务是否仍然可用,攻击停止之后多久恢复正常。这些数据如果服务商提供的话,可以写进SLA的验收标准里。
监控告警得从上线第一天就配好。带宽使用率、连接数、CPU和内存的异常波动,这些指标在攻击发生前往往会有征兆,比如连接数突然飙升或者带宽持续走高。配置阈值告警,触发之后邮件或者webhook通知到人。日志保留策略也要提前规划,防火墙日志和Nginx访问日志在排查攻击来源的时候是关键证据,但日志量大了磁盘很快满,得配logrotate做轮转和归档。
最后说一个现实问题。高防服务器不是买了就万事大吉,攻击者在发现打不动你之后,可能会换策略,从流量攻击转成应用层CC,模拟正常用户的请求去消耗你的后端资源。这种攻击流量特征不明显,清洗设备不一定能识别,最终还是要靠WAF的行为分析和限流规则来挡。所以高防服务器的部署是一个持续调优的过程,不是一次性配置完就扔在那不管了。攻击来了看日志,分析攻击特征,调整规则,下次再打的时候反应更快。这套循环跑起来,高防才算真正用上了。