SYN Flood攻击可通过iptables和conntrack有效缓解。1. 限制每IP并发连接数,使用connlimit模块阻止超过阈值的SYN请求;2. 利用hashlimit控制单位时间内新连接速率,防止突发流量耗尽资源;3. 启用tcp_syncookies、调整synack重试次数和max_syn_backlog提升系统级防护;4. 结合recent模块封禁频繁异常IP,配合日志记录实现动态拦截。需确保nf_conntrack模块加载,规则顺序正确,阈值根据业务合理设置,从而在无硬件支持下显著增强防御能力。
SYN Flood 是一种常见的 DDoS 攻击方式,攻击者通过大量伪造的 TCP SYN 请求耗尽服务器的连接资源,导致正常用户无法建立连接。在 Linux 系统中,结合 iptables 和 conntrack 模块可以有效缓解此类攻击。以下是具体防御方法。
1. 限制每 IP 的并发连接数使用 conntrack 跟踪连接状态,配合 iptables 限制每个客户端 IP 建立的并发连接数量,防止单个源发起大量连接。
示例规则:
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j REJECT --reject-with tcp-reset说明:对发起新 TCP 连接(SYN 包)的源 IP,若其当前并发连接数超过 50,则拒绝并返回 TCP RST 包。数值可根据实际业务调整,如 Web 服务一般用户不会同时建立上百个连接。
2. 限制单位时间内的新连接速率
使用 iptables 的hashlimit模块控制每个 IP 在一定时间内可建立的新连接数,抵御短时间爆发式请求。
iptables -A INPUT -p tcp --syn -m hashlimit \--hashlimit-name syn_flood \--hashlimit-mode srcip \--hashlimit 3/sec \--hashlimit-burst 10 \-j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP说明:允许每个源 IP 每秒最多发起 3 个新的 SYN 请求,突发允许最多 10 个。超出阈值的 SYN 包将被丢弃。注意规则顺序,先 ACCEPT 再 DROP,确保逻辑正确。
CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
3. 启用系统级防护参数(辅助)
虽然不属于 iptables/conntrack,但合理配置内核参数能增强整体抗性:开启 SYN Cookies:防止半开连接表溢出echo 1 > /proc/sys/net/ipv4/tcp_syncookies减少 SYN 超时时间:echo 30 > /proc/sys/net/ipv4/tcp_synack_retries增大连接队列容量
(适用于高流量服务):
echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog 4. 封禁异常连接行为的 IP(可选)
结合日志和脚本,识别频繁触发限速规则的 IP,并临时加入黑名单。
iptables -A INPUT -m recent --name BADIP --rcheck --seconds 3600 --hitcount 5 -j DROP配合前面规则记录异常 IP:iptables -A INPUT -p tcp --syn -m hashlimit ... -j LOG --log-prefix "SYN FLOOD: "iptables -A INPUT -p tcp --syn -m recent --name BADIP --set -j DROP基本上就这些。iptables + conntrack 提供了灵活且高效的防御机制,关键在于根据实际流量特征设置合理的阈值。配合系统参数调优,可在不依赖外部硬件的情况下显著提升服务器抗 SYN Flood 能力。不复杂但容易忽略细节,比如规则顺序和模块加载。确保nf_conntrack模块已加载(modprobe nf_conntrack),否则相关匹配将失效。
