温馨提示×

centos如何设sftp限速

小樊
34
2026-10-20 12:46:37
栏目: 智能运维

在 CentOS 上给 SFTP 限速,常见、稳定的做法有两种:基于 SSH 内置限制(推荐) 和 基于 tc 流量控制。下面分别说明。


一、使用 SSH / SFTP 自带限速(最简单,推荐)

SFTP 基于 SSH,可通过 sshd_config 限制 单个连接带宽。

1. 修改 SSH 配置

编辑配置文件:

vim /etc/ssh/sshd_config

添加或修改:

Match User sftpuser
    ForceCommand internal-sftp
    ChrootDirectory /data/sftp
    # 限制上传/下载速度(单位:字节/秒)
    # 例如限制 1MB/s = 1048576
    # 旧版本 SSH 不支持,CentOS 7+ 一般支持

⚠️ 注意:
OpenSSH 本身不直接支持限速参数(如 BandwidthLimit),所以单纯 sshd_config 并不能限速。

✅ 正确方式:通过 rsync / scp / sftp 客户端限速,或结合 tc


二、使用 tc(Linux 流量控制,最可靠)

适合:限制整个网卡 / 某个 IP / 某个端口的 SFTP 速度

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

1. 确认网卡名

ip addr

假设是 eth0

2. 添加限速规则

# 清除旧规则
tc qdisc del dev eth0 root

# 创建根队列
tc qdisc add dev eth0 root handle 1: htb default 30

# 创建总带宽
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit

# 创建 SFTP 限速类(1Mbps)
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 1mbit ceil 1mbit

# 使用 iptables 标记 SFTP 流量
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 30

# 将标记流量绑定到限速类
tc filter add dev eth0 parent 1: protocol ip handle 30 fw flowid 1:30

3. 验证

tc -s qdisc show dev eth0

三、只限制某个用户(配合 cgroups + tc,进阶)

适合多用户服务器:

  1. 用 iptables 按源 IP 标记
  2. 用 tc 限速
  3. 或用 systemd + cgroups 限制 IO

四、客户端限速(最省事)

如果你能控制客户端:

# scp 限速(单位 Kbit/s)
scp -l 8000 file user@host:/path

# rsync 限速(KB/s)
rsync --bwlimit=1000 file user@host:/path

五、推荐方案总结

场景 推荐方式
临时限速 客户端 --bwlimit
服务器统一限速 tc + iptables
单用户 SFTP tc 按 IP
高安全隔离 chroot + tc

如果你告诉我:

  • CentOS 版本(6 / 7 / 8 / Stream)
  • 是否多用户
  • 想限制上传 / 下载 / 总速

我可以直接给你一份可复制的配置脚本。

0 踩