Ubuntu LNMP服务器防止DDoS攻击的综合策略
使用ufw(Uncomplicated Firewall)或iptables限制不必要的入站流量,仅开放必需端口(如SSH的22/tcp、HTTP的80/tcp、HTTPS的443/tcp),默认拒绝所有入站请求。例如,ufw的基础配置命令:
sudo ufw enable && sudo ufw default deny incoming && sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
通过iptables可进一步限制单IP连接速率,如限制80端口每秒最多接受5个新连接:
sudo iptables -A INPUT -p tcp --syn --dport 80 -m limit --limit 5/s -j ACCEPT && sudo iptables -A INPUT -p tcp --syn --dport 80 -j DROP
通过Nginx内置模块控制并发连接和请求速率,避免单个IP占用过多资源:
http块中定义共享内存区域(如addr zone,10MB大小),并在server或location块中设置单IP最大连接数为10:http { limit_conn_zone $binary_remote_addr zone=addr:10m; }
server { limit_conn addr 10; }
limit_req_zone定义请求速率(如one zone,10MB大小,每秒1个请求),并通过burst参数允许突发请求(如5个),nodelay表示立即处理突发请求:http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; }
server { location / { limit_req zone=one burst=5 nodelay; } }
安装fail2ban监控Nginx日志(/var/log/nginx/access.log),自动封禁频繁发起恶意请求的IP(如60秒内失败3次,封禁10分钟):
sudo apt-get install fail2ban
sudo systemctl enable fail2ban && sudo systemctl start fail2ban
创建自定义配置文件/etc/fail2ban/jail.local,添加以下内容:
[nginx]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 600
使用Cloudflare等CDN服务,将域名解析到CDN节点IP,而非服务器真实IP,由CDN分散流量并缓存静态内容(如图片、CSS、JS),减轻服务器压力。配置时需关闭Nginx的real_ip模块(若开启),避免泄露真实IP。
安装ModSecurity(开源WAF),通过规则集(如OWASP Core Rule Set)识别并阻止SQL注入、跨站脚本(XSS)、慢速HTTP攻击等恶意请求。安装命令示例:
sudo apt-get install libapache2-mod-security2
sudo systemctl enable apache2-mod-security2 && sudo systemctl start apache2-mod-security2
需将Nginx配置为反向代理转发请求至Apache(若使用Apache作为WAF),或在Nginx中集成ModSecurity模块。
SET GLOBAL命令调整最大连接数(如100),避免数据库因过多连接崩溃:SET GLOBAL max_connections = 100;apt-get update && apt-get upgrade更新Ubuntu系统、Nginx、MySQL、PHP等软件,修补已知安全漏洞。htop(查看CPU/内存)、iftop(查看网络流量)、iotop(查看磁盘IO)等工具监控服务器状态,及时发现异常流量(如突然激增的80端口请求)。