iptables不能彻底阻止大规模ddos,但能有效缓解syn flood、连接耗尽等攻击,核心是限速、限连、放合法、拦异常:用connlimit限制单ip并发连接数,limit控制新建连接速率,过滤异常tcp标志包,并配合ipset屏蔽恶意ip,同时设默认drop策略、放行回环与已建立连接,启用tcp_syncookies增强内核防护。

iptables 本身不能彻底阻止大规模 DDoS,但它能有效缓解常见攻击类型(如 SYN Flood、连接耗尽、HTTP 扫描),尤其适合中小型服务在没有专业清洗设备时的初级防护。关键不是堆规则,而是抓住“限速、限连、放合法、拦异常”四个核心逻辑。
限制单 IP 并发连接数
攻击者常靠大量短连接或半开连接拖垮服务。用 connlimit 模块直接控制每个源 IP 的活跃连接上限:
- 对 Web 服务(端口 80/443)设阈值:比如允许最多 50 个并发 TCP 连接
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP - 对 SSH(端口 22)更严格些,设为 5 或 10,防暴力扫描:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 -j DROP - 搭配
recent模块可自动封禁超限 IP(例如 60 秒内触发 3 次超限即拉黑 300 秒)
控制新建连接速率
SYN Flood 是最典型的 DDoS 手段之一。限制每秒新 SYN 包数量,能大幅降低资源消耗:
- 允许每秒最多 1 个新 SYN 请求,突发容忍 5 个:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 5 -j ACCEPT - 所有未匹配上述规则的 SYN 包一律丢弃:
iptables -A INPUT -p tcp --syn -j DROP - 注意:该策略对高并发正常业务(如 CDN 回源)可能误伤,需结合实际流量基线调整数值
过滤异常数据包与低效请求
很多攻击依赖畸形包或非常规 TCP 标志组合。iptables 可提前识别并丢弃:
- 拒绝非法 TCP 标志组合(如 SYN+FIN、SYN+RST),这类包几乎只出现在扫描或攻击中:
iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN,RST,PSH,ACK,URG -j DROP - 屏蔽已知恶意 IP 段或历史攻击源(建议配合 IPSet 管理黑名单,提升匹配效率):
ipset create attackers hash:ipiptables -A INPUT -m set --match-set attackers src -j DROP - 关闭不必要的 ICMP 响应(如 ping),减少反射攻击面:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
保障基础通信与规则持久化
再强的防护规则,若影响自身运维或重启失效,就失去意义:
- 默认策略设为 DROP,但必须先放行回环、已建立连接和关键服务:
iptables -P INPUT DROPiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - 所有规则需保存,否则重启清空。Debian/Ubuntu 用:
iptables-save > /etc/iptables/rules.v4
CentOS 7+ 推荐使用iptables-services或 systemd 脚本固化 - 启用内核级 SYN Cookie(无需 iptables 规则,但必须开启):
echo 1 > /proc/sys/net/ipv4/tcp_syncookies(永久生效写入/etc/sysctl.conf)
这些配置不依赖额外软件,生效快、资源占用低。实际部署时建议先用 iptables -L -v -n 观察命中计数,再逐步收紧阈值。真正的大流量攻击仍需上游 ISP 或云厂商的流量清洗支持,iptables 是守门人,不是城墙。











