在 CentOS 上给 SSH 限速,常见有几种做法,取决于你是想:
下面分别说明。
pam_limits(仅限制会话资源,不精准限速)不推荐用于真正“限速”,但可以保证不占用过多资源。
tc(Traffic Control,系统级限速)✅推荐示例:限制整台服务器的 SSH(22端口)带宽为 1Mbps
# 清空原有规则
tc qdisc del dev eth0 root
# 添加根队列
tc qdisc add dev eth0 root handle 1: htb default 10
# 创建类(1Mbps = 1024kbit)
tc class add dev eth0 parent 1: classid 1:10 htb rate 1024kbit ceil 1024kbit
# 使用 iptables 标记 SSH 流量
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 10
iptables -t mangle -A INPUT -p tcp --dport 22 -j MARK --set-mark 10
# 将标记流量放入限速类
tc filter add dev eth0 parent 1: protocol ip handle 10 fw flowid 1:10
✅ 适合:
⚠ 注意:
eth0 改成你的网卡名(ip addr 查看)fail2ban(最推荐)yum install epel-release -y
yum install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban
配置文件 /etc/fail2ban/jail.local:
[sshd]
enabled = true
maxretry = 3
bantime = 3600
findtime = 600
✅ 效果:
iptables 限制连接速率iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
-m limit --limit 3/min --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
✅ 效果:
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 512kbit
iptables -t mangle -A INPUT -s 192.168.1.100 -j MARK --set-mark 10
tc filter add dev eth0 parent 1: protocol ip handle 10 fw flowid 1:10
❌ SSH 服务端没有直接的“限速参数”
但客户端可以:
scp -l 800 file user@host:/path
-l 单位是 Kbit/s| 需求 | 推荐方案 |
|---|---|
| 限制 SSH 总带宽 | tc + iptables |
| 防止 SSH 爆破 | fail2ban |
| 限制连接频率 | iptables limit |
| 客户端限速 | scp -l |
如果你能说明:
我可以给你一份可直接用的脚本。