在Linux云服务器上,攻击者常通过脚本在几秒内发起成百上千个TCP连接,消耗系统资源。利用iptables自带的recent和state模块,我们可以根据源IP的新建连接频率动态丢弃数据包,实现轻量级的并发连接防护。

一、原理说明
iptables的recent模块能记录每个源IP访问指定规则的次数和时间。配合-m state --state NEW匹配新建连接,我们就能统计某个IP在最近一段时间内的连接次数,超过阈值就拒绝。
二、基础防护规则示例
以下脚本限制每个IP在60秒内最多建立20个新连接,超出则丢弃后续新连接请求:
#!/bin/bash # 清空filter表相关链(按需使用) iptables -F # 允许已建立和相关状态的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 对TCP新连接,记录源IP到recent列表sshguard(名称自定) iptables -A INPUT -p tcp -m state --state NEW -m recent --set --name connlimit # 如果60秒内同一IP新连接数超过20,则丢弃 iptables -A INPUT -p tcp -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name connlimit -j DROP # 开放必要服务端口,例如SSH和Web iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 设置默认策略(视业务而定) iptables -P INPUT DROP
三、参数解释
- --set:将数据包源IP加入指定名称的列表并刷新时间戳。
- --update:更新列表中IP的时间戳,并判断是否满足后续条件。
- --seconds 60:统计时间窗口为60秒。
- --hitcount 20:时间窗口内最大命中次数。
四、查看与清理
查看当前被记录的IP可使用如下命令:
# 查看recent列表内容(路径因内核而异) cat /proc/net/xt_recent/connlimit
若需手动解封某个误伤IP,可用以下方式移除记录:
# 向列表写入-IP实现删除 echo -192.168.0.1 > /proc/net/xt_recent/connlimit
五、注意事项
云服务器若有安全组,建议同时在厂商控制台配置访问限制,iptables作为系统层补充。规则调试阶段可将DROP改为LOG,观察日志确认无误后再丢弃。
通过上述配置,Linux云服务器便具备了对短时间内大量并发连接的基础拦截能力,且无需额外安装软件,适合大多数轻量业务场景。