温馨提示×

如何在Debian SFTP中配置传输速率限制

小樊
34
2025-12-06 02:14:24
栏目: 智能运维

在 Debian 上限制 SFTP 传输速率的可行方案

方案一 系统级流量整形 tc 按端口限速(推荐)

  • 适用场景:需要对所有 SFTP(端口 22)或指定端口的流量进行限速,粒度到主机、用户或进程均可扩展。
  • 步骤:
    1. 安装工具 sudo apt-get update sudo apt-get install iproute2
    2. 对接口 eth0 设置根队列与类(示例限速 1 Mbps) 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 1mbit sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit
    3. 按端口匹配 SFTP 流量(22) sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
    4. 验证 tc -s qdisc ls dev eth0 tc -s class ls dev eth0
    5. 清理 sudo tc qdisc del dev eth0 root
  • 说明:将接口名(如 eth0)替换为你的实际网卡;如需按源/目的 IP、用户(结合 cgroups)、或端口范围细化,可扩展 filter 规则。上述命令为永久生效的流量整形示例,重启后需按需重新应用。

方案二 按用户或进程限速 trickle(应用层)

  • 适用场景:仅对某个 SFTP 用户的会话限速,或临时测试;无需改动系统网络栈。
  • 步骤:
    1. 安装 sudo apt-get update sudo apt-get install trickle
    2. 以受限用户启动 SFTP 会话 trickle -d 512 -u 256 sftp user@host

      以上将下载限速为 512 KB/s,上传限速为 256 KB/s(trickle 单位为 KB/s)

  • 说明:trickle 通过 LD_PRELOAD 影响进程的 socket 层,适合临时或单用户限速;对系统服务进程注入需谨慎,且可能与部分程序不兼容。

方案三 使用 rssh 的带宽限制(替代 SFTP 服务)

  • 适用场景:可改用 rssh 作为受限的 SFTP 网关/服务,直接提供带宽限制能力。
  • 步骤:
    1. 安装 sudo apt-get update sudo apt-get install rssh
    2. 配置 /etc/rssh.conf(示例限速 1 MB/s) limitbandwidth yes bandwidthlimit 1024
    3. 重启服务 sudo systemctl restart rssh
  • 说明:rssh 功能相对简单,若需更复杂的 SFTP 集成与系统统一认证,仍建议以 OpenSSH 为主并采用方案一/二。

常见注意事项

  • 单位换算:1 Mbps ≈ 128 KB/s;配置限速时请区分 Mb/s(兆比特每秒)MB/s(兆字节每秒)
  • 接口与端口:tc 限速依赖网卡名(如 eth0)与端口(默认 22);若 SFTP 使用非标准端口,需相应调整 filter。
  • 生效与回滚:修改网络整形规则前建议记录当前规则(tc -s …),变更后及时验证;必要时保留清理命令以便快速回滚。
  • 方案选择:系统级(tc)适合全局与稳定策略;应用层(trickle)适合临时与单用户;rssh 适合替代方案与简单场景。

0