在Ubuntu系统中,SFTP传输限制主要通过OpenSSH服务器配置(速度、文件大小)和流量控制工具(带宽)实现,以下是具体步骤:
在配置限制前,需确保已安装OpenSSH服务器,并创建专用SFTP用户(若未完成):
# 安装OpenSSH服务器(若未安装)
sudo apt update && sudo apt install openssh-server
# 创建SFTP专用用户(以"sftpuser"为例)
sudo adduser sftpuser
sudo usermod -aG sftp sftpuser # 将用户加入sftp组(需提前创建:sudo groupadd sftp)
# 设置用户家目录权限(关键:防止用户越权)
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
注:家目录权限必须为
root:root且权限为755,否则SFTP连接会失败。
编辑SSH配置文件(/etc/ssh/sshd_config),通过Match指令针对特定用户/组设置速度限制:
sudo nano /etc/ssh/sshd_config
在文件末尾添加以下内容(以用户sftpuser为例):
# 匹配指定用户
Match User sftpuser
# 强制使用SFTP(禁用Shell访问)
ForceCommand internal-sftp
# 限制上传速度(1Mbps = 1024kbps)
LimitBandwidth 1024
# 限制下载速度(1Mbps = 1024kbps)
LimitBandwidthUp 1024
# 其他可选限制(如禁用端口转发)
AllowTcpForwarding no
X11Forwarding no
若需针对用户组(如sftp组)设置,将Match User改为Match Group sftp即可。
在sshd_config中,通过LimitFileSize指令限制单个文件的最大传输大小(支持Bytes、KB、MB、GB单位):
# 继续在Match块中添加(或全局设置)
Match User sftpuser
# 限制单个文件最大100MB
LimitFileSize 100M
此配置会阻止用户上传/下载超过100MB的文件。
若需更精细的带宽控制(如区分上传/下载带宽),可使用Linux自带的tc(Traffic Control)工具:
# 安装iproute2(包含tc工具,Ubuntu默认已安装)
sudo apt install iproute2
# 1. 清除现有队列规则(避免冲突)
sudo tc qdisc del dev eth0 root 2>/dev/null
# 2. 添加HTB队列(根队列)
sudo tc qdisc add dev eth0 root handle 1: htb default 30
# 3. 创建主类(总带宽10Mbps)
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit
# 4. 创建上传子类(2Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2mbit ceil 2mbit
# 5. 创建下载子类(8Mbps)
sudo tc class add dev eth0 parent 1:1 classid 1:20 htb rate 8mbit ceil 8mbit
# 6. 添加过滤器(将SFTP流量(端口22)关联到对应子类)
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:20 # 下载
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 22 0xffff flowid 1:10 # 上传
注:
eth0为网络接口名称(可通过ip a命令查看),rate为保证带宽,ceil为最大带宽。
wondershaper是tc的封装工具,简化了带宽限制命令:
# 安装wondershaper
sudo apt install wondershaper
# 限制eth0接口的下载速度(100kbps)和上传速度(50kbps)
sudo wondershaper eth0 100 50
# 查看当前限制状态
sudo wondershaper status eth0
# 删除限制
sudo wondershaper clear eth0
注:
wondershaper会影响系统整体网络性能,建议仅在简单场景下使用。
无论使用哪种方法,修改配置后均需重启SSH服务:
sudo systemctl restart sshd # Ubuntu 16.04及以上版本
# 或
sudo service ssh restart # 旧版本
root:root和755权限。sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak)。Match User或Match Group分别配置。tc和wondershaper的配置需添加到启动脚本(如/etc/rc.local)以实现重启后生效。