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.conf
sysctl -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

复制

下载

# 手动封禁 IP
iptables -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/Ubuntu
yum install fail2ban  # CentOS/RHEL

# 配置 SSH 防护(/etc/fail2ban/jail.local)
[sshd]
enabled = true
maxretry = 3
bantime = 1h

三、网络层防护

5. 启用 SYN Proxy 或 TCP 拦截

bash

复制

下载

# 使用 iptables 的 SYN Proxy
iptables -t raw -A PREROUTING -p tcp --syn -j CT --notrack
iptables -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

# 检测高流量 IP
iftop -n -P  # 实时流量监控
vnstat -l    # 带宽统计

# 使用 ntopng 分析流量
ntopng -i eth0 -w 3000

10. 应急脚本(自动封禁攻击 IP)

bash

复制

下载

#!/bin/bash
# 自动封禁 1 分钟内访问超过 100 次的 IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -10 | while read line
do
    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
    fi
done

六、总结:防御矩阵

攻击类型 防护措施 工具/命令
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 攻击,保障服务稳定性。

【版权声明】:服务器导航网所有内容均来自网络和部分原创,若无意侵犯到您的权利,请及时与联系 QQ 2232175042,将在48小时内删除相关内容!!

给TA服务器
共{{data.count}}人
人已服务器
其它教程

网站申请HTTPS证书的十大核心原因

2025-7-19 10:57:28

美国VPS

BuyVM,VPS云服务器/块存储补货消息,AMD Ryzen 3900x+NVMe,AMD高性能VPS+超便宜块存储,1Gbps带宽不限流量低至2美元/月

2022-12-24 10:48:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索