温馨提示×

vsftp带宽限制设置方法

小樊
63
2025-09-18 10:18:05
栏目: 编程语言

vsftpd带宽限制设置方法

一、通过vsftpd配置文件设置(内置参数,推荐优先使用)

vsftpd自身提供了灵活的带宽限制参数,可通过修改主配置文件实现用户级或全局带宽控制,操作简单且无需额外工具。

1. 匿名用户带宽限制

针对匿名用户(ftp/anonymous)设置最大传输速率,参数为anonymous_max_rate(单位:字节/秒)。
示例:限制匿名用户最大下载/上传速度为30KB/s(30×1024=30720字节/秒),在/etc/vsftpd/vsftpd.conf中添加或修改:
anonymous_max_rate=30720

2. 本地用户带宽限制

针对系统本地用户(如通过SSH登录的用户)设置最大传输速率,参数为local_max_rate(单位:字节/秒)。
示例:限制本地用户最大速度为50KB/s(50×1024=51200字节/秒),在配置文件中添加或修改:
local_max_rate=51200

3. 用户级精细化限制(推荐)

若需为不同用户设置不同带宽,可通过user_config_dir参数指定用户配置目录,为每个用户单独配置local_max_rate
步骤如下:

  • 启用用户配置目录:在vsftpd.conf中添加:
    user_config_dir=/etc/vsftpd/user_conf(目录需手动创建并设置权限:sudo mkdir -p /etc/vsftpd/user_conf && sudo chmod 755 /etc/vsftpd/user_conf);
  • 为用户创建专属配置文件:如为用户user1创建/etc/vsftpd/user_conf/user1,内容为:
    local_max_rate=20480(限制user1的最大速度为20KB/s);
  • 重启vsftpd服务使配置生效:sudo systemctl restart vsftpd

4. 全局带宽限制(可选)

若需限制所有用户的总带宽(而非单个用户),可使用bandwidth_limit参数(单位:字节/秒)。
示例:限制所有用户总带宽为100KB/s(100×1024=102400字节/秒),在配置文件中添加:
bandwidth_limit=102400

二、使用外部工具设置(更精细的流量管理)

若需对整个FTP服务或特定IP进行流量整形(如限制FTP占用的总带宽),可使用Linux内核自带的tc工具或第三方工具trickle

1. 使用tc工具(Linux内核自带)

tc通过HTB(层级令牌桶)算法实现流量控制,适合对整个网络接口或特定用户进行带宽限制。
步骤如下:

  • 安装iproute2(包含tc工具):sudo apt-get install iproute2(Debian/Ubuntu)或sudo yum install iproute(CentOS/RHEL);
  • 清除现有队列规则:sudo tc qdisc del dev eth0 rooteth0为网络接口,需替换为实际接口,如ens33);
  • 添加HTB队列:sudo tc qdisc add dev eth0 root handle 1: htb default 10(默认带宽为10Mbit/s,可根据需求调整);
  • 定义父类带宽:sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit(总带宽上限为100Mbit/s);
  • 创建子类(限制FTP带宽):sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 20mbit ceil 20mbit(FTP服务最大可用20Mbit/s);
  • 标记FTP流量:使用iptables标记FTP数据包(端口21及被动模式端口范围),例如:
    sudo iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 10
  • 关联标记与子类:sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10

2. 使用trickle工具(轻量级用户级限制)

trickle可限制单个进程的带宽,适合临时限制FTP客户端或vsftpd服务的带宽。
步骤如下:

  • 安装tricklesudo apt-get install trickle(Debian/Ubuntu)或sudo yum install trickle(CentOS/RHEL);
  • 限制FTP客户端带宽:启动FTP客户端时添加参数,例如限制上传速度为100KB/s、下载速度为50KB/s:
    trickle -u 100 -d 50 ftp ftp.example.com
  • 限制vsftpd服务带宽:修改vsftpd启动脚本(如/etc/init.d/vsftpd),在启动命令前添加trickle,例如:
    trickle -u 200 -d 100 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf &(限制vsftpd上传200KB/s、下载100KB/s)

注意事项

  • 修改配置文件后,务必重启vsftpd服务(sudo systemctl restart vsftpd)使更改生效;
  • 带宽单位需统一:anonymous_max_ratelocal_max_rate等参数的单位为字节/秒(1KB/s=1024字节/秒),而tc工具的单位为比特/秒(1Kbit/s=1000比特/秒);
  • 测试带宽限制效果时,可使用lftplftp ftp.example.com)或wget等工具下载/上传大文件,观察实际速度是否符合预期。

0