本指南面向使用CN2链路到台湾出口的网络/运维工程师,假设可与上游运营商协商BGP社区及黑洞、能在边缘路由器或云主机上运行iptables/nftables并调整内核参数。本文侧重实操步骤与命令示例,避免抽象描述。
第一步画出拓扑:边缘路由器(BGP Peering)、防护设备(硬件清洗或VM)、业务服务器(Web/游戏)。确定流量入口点(CN2出口)与可下发ACL/黑洞的位置。
建议:边缘路由器用于BGP RTBH/FlowSpec,下游使用iptables做细粒度过滤,硬件清洗为最后手段。
联系运营商申请:1) RTBH(可通过特定community下发/32黑洞);2) FlowSpec(细粒度按端口/协议下发)。确认支持的community值与前缀长度限制。
示例协调内容:请运营商支持将社区 65535:666 对应为 discard,并在发生攻击时允许我们下发 /32 或 /24 对应的 next-hop 为 特定黑洞地址。
步骤:1)在边缘路由器上为被攻击目标添加静态路由,指向黑洞下一跳;2)或在本地BGP发出带community的路由通告。示例(伪命令,按厂商调整):
配置示例:ip route add 1.2.3.4/32 via 192.0.2.254; 或 bgp advertise 1.2.3.4/32 community 65535:666
FlowSpec能按五元组匹配并丢弃/限速大流量。示例规则:匹配源端口任意、目标端口80且包速>10000pps时丢弃。需与上游确认FlowSpec语法并用厂商命令下发。
注意:FlowSpec带来误杀风险,先用rate-limit或跳转到sflow检测链验证再生效。
在/ etc/sysctl.conf加入并生效(sysctl -p):net.ipv4.tcp_syncookies=1; net.ipv4.tcp_max_syn_backlog=4096; net.core.somaxconn=1024; net.core.netdev_max_backlog=5000; net.ipv4.icmp_echo_ignore_broadcasts=1。
说明:tcp_syncookies防SYN洪,backlog与somaxconn避免连接溢出,netdev_max_backlog提升NIC队列处理。
在边缘Linux上用xt_SYNPROXY模块对SYN进行验证(需内核支持)。示例流程:
1) raw表先接管:iptables -t raw -A PREROUTING -p tcp --syn -m limit --limit 2000/s -j CT --notrack
2) 在mangle或filter链使用 SYNPROXY:iptables -t raw -A PREROUTING -p tcp --syn -m tcpmss ! --mss 536:65535 -j DROP(过滤MSS异常)
具体启用:iptables -t raw -A PREROUTING -p tcp -m tcp --syn -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
使用ipset存放黑名单或恶意源IP,nftables快速匹配。示例:
ipset create blacklist hash:ip timeout 1h
nft add rule inet filter input ip saddr @blacklist drop
实操:在检测到攻击源后批量加入ipset(ipset add blacklist 1.2.3.4),效率高于单条iptables规则。
安装xt_geoip或使用nftables geoip模块。示例(iptables + ipset):先生成GeoIP库,加载到ipset geoip_CN,然后iptables匹配:iptables -I INPUT -m set --match-set geoip_CN src -j ACCEPT。对台湾流量慎用,建议仅用于部分应用或临时隔离。
使用tcpdump/sflow/ntop或商用监控(Prometheus+Grafana)。常用命令:tcpdump -nn -i eth0 tcp and port 80 -c 200;conntrack -L | wc -l;ss -s查看socket统计。
推荐:配置阈值告警(pps、bps、连接数)并在超阈值时自动触发脚本下发ipset或调用上游RTBH API。
定期演练:1)模拟SYN/UDP洪水并触发黑洞;2)验证FlowSpec下发与回退流程;3)演练CDN切换或WAF规则上逆。记录时间线与恢复步骤。
恢复策略:先解除黑洞,再逐步放宽iptables/ipset规则,最后核查服务与日志,避免误判导致业务中断。
自动化脚本:1)监测阈值后自动创建ipset并通知运维;2)通过API向上游提交黑洞申请;3)定期清理过期blacklist。使用ansible统一下发防火墙规则。
日志审计:保留syslog/nginx/防火墙日志7~30天,用于溯源与攻击特征提取。
13. 问:CN2到台湾链路发生大流量攻击时,我应该优先采取什么措施?
答:优先与上游联系触发RTBH/FlowSpec,如果可用,先用FlowSpec做精确拦截(按端口/协议),同时在本地用ipset+iptables临时封堵攻击源并打开SYNPROXY与tcp_syncookies,必要时将流量切换到清洗服务或CDN以保护源站。
14. 问:如何在不影响正常用户的情况下测试FlowSpec或黑洞策略?
答:先在测试时间窗对小范围IP或/32目标做限速而非丢弃(rate-limit或redirect到null0的测试路径),并对内网或备份主机进行验证;使用样本流量回放验证规则命中,再在非高峰期逐步扩大范围。
15. 问:云主机/裸金属上有什么轻量级DDoS防护实践可立即部署?
答:启用内核syncookies、提升backlog、启用SYNPROXY模块、使用ipset做大规模IP封堵、部署fail2ban保护登录端口并结合CDN/WAF做应用层防护;同时和上游运营商建立应急联系通道以便触发RTBH。