> 文章列表 > Linux 系统防御 DDoS/DOS 攻击的全面指南

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

六、总结:防御矩阵

攻击类型 防护措施 工具/命令 SYN Flood 启用 SYN Cookie + 限制半连接 sysctl -w net.ipv4.tcp_syncookies=1 CC 攻击 Web 服务器限速 + Fail2Ban Nginx limit_reqfail2ban UDP Flood 禁用无关 UDP 服务 iptables -A INPUT -p udp -j DROP DNS 放大攻击 限制 DNS 查询速率 iptables -A INPUT -p udp --dport 53 -m limit --limit 5/s -j ACCEPT IP 欺骗 启用反向路径过滤(RPF) sysctl -w net.ipv4.conf.all.rp_filter=1

关键建议

  1. 多层防护:结合网络层(iptables)、应用层(Nginx/Apache)、服务层(Cloudflare)防御。

  2. 持续监控:使用 vnstatntopng 等工具分析流量异常。

  3. 自动化响应:通过 Fail2Ban 或自定义脚本快速封禁攻击源。

通过以上措施,Linux 服务器可有效抵御大多数 DDoS/DOS 攻击,保障服务稳定性。