中小型企业网站遭遇DDoS攻击时,最典型的困境不是“有没有防护”,而是“防护成本与业务价值不匹配”。大型企业可以上高防IP、部署清洗集群、采购百万级抗D设备,但中小型企业通常只有一台云服务器或一台物理机,带宽峰值可能只有50M到100M,攻击流量一旦超过200M,业务就直接瘫痪。所以中小型企业的DDoS防护不能照搬大厂方案,必须围绕“低成本、可落地、能扛住常见攻击”这三个目标来设计。下面直接拆解一套实操性强的分层防护方案。
先判断攻击类型,再决定防护手段DDoS不是单一攻击,而是多种流量型与资源耗尽型攻击的统称。中小型企业最常见的三类是:SYN Flood、UDP Flood、CC攻击。SYN Flood打的是TCP握手队列,UDP Flood打的是带宽和连接表,CC攻击打的是Web应用层,模拟大量正常请求耗尽服务器CPU和数据库连接。如果不区分类型,盲目上防护,要么花冤枉钱,要么防不住。判断方法很简单:服务器上执行netstat -an | grep SYN_RECV | wc -l,如果数值持续超过几千,基本是SYN Flood;如果带宽被打满但CPU不高、网站还能打开静态页,多半是UDP Flood;如果带宽没满但网站响应极慢、数据库连接数暴涨,就是CC攻击。先花十分钟确认类型,后续操作才有针对性。
网络层第一道防线:内核参数与iptables限速对于SYN Flood和UDP Flood,云服务器或物理机自带的iptables和内核参数能起到第一层过滤作用。先调整内核参数,缩短SYN超时时间、增大半连接队列、开启SYN Cookie。以Linux系统为例,编辑/etc/sysctl.conf加入以下内容:
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_reuse = 1
执行sysctl -p生效。这些参数能让服务器在SYN Flood下坚持更久,但无法完全防御大流量。接着用iptables对单个IP的连接频率做限制,例如每个IP每秒最多新建20个连接,超过就丢弃:
iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 30 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP
对于UDP Flood,可以限制单个IP的UDP包速率:
iptables -A INPUT -p udp -m limit --limit 100/s --limit-burst 200 -j ACCEPT iptables -A INPUT -p udp -j DROP
注意,iptables限速只能保护服务器不被瞬间打死,无法清洗大带宽攻击。如果攻击流量超过服务器带宽,这些规则在流量到达网卡之前就已经把带宽占满了,所以它只适合中小流量攻击或作为辅助手段。
利用云服务商的基础防护与安全组中小型企业网站大多部署在云服务器上,云服务商自带的基础DDoS防护和安全组是性价比最高的第一道外部防线。以国内主流云厂商为例,基础防护通常免费提供1Gbps到5Gbps的清洗能力,足以应对绝大多数针对中小企业的攻击。关键操作有两个:一是把服务器加入安全组,只放行业务必需的端口,例如80、443、22(22端口建议只对固定办公IP开放);二是在云控制台开启“DDoS基础防护”的告警阈值,一旦触发清洗,能第一时间收到通知。安全组规则要做得细,例如只允许TCP 80和443入站,UDP全部拒绝,ICMP只允许必要的ping。很多中小企业被UDP Flood打死,就是因为服务器默认放行了所有UDP端口,攻击者用DNS反射或NTP反射打过来,服务器照单全收。把UDP入站全部关闭,能直接挡掉一大半反射型攻击。
Web应用层防护:Nginx限流与WAF规则CC攻击是中小型企业最头疼的攻击类型,因为它不需要大带宽,几百个肉鸡就能把一台8核16G的服务器打到CPU满载。防护CC攻击的核心思路是“在请求进入应用之前就拦截掉异常流量”。如果网站使用Nginx作为反向代理或Web服务器,可以用ngx_http_limit_req_module和ngx_http_limit_conn_module做请求频率和并发连接限制。在nginx.conf的http块中加入:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; limit_conn_zone $binary_remote_addr zone=perconn:10m;
然后在server或location块中应用:
limit_req zone=perip burst=20 nodelay; limit_conn perconn 10;
这样每个IP每秒最多10个请求,突发最多20个,超过就返回503。对于正常用户来说,每秒10个请求足够浏览网页;对于CC攻击的肉鸡来说,这个限制能大幅降低攻击效果。但要注意,如果网站有大量静态资源或API接口,需要根据实际业务调整阈值,否则会误伤正常用户。更精细的做法是结合Nginx的map模块,对特定URL(如登录接口、搜索接口)做更严格的限流。
接入第三方CDN隐藏源站IP中小型企业最容易被忽视的一点是源站IP暴露。攻击者只要拿到源站真实IP,就可以绕过CDN直接打服务器,所有CDN防护形同虚设。所以防护DDoS的第一步其实是“隐藏源站”。具体做法是:将网站域名解析到第三方CDN服务商(国内可选择阿里云CDN、腾讯云CDN、七牛云等),由CDN节点对外提供服务,源站只允许CDN回源IP访问。在源站防火墙或安全组中,只放行CDN服务商提供的回源IP段,其他所有IP一律拒绝。这样即使攻击者知道域名,打到的也是CDN节点,而CDN节点有海量带宽和清洗能力,攻击流量在边缘就被分散和过滤了。隐藏源站IP有几个细节:一是源站不要直接解析任何子域名到真实IP;二是源站不要对外提供任何非Web服务;三是定期检查源站IP是否被搜索引擎或第三方平台记录,如果发现泄露,立即更换源站IP。对于预算有限的中小企业,CDN的按量付费模式通常每月几十到几百元,远低于购买高防IP的成本。
高防IP与高防CDN的取舍当攻击流量超过云服务商基础防护的阈值,或者攻击者直接打源站IP时,就需要考虑高防IP或高防CDN。高防IP的原理是将攻击流量牵引到高防机房进行清洗,再把干净流量回注到源站。高防CDN则是把高防能力集成到CDN节点上,适合Web业务。中小型企业选择时有一个关键判断:如果业务以网站和Web应用为主,优先选高防CDN,因为CDN本身有缓存和加速功能,能同时解决性能和防护问题;如果业务包含非Web端口(如游戏、APP后端、数据库同步),则需要高防IP。高防IP的成本通常按防护峰值计费,例如20Gbps防护每月几百元,100Gbps防护每月数千元。中小型企业不必追求超大防护,先评估自身业务能承受的最大攻击流量,再选择略高于该值的套餐即可。很多攻击者对中小企业的攻击流量集中在10Gbps到50Gbps之间,20Gbps或30Gbps的高防套餐已经能覆盖大部分场景。
业务层冗余与降级策略防护DDoS不能只靠技术手段,业务层的冗余和降级同样重要。中小型企业最常见的错误是“把所有服务放在一台服务器上”,Web、数据库、图片存储、缓存全在一起,一旦被打,所有功能同时瘫痪。正确的做法是至少做“Web与数据库分离”:Web服务器被打时,数据库服务器不受影响,攻击过后Web恢复,数据不丢。如果预算允许,Web层可以做成双节点负载均衡,一台被打时另一台还能撑住部分流量。另外,静态资源(图片、CSS、JS)应该全部放到对象存储或CDN上,不要占用源站带宽。对于攻击期间无法正常访问的情况,可以设置一个静态降级页面,当源站负载过高或连接数超限时,自动切换到静态页面,告诉用户“系统繁忙,请稍后再试”,而不是直接显示502或504错误。这样既能保护源站不被打垮,也能减少用户体验损失。
监控与应急响应流程中小型企业往往没有专门的运维团队,攻击发生时手忙脚乱。因此需要提前建立一套简单的监控与应急流程。监控方面,至少监控三个指标:带宽使用率、CPU负载、TCP连接数。可以使用云监控自带的告警功能,设置阈值,例如带宽超过80%持续5分钟就发短信或邮件通知。应急流程可以简化为四步:第一步,确认是否遭受DDoS攻击,查看流量图和连接状态;第二步,如果攻击流量超过基础防护,立即开启高防IP或切换至高防CDN;第三步,在服务器上执行限流规则,关闭非必要端口;第四步,记录攻击类型、流量峰值、持续时间,事后分析是否需要调整防护策略。这套流程不需要复杂的工具,一个文档加几个监控告警就能落地。
成本控制与长期防护建议中小型企业做DDoS防护,最怕的是“防护成本超过业务利润”。所以方案设计必须考虑成本效益。基础的内核参数优化、iptables限流、Nginx限流、安全组配置,成本为零,应作为第一层必做项。CDN隐藏源站,每月几十到几百元,是第二层。高防IP或高防CDN按需开启,平时不用时可以关闭或降低套餐,只在攻击发生时临时升级,是第三层。长期来看,中小型企业应养成几个习惯:定期备份数据,确保攻击不会造成数据丢失;定期检查源站IP是否泄露;保持系统和软件更新,避免因漏洞被攻击者利用;与云服务商保持沟通,了解最新的基础防护能力和应急支持渠道。DDoS攻击无法完全杜绝,但通过分层防护和合理冗余,中小型企业完全可以把攻击影响控制在可接受范围内,而不是一打就瘫、一瘫就慌。
