这是最直接的方式,适用于大多数场景,通过修改vsftpd的主配置文件/etc/vsftpd.conf实现。
sudo apt update && sudo apt install vsftpd
nano)打开配置文件:sudo nano /etc/vsftpd.conf
local_max_rate=5242880(约5MB/s,5×1024×1024);anon_max_rate=204800(约200KB/s,200×1024);local_max_rate同样适用(上传速度通常与下载速度分开限制,需确保write_enable=YES开启写权限)。local_enable=YES
write_enable=YES
local_max_rate=5242880 # 本地用户下载/上传限制为5MB/s
anon_max_rate=204800 # 匿名用户下载限制为200KB/s
Ctrl+X→Y→Enter保存文件,然后重启vsftpd使配置生效:sudo systemctl restart vsftpd
若需要基于IP、接口或更细粒度的带宽分配(如限制某台主机的FTP流量),可使用Linux自带的tc(Traffic Control)工具。
sudo apt install iproute2
sudo tc qdisc add dev eth0 root handle 1: htb
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 10mbit
sudo iptables -t mangle -A OUTPUT -s 192.168.1.100 -p tcp --dport 21 -j MARK --set-mark 10
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 handle 10 fw flowid 1:10
tc规则重启后会丢失,需将其添加到/etc/rc.local或使用systemd服务实现开机自启。若需限制用户进程的文件描述符或进程数(间接影响传输速度),可编辑/etc/security/limits.conf:
sudo nano /etc/security/limits.conf
添加以下内容(以限制用户ftpuser为例):
ftpuser hard nofile 1024 # 最大文件描述符数
ftpuser soft nofile 512 # 软限制
ftpuser hard nproc 1024 # 最大进程数
保存后,用户下次登录时生效(需重新登录)。
无论使用哪种方法,均可通过以下方式验证速度限制是否生效:
ftp命令或FileZilla)连接服务器;提示:
vsftpd.conf)适合大多数场景,配置简单且无需额外工具;tc)适合需要精细化管理的环境,但配置复杂;sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak)。