以下是不同系統配置SFTP帶寬限制的常見方法:
tc工具(推薦)# CentOS/RHEL
sudo yum install iproute
# Debian/Ubuntu
sudo apt-get install iproute2
# 創建隊列規則
sudo tc qdisc add dev eth0 root handle 1: htb default 30
# 創建類(父類限制總帶寬,子類限制SFTP帶寬)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit # 下載
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 1mbit ceil 1mbit # 上傳
# 關聯SFTP端口(默認22)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10 # 下載
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:20 # 上傳
/etc/rc.local或使用systemd服務。Match指令(需較新版本)/etc/ssh/sshd_config:Match User <用戶名> # 或 Match LocalPort 22
BandwidthLimit <限制值> # 單位:kbps(如1024表示1Mbps)
# 或分別限制上傳/下載(部分版本支持)
# LimitStream 1mbit上行
# LimitStream 2mbit下行
sudo systemctl restart sshd
sudo apt-get install trickle # Debian/Ubuntu
sudo yum install trickle # CentOS/RHEL
# 在sshd_config中指定用戶使用trickle
Match User <用戶名>
ForceCommand /usr/bin/trickle -d <下載限制> -u <上傳限制> sftp-server
tc工具需根據實際網絡接口(如eth0、ens33)調整,可通過ip a查看接口名稱。BandwidthLimit或LimitStream。