1.
- 确认业务属性与数据所在地:确认是否涉及个人敏感信息、金融/医疗等受限行业;记录数据流程图;
- 与供应商沟通:向台湾VPS提供商索要网络能力说明(是否支持流量清洗、是否可做黑洞/流量镜像);获取ASN与上游信息;
- 制定日志保留与访问控制策略:确定日志保留周期(例如:访问日志1年、审计日志3年)、加密存储位置与访问授权流程。
2.
- 更新系统:Debian/Ubuntu: sudo apt update && sudo apt -y upgrade;CentOS: sudo yum -y update;
- 创建非root用户并禁用root远程登录:adduser deploy && usermod -aG sudo deploy;编辑 /etc/ssh/sshd_config:PermitRootLogin no, PasswordAuthentication no;重启ssh:sudo systemctl restart sshd;
- 安装基本防护工具:sudo apt install -y fail2ban ipset iptables-persistent nftables bpfcc-tools tcpdump。
3.
- 编辑 /etc/sysctl.conf,添加关键项并应用(sysctl -p):
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.core.somaxconn = 1024
net.netfilter.nf_conntrack_max = 262144 (根据内存调整)
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
- 启用SYN cookies、增大队列和连接追踪上限,避免单纯SYN占满表。
4.
- 安装并创建ipset:sudo apt install -y ipset;sudo ipset create blacklist hash:ip maxelem 100000;
- 基础iptables规则(示例,保存到 /etc/iptables.rules):
iptables -F; iptables -X;
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT;
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP;
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH;
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 6 --name SSH -j DROP;
iptables -A INPUT -m set --match-set blacklist src -j DROP;
iptables -A INPUT -p tcp --syn -m limit --limit 25/s --limit-burst 100 -j ACCEPT;
- 将规则持久化:sudo iptables-save > /etc/iptables.rules,并在启动脚本中恢复或使用 iptables-persistent。
5.
- 推荐使用nftables以提高性能:示例规则文件 /etc/nftables.conf 包含 set(黑名单)、conntrack 规则与 synproxy:
family inet { table filter { chain input { type filter hook input priority 0; ct state established,related accept; ct state invalid drop; tcp dport 22 ct state new limit rate 10/second accept; } } }
- 对于严重SYN洪水,在前置防火墙上启用 synproxy:nft add rule inet filter input tcp flags syn ct state new synproxy.
6.
- Nginx限速(示例):在 http {} 增加 limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; 在 server/location 使用 limit_req zone=one burst=20 nodelay;
- Fail2ban:安装 sudo apt install -y fail2ban;编辑 /etc/fail2ban/jail.local,启用 sshd、nginx-http-auth、nginx-limit-req 等;重启:sudo systemctl restart fail2ban;
- 配置日志转送与SIEM(如ELK/Graylog)用于攻击时速查与溯源。
7.
- 使用CDN/云WAF(Cloudflare、阿里云CDN/万里云清洗等):将域名解析到CDN,开启I'm under attack/挑战页和WAF规则;
- 与VPS提供商协商黑洞/流量镜像:在遭受L3/L4攻击时,请求对方做流量清洗或临时Blackhole(作业流程应事先约定);
- 对需要直连的服务(如SSH)考虑走跳板主机或VPN,仅将应用层流量暴露给CDN。
8.
- 部署监控:Prometheus + node_exporter + Grafana 监控网络带宽、conntrack、CPU、内存、每秒连接数;设置阈值告警(例如:conntrack 使用率 > 70%、流量突增 > 200%);
- 建立SOP:检测->切换到清洗->下发iptables临时黑名单(ipset 添加)->通知上游->恢复;将命令写入响应脚本并做自动化(Ansible/脚本化)。
9.
问:我的服务部署在台湾VPS上,是否还需做额外的合规或备案?
答:答:视业务类型而定。一般静态网站或非敏感服务不必做大陆的ICP备案,但若面向中国大陆用户或处理个人敏感数据,应遵守当地法律并完成必要的数据保护措施(加密、日志、授权);如涉及金融/医疗/电信类,应咨询法律顾问并与VPS提供商确认数据存放与传输合规性。
10.
问:如何在保证正常用户体验的前提下缓解DDoS?
答:答:优先使用CDN+WAF把流量放到边缘做清洗;启用智能挑战页/验证码,针对异常IP使用ipset动态放入黑名单并由上游做清洗;对SSH等管理端口使用跳板、动态端口或VPN;结合速率限制与行为检测,尽量将防护自动化。
11.
问:发生大规模攻击时我能马上做什么降低损失并恢复?
答:答:立即启用CDN清洗/联系上游开启清洗或黑洞;临时下调应用暴露,打开维护页;执行预先准备的脚本:在防火墙层快速添加ipset黑名单、启用synproxy或nft限速规则;并启动取证与日志采集,攻击结束后分析并调整长期策略。