温馨提示×

Linux SFTP如何限制带宽

小樊
46
2026-08-15 19:35:23
栏目: 智能运维

在 Linux 上限制 SFTP 带宽,常见做法有 服务器限速客户端限速 两大类。下面按推荐程度可操作性给你讲清楚。


一、✅ 服务器端限速(推荐)

方案一:使用 OpenSSH + pam_limited / iptables / tc(不推荐)

OpenSSH 本身不支持直接限制 SFTP 带宽,因此常用做法是在 系统层用户层 进行限速。


✅ 方案二:使用 ProFTPD + mod_sftp(最稳定方案)

如果你可以换 SFTP 服务器,ProFTPD 原生支持 SFTP 限速。

1️⃣ 安装 ProFTPD(支持 SFTP)

yum install proftpd proftpd-sftp   # CentOS/RHEL
# 或
apt install proftpd-sftp           # Debian/Ubuntu

2️⃣ 启用 SFTP 模块

vim /etc/proftpd/modules.conf

确保:

LoadModule mod_sftp.c

3️⃣ 配置 SFTP + 限速

<IfModule mod_sftp.c>
  SFTPEngine on
  SFTPLog /var/log/proftpd/sftp.log
  SFTPHostKey /etc/ssh/ssh_host_rsa_key
  SFTPHostKey /etc/ssh/ssh_host_ecdsa_key

  <VirtualHost 0.0.0.0>
    Port 2222
    SFTPClientLimit 10
    TransferRate SFTPEngine on
    TransferRate 1024        # 单位 KB/s
  </VirtualHost>
</IfModule>

✅ 效果:

  • 每个 SFTP 连接 最大 1MB/s
  • 稳定、可控

三、✅ 方案三:使用 SSH + trickle(轻量级)

适合临时或低流量场景。

1️⃣ 安装 trickle

yum install trickle
# 或
apt install trickle

2️⃣ 启动限速 SFTP

trickle -s -u 512 -d 512 sftp user@host

参数说明:

  • -u:上传限速(KB/s)
  • -d:下载限速(KB/s)

⚠️ 缺点:

  • 只影响当前命令
  • 不适合服务端统一限制

四、✅ 方案四:使用 Linux tc(流量控制,高级)

适合服务器级、全局限制。

示例:限制 SFTP(端口 22)为 1Mbps

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 22 0xffff flowid 1:1

⚠️ 缺点:

  • 配置复杂
  • 易影响 SSH 管理流量

五、✅ 方案五:使用 rsync + 限速(如果用于同步)

如果你用 SFTP 实际是数据同步

rsync -avz --bwlimit=1000 /data/ user@host:/backup/

单位:KB/s


六、推荐方案总结

场景 推荐方案
生产环境 SFTP ProFTPD + mod_sftp
临时限速 trickle
服务器整体限速 ⚠️ tc(高级)
数据同步 rsync --bwlimit
OpenSSH 原生 ❌ 不支持

七、实战建议

最佳实践

  • 如果是 企业级 SFTP 服务 → ProFTPD
  • 如果只限制 单个用户/目录 → ProFTPD + 用户限速
  • 如果只是 临时限速 → trickle

如果你愿意,可以告诉我:

  • ✅ 使用的是 CentOS / Ubuntu / Debian
  • ✅ 是否 必须用 OpenSSH
  • ✅ 想限制 上传 / 下载 / 单用户 / 全局

我可以给你一份 可直接用的完整配置

0