TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);
内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。
购买链接:https://c.topyun.vip/cart?fid=1&gid=236
在多用户共享服务器的环境中,SSH连接的资源竞争问题日益突出。某用户通过SSH进行大文件传输时,可能瞬间占满服务器带宽,导致其他用户的SSH会话严重卡顿甚至断开。对于托管大量网站或运行关键业务的TOP云物理服务器而言,缺乏有效的SSH流量控制机制将直接影响整体服务稳定性。本文将系统讲解如何利用Linux内核的tc(Traffic Control)工具与sshd配置协同工作,实现对SSH流量的精细化限速与管控。
一、为什么需要对SSH进行限速?
1. 防止带宽被单一连接耗尽
SSH协议不仅用于命令行操作,还常被用作SFTP文件传输、端口转发和隧道代理的载体。一个用户通过SFTP上传或下载数GB的文件,很容易将服务器的上行或下行带宽完全占满。在TOP云物理服务器提供的20M-200M独享带宽环境中,虽然带宽资源充裕,但若缺乏管控,单点滥用仍会影响全局。
2. 保障管理通道的优先级
SSH是服务器的”生命线”,必须确保其管理流量始终拥有最高优先级。当服务器同时承载Web服务、数据库查询和文件传输时,tc可以为SSH数据包标记更高的QoS等级,确保紧急运维操作不受业务流量冲击。
3. 防范暴力破解的资源消耗
遭受SSH暴力破解攻击时,攻击者会发起大量并发连接请求。通过tc限制每个IP的SSH连接速率和带宽,可以在不阻断合法访问的前提下,大幅降低攻击对系统资源的消耗。
4. 多租户环境的公平性保障
对于提供Shell访问权限的共享主机或跳板机,tc与sshd的配合能够确保每位用户获得公平的带宽配额,避免”一家独大”的情况发生。
二、sshd层的连接控制配置
在深入tc流量整形之前,首先应利用OpenSSH服务端自带的限制功能进行第一层防护。编辑
/etc/ssh/sshd_config文件,添加或修改以下参数: 1. 限制并发连接数
bash
# 每个用户最多允许3个并发登录
MaxSessions 3
# 整个服务器最多允许50个并发SSH连接
MaxStartups 50
# 未认证连接的最大数量,格式为 start:rate:full
# 表示当未认证连接达到10个时,以30%的概率拒绝新连接,达到60个时全部拒绝
MaxStartups 10:30:60
2. 限制认证尝试频率
bash
# 每个连接最多允许3次密码尝试
MaxAuthTries 3
# 登录失败后的延迟时间(秒),可减缓暴力破解速度
LoginGraceTime 60
3. 禁用高带宽消耗功能
bash
# 禁止TCP转发,防止用户将SSH作为代理隧道滥用带宽
AllowTcpForwarding no
# 禁止X11转发,减少不必要的流量开销
X11Forwarding no
4. 按用户或用户组差异化限制
bash
# 对特定用户组放宽限制
Match Group admin
AllowTcpForwarding yes
MaxSessions 10
# 对普通用户严格限制
Match Group users
MaxSessions 1
AllowTcpForwarding no
修改完成后,执行以下命令使配置生效:
bash
sudo systemctl restart sshd
三、tc工具核心原理与基础命令
tc(Traffic Control)是Linux内核网络协议栈中的流量控制框架,工作在数据链路层与网络层之间。它通过队列规则(Qdisc)、分类器(Classifier)和过滤器(Filter)三个核心组件,实现对数据包的发送速率、优先级和延迟的精确控制。
核心概念图解:
plain
数据包出站流程:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 应用程序 │ → │ 过滤器 │ → │ 队列规则 │
│ (SSH/sshd) │ │ (识别SSH包) │ │ (限速整形) │
└─────────────┘ └─────────────┘ └─────────────┘
↓
┌─────────────┐
│ 网卡发送 │
└─────────────┘
常用tc命令速查:
表格
| 命令 | 功能说明 |
|---|---|
tc qdisc show dev eth0 |
查看网卡当前队列规则 |
tc class show dev eth0 |
查看已创建的流量分类 |
tc filter show dev eth0 |
查看数据包过滤规则 |
tc qdisc del dev eth0 root |
清空网卡所有tc规则(重置) |
四、实战:为SSH流量设置带宽上限
以下方案以eth0网卡为例,将SSH出站流量限制在5Mbps,同时保障其最低带宽为2Mbps。
第一步:创建根队列规则(HTB)
HTB(Hierarchical Token Bucket)是tc中最常用的队列规则,支持层次化的带宽分配。
bash
sudo tc qdisc add dev eth0 root handle 1: htb default 12
解释:
handle 1:为根队列指定标识符;default 12表示未匹配任何分类的数据包进入12类(默认类)。 第二步:创建根类并分配总带宽
bash
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 15k
解释:假设服务器总带宽为100Mbps,创建一个根类1:1承载全部流量。
第三步:创建SSH专属子类
bash
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 5mbit burst 15k
参数详解:
表格
| 参数 | 含义 |
|---|---|
rate 2mbit |
保证带宽(最低保障) |
ceil 5mbit |
上限带宽(最高允许) |
burst 15k |
突发流量容忍量 |
第四步:创建默认子类(承载其他流量)
bash
sudo tc class add dev eth0 parent 1:1 classid 1:12 htb rate 80mbit ceil 100mbit
第五步:添加过滤器识别SSH流量
SSH默认使用TCP 22端口,通过以下命令将目标端口为22的数据包归入1:10类:
bash
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 22 0xffff flowid 1:10
如果需要同时限制SSH入站流量,还需在入站方向配置Ingress规则:
bash
sudo tc qdisc add dev eth0 handle ffff: ingress
sudo tc filter add dev eth0 parent ffff: protocol ip prio 1 u32 \
match ip sport 22 0xffff police rate 5mbit burst 15k drop
第六步:验证限速效果
使用
scp或sftp传输大文件,同时观察带宽占用:bash
# 实时监控网卡流量
watch -n 1 'tc -s class show dev eth0'
您将看到1:10类的发送速率稳定在5Mbps以内,不会超过设定的上限。
五、进阶:基于用户IP的差异化限速
在多用户共享服务器场景中,可能需要对不同用户或用户组实施差异化的带宽策略。以下示例为管理员IP(192.168.1.100)提供无限制带宽,为普通用户网段(192.168.2.0/24)限制SSH带宽为3Mbps。
第一步:清空现有规则
bash
sudo tc qdisc del dev eth0 root 2>/dev/null
sudo tc qdisc del dev eth0 ingress 2>/dev/null
第二步:重建HTB结构
bash
sudo tc qdisc add dev eth0 root handle 1: htb default 30
# 根类
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 200mbit
# 管理员类:无限制
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 200mbit ceil 200mbit
# 普通用户类:限速3Mbps
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 3mbit burst 10k
# 默认类:其他流量
sudo tc class add dev eth0 parent 1:1 classid 1:30 htb rate 150mbit ceil 200mbit
第三步:添加IP过滤器
bash
# 管理员IP放行
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip src 192.168.1.100 match ip dport 22 0xffff flowid 1:10
# 普通用户网段限速
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 \
match ip src 192.168.2.0/24 match ip dport 22 0xffff flowid 1:20
# 其他SSH连接归入默认类
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \
match ip dport 22 0xffff flowid 1:30
此方案的核心优势在于源IP识别,tc的u32过滤器可以根据数据包的源地址进行精确匹配,实现”一人一策”的精细化管控。
六、自动化:开机自动加载tc规则
tc规则在系统重启后会丢失,必须通过脚本实现持久化。创建
/etc/network/if-up.d/tc-ssh-limit文件:bash
sudo nano /etc/network/if-up.d/tc-ssh-limit
写入以下内容:
bash
#!/bin/bash
IFACE="eth0"
# 清空旧规则
tc qdisc del dev $IFACE root 2>/dev/null
tc qdisc del dev $IFACE ingress 2>/dev/null
# 出站限速
tc qdisc add dev $IFACE root handle 1: htb default 12
tc class add dev $IFACE parent 1: classid 1:1 htb rate 100mbit
tc class add dev $IFACE parent 1:1 classid 1:10 htb rate 2mbit ceil 5mbit
tc class add dev $IFACE parent 1:1 classid 1:12 htb rate 80mbit ceil 100mbit
tc filter add dev $IFACE protocol ip parent 1:0 prio 1 u32 \
match ip dport 22 0xffff flowid 1:10
# 入站限速
tc qdisc add dev $IFACE handle ffff: ingress
tc filter add dev $IFACE parent ffff: protocol ip prio 1 u32 \
match ip sport 22 0xffff police rate 5mbit burst 15k drop
赋予执行权限:
bash
sudo chmod +x /etc/network/if-up.d/tc-ssh-limit
对于使用NetworkManager的系统,也可将脚本放入
/etc/NetworkManager/dispatcher.d/目录,在网卡状态变化时自动触发。七、tc与sshd协同的最佳实践
1. 分层防御策略
将sshd的连接数限制作为第一道防线,tc的带宽限制作为第二道防线。前者控制连接规模,后者控制单连接资源消耗,两者互补形成完整的防护体系。
2. 动态调整机制
对于业务高峰期和低谷期,可编写定时任务(cron)动态调整tc规则。例如,工作时段将SSH带宽上限提升至10Mbps,非工作时段降至2Mbps:
bash
# 编辑crontab
sudo crontab -e
# 工作日9:00放宽限制
0 9 * * 1-5 /usr/local/bin/tc-adjust.sh 10mbit
# 工作日18:00收紧限制
0 18 * * 1-5 /usr/local/bin/tc-adjust.sh 2mbit
3. 监控与告警联动
结合
vnstat、iftop等工具监控SSH流量,当某个连接的带宽持续超过阈值时,自动触发iptables规则临时封禁该IP,并发送告警邮件。 4. 结合Fail2Ban增强安全
Fail2Ban可以识别异常SSH登录行为并封禁IP,而tc负责限制正常连接的资源占用。两者配合,既防攻击又保公平。
八、性能测试与效果验证
在TOP云物理服务器上部署tc限速后,建议使用以下方法验证效果:
1. 带宽基准测试
bash
# 在服务器上安装iperf3
sudo apt install iperf3 -y
iperf3 -s
# 在客户端测试
iperf3 -c your-server-ip -p 22
观察传输速率是否被限制在设定值以内。
2. 多连接并发测试
bash
# 同时开启5个SFTP传输
for i in {1..5}; do
sftp -P 22 user@server:/largefile.zip /dev/null &
done
检查每个连接是否公平分配带宽配额。
3. 延迟敏感性测试
在进行大文件传输的同时,通过SSH执行交互式命令(如
top、vim),验证操作响应是否流畅。良好的tc配置应确保交互式流量优先于批量传输。九、选择适合流量控制的硬件基础
tc的流量整形效果与服务器的网络硬件性能密切相关。在高并发场景下,CPU需要处理大量的数据包分类和队列调度运算,对处理器性能提出了较高要求。TOP云物理服务器提供从双路E5-2660(32核)到双路Platinum 8173(112核)的多种CPU配置,能够轻松应对tc带来的额外计算开销。
此外,独享带宽是tc限速方案生效的前提。共享带宽环境中,tc只能控制本机的出站速率,无法干预同一物理机上其他虚拟机对网络资源的争抢。TOP云物理服务器提供的单线/多线独享20M-200M带宽,确保tc规则在真实、稳定的网络环境中精准生效。内存方面,32G-128G的可选配置为运行大量并发SSH会话和tc队列提供了充足的缓冲空间。
十、常见问题排查
Q1:tc规则添加后SSH连接变慢?
检查
rate参数是否设置过低。rate是保证带宽,如果设置为1Mbps而实际SSH操作需要更高带宽,体验会明显下降。建议将rate设为2Mbps以上,ceil根据总带宽合理分配。 Q2:tc规则不生效?
确认网卡名称是否正确(使用
ip link show查看),以及过滤器条件是否匹配SSH流量。可通过tc filter show dev eth0查看规则是否加载。 Q3:如何临时取消限速?
bash
sudo tc qdisc del dev eth0 root
sudo tc qdisc del dev eth0 ingress
Q4:tc与iptables的限速有什么区别?
iptables的
limit模块主要用于控制连接频率(如每秒新建连接数),而tc用于控制带宽速率(如每秒传输字节数)。两者功能互补,通常配合使用。结语
SSH限速与流量控制是服务器精细化管理的重要环节。通过sshd的连接限制构建第一道防线,借助tc的HTB队列实现带宽的层次化分配,再辅以自动化脚本确保规则持久化,即可打造一套完整的SSH资源管控方案。无论是防止单用户滥用带宽、保障管理通道优先级,还是提升多租户环境的公平性,这套组合拳都能游刃有余。选择一台性能强劲的TOP云物理服务器作为底层支撑,配合本文介绍的技术方案,您的服务器将始终保持高效、稳定、可控的运行状态。




