当Nginx服务器遭遇DDoS攻击时,可以采取以下多层次防御措施:
限制连接速率
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
limit_req zone=req_limit burst=20;
limit_conn conn_limit 10;
}
限制单个IP连接数
http {
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn perip 20;
}
启用SYN Cookie防护
sysctl -w net.ipv4.tcp_syncookies=1
使用Nginx的ngx_http_limit_req_module模块
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5;
}
}
}
配置Nginx缓存
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
}
}
启用HTTP/2和Gzip压缩
http {
gzip on;
gzip_types text/plain application/json;
server {
listen 443 ssl http2;
}
}
使用Cloudflare或其他CDN服务
部署Fail2Ban
# 安装Fail2Ban
apt-get install fail2ban
# 配置Nginx相关规则
使用专业的DDoS防护服务
临时封禁IP
location / {
deny 192.168.1.1;
allow all;
}
启用Nginx的auth_basic
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
切换至维护模式
location / {
return 503;
error_page 503 @maintenance;
}
location @maintenance {
rewrite ^(.*)$ /maintenance.html break;
}
实时监控工具
# 查看实时连接
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
# Nginx状态监控
ngxtop
日志分析
# 分析访问日志
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 20
以上措施应根据实际攻击类型和规模灵活组合使用,建议从基础防御开始,逐步升级防护级别。对于大规模DDoS攻击,建议寻求专业安全服务支持。