UFW 默认不启用速率限制,需手动配置规则防御 SSH 暴力探测;执行 sudo ufw limit ssh 即可限制同一 IP 每 30 秒最多 6 次新连接,等效于插入优先级最高的 TCP 22 端口限速规则。

UFW 默认不启用速率限制,需手动配置规则才能防御 SSH 等服务的弱口令暴力探测。核心是利用 ufw limit 指令,它本质是通过 iptables 的 hashlimit 模块实现连接频率控制,对同一源 IP 在指定时间窗口内新建连接数设限。
启用 SSH 速率限制(最常用场景)
针对 SSH 服务(默认端口 22),执行以下命令即可生效:
- sudo ufw limit ssh —— 允许 SSH 连接,但限制同一 IP 每 30 秒最多发起 6 次新连接(UFW 内置默认策略)
- 等效于:sudo ufw insert 1 limit proto tcp to any port 22
- 该规则会自动插入到 UFW 链最前面,优先于其他 allow 规则,确保限速生效
自定义限速参数(需直接操作 iptables)
UFW 的 limit 命令不支持调整时间窗口和次数,如需更精细控制(例如:每分钟最多 3 次 SSH 登录尝试),需绕过 UFW,直接添加 iptables 规则,并用 ufw reload 保持兼容:
- 先禁用 UFW 自带的 SSH limit:sudo ufw delete limit ssh
- 再添加自定义规则:sudo iptables -I ufw-before-input -p tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-above 3/minute --hashlimit-burst 3 --hashlimit-mode srcip --hashlimit-name ssh --hashlimit-htable-expire 300000 -j DROP
- 保存规则(Ubuntu 22.04+ 推荐):sudo netfilter-persistent save
验证与排查要点
限速生效后,真实攻击者会被静默丢包(不返回 RST),但合法用户短时重连可能被误限。注意以下几点:
- 查看当前规则:sudo ufw status verbose,确认 “Limit” 出现在 SSH 规则描述中
- 检查底层 iptables:sudo iptables -L ufw-before-input -n | grep :22,确认 hashlimit 相关条目存在
- 测试方法:用另一台机器循环执行 ssh -o ConnectTimeout=5 user@your-server,第 7 次起应明显延迟或超时
- 误封可临时清空计数:sudo iptables -Z ufw-before-input(仅临时,重启后恢复)
UFW 的 limit 功能轻量有效,适合快速阻断自动化爆破,但不能替代密钥登录、fail2ban 等深度防护。开启后建议配合 PermitRootLogin no 和 PasswordAuthentication no 进一步加固 SSH。










