广告图片
TOP云-靠谱的企业级公有云服务平台

云服务器、物理服务器、云安全、SSL证书限时3折抢购!

双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,

TOP云-靠谱的企业级公有云服务平台:双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,云服务器、物理服务器、云安全、SSL证书限时3折抢购!点击这里立即抢购! 展开广告

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
  第六步:验证限速效果
  使用scpsftp传输大文件,同时观察带宽占用:
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. 监控与告警联动
  结合vnstatiftop等工具监控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执行交互式命令(如topvim),验证操作响应是否流畅。良好的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云物理服务器作为底层支撑,配合本文介绍的技术方案,您的服务器将始终保持高效、稳定、可控的运行状态。

阿, 信