Linux 系统防御 DDoS/DOS 攻击的全面指南
DDoS(分布式拒绝服务)和 DOS(拒绝服务)攻击通过耗尽服务器资源(带宽、CPU、连接数)使服务瘫痪。Linux 系统可通过以下多层防护策略有效缓解此类攻击。
一、基础防护措施
1. 启用内核级防护
Linux 内核提供内置的抗 SYN Flood 和连接限制功能:
bash
复制
下载
# 启用 SYN Cookie 防御(防 SYN Flood)echo 1 > /proc/sys/net/ipv4/tcp_syncookies# 减少 SYN 连接超时时间(加速回收半连接)echo 30 > /proc/sys/net/ipv4/tcp_synack_retries# 限制单个 IP 的最大连接数echo \"net.ipv4.netfilter.ip_conntrack_max = 65536\" >> /etc/sysctl.confsysctl -p
2. 防火墙配置(iptables/nftables)
限制新建连接速率
bash
复制
下载
# 允许已建立的连接通过iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT# 限制单个 IP 的并发连接数iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j DROP# 限制每秒新连接数(防 CC 攻击)iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
封禁恶意 IP
bash
复制
下载
# 手动封禁 IPiptables -A INPUT -s 攻击者IP -j DROP# 自动封禁频繁连接 IP(通过 fail2ban,见后文)
二、应用层防护
3. Web 服务器优化(Nginx/Apache)
Nginx 限流配置
nginx
复制
下载
http { limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; server { # 限制单个 IP 并发连接数 limit_conn conn_limit_per_ip 20; # 限制请求速率(防 CC 攻击) limit_req zone=req_limit_per_ip burst=30 nodelay; }}
Apache 防护模块
apache
复制
下载
# 启用 mod_evasive(防高频请求)<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1</IfModule>
4. 使用 Fail2Ban 自动封禁
Fail2Ban 监控日志并自动封禁恶意 IP:
bash
复制
下载
# 安装apt install fail2ban # Debian/Ubuntuyum install fail2ban # CentOS/RHEL# 配置 SSH 防护(/etc/fail2ban/jail.local)[sshd]enabled = truemaxretry = 3bantime = 1h
三、网络层防护
5. 启用 SYN Proxy 或 TCP 拦截
bash
复制
下载
# 使用 iptables 的 SYN Proxyiptables -t raw -A PREROUTING -p tcp --syn -j CT --notrackiptables -A INPUT -p tcp -m conntrack --ctstate INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
6. 启用 Cloudflare 或 DDoS 防护服务
-
免费方案:Cloudflare(开启 “Under Attack Mode”)
-
企业方案:AWS Shield、阿里云 DDoS 防护
四、系统资源加固
7. 限制进程资源(防资源耗尽)
bash
复制
下载
# 使用 ulimit 限制用户进程ulimit -n 65535 # 最大文件描述符数ulimit -u 500 # 最大用户进程数# 使用 cgroups 限制服务资源systemd-run --unit=limit-service --scope -p MemoryLimit=1G -p CPUQuota=50% /path/to/service
8. 禁用不必要服务
bash
复制
下载
# 关闭 ICMP 响应(减少 Ping Flood 影响)echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all# 停用 IPv6(若无需使用)sysctl -w net.ipv6.conf.all.disable_ipv6=1
五、监控与应急响应
9. 实时监控工具
bash
复制
下载
# 查看当前连接数netstat -ant | awk \'{print $6}\' | sort | uniq -c# 检测高流量 IPiftop -n -P # 实时流量监控vnstat -l # 带宽统计# 使用 ntopng 分析流量ntopng -i eth0 -w 3000
10. 应急脚本(自动封禁攻击 IP)
bash
复制
下载
#!/bin/bash# 自动封禁 1 分钟内访问超过 100 次的 IPnetstat -ntu | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -n | tail -10 | while read linedo ip=$(echo $line | awk \'{print $2}\') count=$(echo $line | awk \'{print $1}\') if [ $count -gt 100 ]; then iptables -A INPUT -s $ip -j DROP echo \"$(date) Banned $ip ($count connections)\" >> /var/log/ddos.log fidone
六、总结:防御矩阵
sysctl -w net.ipv4.tcp_syncookies=1
limit_req
,fail2ban
iptables -A INPUT -p udp -j DROP
iptables -A INPUT -p udp --dport 53 -m limit --limit 5/s -j ACCEPT
sysctl -w net.ipv4.conf.all.rp_filter=1
关键建议:
-
多层防护:结合网络层(iptables)、应用层(Nginx/Apache)、服务层(Cloudflare)防御。
-
持续监控:使用
vnstat
、ntopng
等工具分析流量异常。 -
自动化响应:通过 Fail2Ban 或自定义脚本快速封禁攻击源。
通过以上措施,Linux 服务器可有效抵御大多数 DDoS/DOS 攻击,保障服务稳定性。