快速入门:DoS 攻击在 Linux 服务器中的表现与防护目标
DoS 攻击的类型与影响
在 Linux 服务器环境中,DoS 攻击通常通过耗尽网络带宽、连接表、CPU 或内存资源来阻塞合法流量。常见类型包括 SYN flood、UDP flood、ICMP flood 以及应用层 DoS。了解这些类型有助于设计分层防护。
对比应用场景,防火墙与限速设置可以在不同层级截断攻击路径,降低对数据库、缓存和应用进程的冲击。核心防护点覆盖连接跟踪状态、队列长度以及内核参数的合理配置。
在部署阶段,记录基线性能指标(CPU、内存、网络吞吐、活动连接数)有助于快速分辨异常。基线监控是第一道防线。
核心防护要点:从内核参数到网络栈优化
调整内核参数的原则
优化目标是为合法流量留出足够资源,同时避免资源被攻击耗尽。net.core.somaxconn、net.ipv4.tcp_syncookies、net.ipv4.tcp_fin_timeout 等参数影响连接建立和半连接队列的稳定性,直接关系到对 DoS 的抵御能力。
对生产环境,建议配置 tcp_syncookies=1、增大 somaxconn、调整 tcp_tw_reuse 与 tcp_tw_recycle(新内核中需使用替代方案以兼容性与安全性),以提升对探测性连接的容忍度。
请在变更前后对比基线,并使用 sysctl 命令实时生效:
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.core.somaxconn=10240
sysctl -w net.ipv4.tcp_fin_timeout=30
防火墙策略:iptables 与 nftables 的防护策略
基本规则与连接跟踪
防火墙是第一道防线,iptables 或 nftables 能够在到达应用层前丢弃异常流量。优先建立严格的允许名单,并对未知来源进行限流或拦截,以减少攻击面的暴露。
配合 conntrack,可以依据会话状态过滤半开连接,避免资源被持续消耗。对 SYN 半连接攻击,使用 SYN cookies 或者将 backlog 调整到较高的值来缓解压力。
下面给出一个简化的 iptables 入站规则结构,包含基本的允许、拒绝与速率限制:
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 拒绝来自未知来源的直接入站
iptables -A INPUT -s 0.0.0.0/0 -j DROP
# 启用连接跟踪,保护状态机
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 限制单个源 IP 的新建连接速率(示例,不同场景需调整)
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-upto 5 --connlimit-above 2 -j DROP
nftables 的等效策略
若采用 nftables,可以通过编写简短的规则集实现同样的保护效果,便于维护且性能更优。下面给出一个简化示例:
# nftables 示例
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }
nft add rule inet filter input iifname "lo" accept
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input ip saddr 0.0.0.0/0 tcp flags syn limit rate 5/second accept
nft add rule inet filter input drop
限速与流量整形:通过 tc 限制 DoS 攻击带来的冲击
TC、Qdisc、Hashlimit 的基本应用
流量整形可以在服务器网卡层面抑制异常流量,tc 配合 pfifo、htb、tbf 等队列实现带宽限制,并为关键服务保留容量。
对新连接速率和并发连接,可以使用 hashlimit、limit 等参数实现更细粒度的限速,以确保数据库、缓存节点等核心服务在攻击时段仍然可用。
下面给出一个基于 tc 的简单示例,展示如何对入站 HTTP 流量进行限速:
# 使用 tc 对入站端口 80 的流量限速
tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:12 htb rate 1mbit ceil 1mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:12
应用层防护与日志监控:Fail2ban、IDS/IPS 与日志分析
Fail2ban 的基本用法
Fail2ban 可以监控日志,自动阻断暴力尝试,提升对应用层 DoS 的抑制能力。通过与防火墙规则结合,能够在攻击初期就执行封禁动作并产生告警。
典型场景包括对 SSH、HTTP 登录等入口的暴力尝试进行拦截,避免恶意连接耗尽应用资源。下列片段展示了一个简单的 fail2ban 配置思路:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
action = iptables[name=SSH, port=ssh, protocol=tcp]
监控与自动化响应:建立可观测的 DoS 防护链路
监控指标、告警与自动化处置
实时监控是 DoS 防护的核心,典型指标包括网络接口吞吐、错误包数量、连接数、CPU/内存利用率等。通过可视化面板,可以直观地识别异常模式并触发自动化处置流程。
将监控数据接入告警系统(如 Prometheus、Grafana 以及邮件/短信通知),可以实现 阈值告警、自愈脚本、以及与防火墙策略的快速同步。通过持续的日志分析,能够发现攻击特征并对防护规则进行迭代。
此外,定期对防护规则进行复核与更新,确保在新型攻击手段出现时仍然有效,是维持长期防护能力的关键操作。通过这套链路,从检测到响应形成闭环。


