首页/安全/安全加固速查/iptables recent 模块限制 SSH 爆破
防火墙与访问控制50 条

iptables recent 模块限制 SSH 爆破

用 recent 模块对 SSH 新建连接做来源限速:60 秒内超过 4 次新连接直接丢包,压低爆破速率且不误伤已建立会话。

安全加固速查安全更新于 2026-10-13

recent 模块做限速

iptables 的 recent 模块可以按来源地址做连接限速:记录每个来源新建连接的次数,在设定时间窗口内超过阈值就丢弃后续包。用它给 22 端口的新连接做限速,可以压低爆破速率;由于只作用于 NEW 状态的连接,已经建立的会话不受影响,比整 IP 封禁更温和。

基本信息

适用平台Linux(iptables)
风险等级中
基线要求SSH 具备限速或封锁机制
使用的模块recent(xt_recent)
状态查看/proc/net/xt_recent/ 下按规则名查看

典型使用场景

  • 公网 SSH 入口的爆破速率压制
  • 与 fail2ban 配合形成缓解加封禁两层
  • 排查自动化工具被误伤的问题
  • 临时性攻击流量的削峰
  • 没有 fail2ban 环境的轻量替代方案

recent 限速模板

recent 限速模板
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSHBL   # 记录新建连接
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 4 --name SSHBL -j DROP   # 60 秒内超过 4 次新连接就丢包
iptables -L INPUT -n --line-numbers | head -10   # 查看规则是否已插入
cat /proc/net/xt_recent/SSHBL 2>/dev/null | head   # 查看被记录的来源列表
iptables-save > /etc/iptables/rules.v4   # 持久化,避免重启后丢失

参数读法

参数含义注意点
--set把来源地址记录进列表只对新建连接生效
--update检查时间窗口内的命中次数与 --seconds、--hitcount 配合
--seconds 60统计的时间窗口窗口越短越灵敏
--hitcount 4允许的新连接次数过小会误伤自动化工具
-j DROP超限后的动作丢弃比拒绝更省资源
命中后该来源在 60 秒内的新包会被丢弃,而已经建立的会话不受影响,比 fail2ban 的整 IP 封禁更温和。
recent 列表是内存态(可以在 /proc/net/xt_recent/ 下查看),重启即清空:它只是缓解层,不能当作持久防护。
hitcount 阈值设得过小(比如 2)会误伤自动化工具:Ansible 并发连接与 CI 部署常常在短时间内发起多次新连接,阈值要按实际工具行为设定。
限速规则最好与日志配合:在丢弃动作之前加一条记录规则,才能统计到攻击量级;否则被丢掉的连接不会留下任何痕迹,无法判断限速是否真的在起作用。

易错点

  • hitcount 阈值设得过小,把 Ansible 并发与 CI 部署这类自动化连接一起丢掉
  • 规则只加到运行时没有持久化,重启后限速规则消失
  • 把 recent 当成持久防护手段,忘了它只是内存态的缓解层
  • 规则插入顺序不对,限速规则相对放行规则的位置造成预期外的匹配
  • 只看规则是否写入不观察实际命中情况,限速是否生效无从判断

数据来源与参考

  • iptables-extensions(8):recent 模块
  • CIS Benchmark:SSH 访问限制条目

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌