前言:一个让我夜不能寐的问题
上周五凌晨3点,我被短信惊醒——服务器CPU飙到100%,网站全挂。
查日志,触目惊心:- # 1小时内的恶意请求
- grep "nikto\|sqlmap\|nmap" access.log | wc -l
- # 结果:23847
复制代码 2万多次攻击扫描,来自全球各地的IP,疯狂探测我的漏洞。
这不是个例。根据 Cloudflare 2025年报告,一个暴露在公网的服务器,平均每天会收到超过10万次恶意请求。
于是我花了整整一周,搭建了这套5层纵深防御体系。
现在,我的服务器稳如老狗:- # 过去7天拦截统计
- [L1 内核层] SYN Flood: 12,847 次
- [L2 Fail2Ban] 封禁IP: 2,341 个
- [L3 Lua拦截] 恶意UA: 45,892 次
- [L4 限流] 429返回: 8,234 次
- [L5 WAF] 攻击拦截: 15,678 次
复制代码 今天,我把这套方案完整开源。
[写在前面] 如果你是个人开发者、独立站长,或是需要自己管理服务器的技术爱好者,这篇文章就是为你量身打造的。我们不讲虚的,直接上代码,保证能跑。
一、架构全景:5层纵深防御
先看整体架构,理解每一层的职责:
核心设计原则:
层级位置拦截目标性能消耗技术栈L1内核SYN Flood、ICMP 洪水极低sysctl + firewalldL2宿主机协议探测、端口扫描、暴力破解低Fail2Ban + IPSetL3容器空UA、爬虫脚本、工具指纹低OpenResty LuaL4容器高频请求 (CC攻击)中Nginx limit_reqL5容器SQL注入、XSS、CVE漏洞高ModSecurity + CRS越靠前拦截,性能消耗越低。 这就是纵深防御的精髓。
二、L1 内核层:第一道防线
SYN Flood 是最常见的 DDoS 攻击方式。攻击者发送大量半连接请求,耗尽服务器资源。
解决方案:sysctl 内核参数调优 + firewalld 限速
2.1 sysctl 配置
[code]# 创建配置文件sudo bash -c 'cat > /etc/sysctl.d/99-anti-ddos.conf /etc/fail2ban/jail.d/docker-nginx.local |