1. 优化Nginx自身配置:限制请求速率与并发连接
Nginx内置的limit_req(请求速率限制)和limit_conn(并发连接限制)模块是基础防护手段,可有效减缓DDoS攻击的影响。
http块中创建共享内存区域,用于存储客户端IP的请求速率信息(如zone=my_limit:10m表示分配10MB内存,支持约1.6万个IP地址)。设置允许的基础速率(如rate=1r/s表示每秒1个请求)和突发容量(如burst=5表示允许5个突发请求)。server或location块中使用limit_req指令,结合nodelay参数立即处理突发请求(避免延迟响应)。例如:http {
limit_req_zone $binary_remote_addr zone=my_limit:10m rate=1r/s;
server {
location / {
limit_req zone=my_limit burst=5 nodelay;
# 其他配置...
}
}
}
limit_conn模块限制每个IP的并发连接数(如limit_conn addr 10表示每个IP最多10个并发连接),防止单个IP占用过多资源。需在http块中定义共享内存区域(如limit_conn_zone $binary_remote_addr zone=addr:10m;),并在location块中应用。这些配置能有效降低恶意流量的冲击,保障正常用户的访问体验。2. 配置系统防火墙:过滤异常流量
使用ufw(Uncomplicated Firewall)或iptables过滤无效或恶意流量,仅允许必要的端口(如HTTP 80、HTTPS 443、SSH 22)对外开放。
sudo apt install ufw),启用防火墙(sudo ufw enable),允许Nginx流量(sudo ufw allow 'Nginx Full'),并限制SSH访问(sudo ufw allow 22/tcp)。通过sudo ufw status查看规则是否生效。sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT)和每IP最大连接数(sudo iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j DROP),防止大量无效连接耗尽服务器资源。需保存规则(sudo apt install iptables-persistent,安装时选择“是”保存)。3. 部署Fail2Ban:自动封禁恶意IP
Fail2Ban通过监控Nginx日志(如access.log),识别频繁请求、异常User-Agent等行为,自动将恶意IP加入防火墙黑名单(如iptables),并设置封禁时间(如600秒)。
sudo apt install fail2ban。/etc/fail2ban/jail.local,添加Nginx监控规则:[nginx]
enabled = true
filter = nginx
action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
logpath = /var/log/nginx/access.log
bantime = 600 # 封禁600秒
findtime = 600 # 600秒内检测
maxretry = 3 # 3次违规封禁
sudo systemctl start fail2ban,并设置开机自启(sudo systemctl enable fail2ban)。4. 使用CDN服务:分布式防御与流量清洗
将Nginx服务器置于CDN(如Cloudflare、Akamai)后方,利用CDN的分布式节点吸收和过滤恶意流量(如SYN Flood、UDP Flood),仅将合法流量转发至源服务器。CDN还能缓存静态内容(如图片、CSS、JS),减少源服务器的负载压力。配置时需将域名解析至CDN提供的CNAME记录,并在CDN控制台开启DDoS防护功能(如Cloudflare的“防护中心”)。
5. 定期更新与监控:提升安全性与响应速度
sudo apt update && sudo apt upgrade,安装最新的安全补丁,修复已知漏洞(如Nginx的缓冲区溢出漏洞),降低被攻击的风险。access.log、error.log),识别异常流量模式(如短时间内大量来自同一IP的请求),及时采取应对措施。