Ubuntu vsftp带宽限制设置
小樊
32
2025-12-10 10:36:51
Ubuntu 下使用 vsftpd 进行带宽限制
一 内置参数限速(推荐)
- 编辑配置文件
- 打开:sudo nano /etc/vsftpd.conf
- 设置全局限速(单位:字节/秒)
- 本地用户(所有系统用户)最大速率:local_max_rate=1048576(约 1 MB/s)
- 匿名用户最大速率:anon_max_rate=524288(约 512 KB/s)
- 示例换算
- 100 KB/s → 102400
- 1 MB/s → 1048576
- 5 MB/s → 5242880
- 使配置生效
- 检查语法:sudo vsftpd -t
- 重启服务:sudo systemctl restart vsftpd
- 说明
- 上述参数为 vsftpd 原生支持,简单可靠,适合大多数场景。
二 按用户或目录更细粒度限速
- 方案A 每用户配置文件(推荐)
- 启用每用户配置目录:user_config_dir=/etc/vsftpd/user_conf
- 为用户创建配置文件:例如 /etc/vsftpd/user_conf/alice
- 在用户配置文件中写入:local_max_rate=2097152(约 2 MB/s)
- 保存后重启:sudo systemctl restart vsftpd
- 方案B 结合用户列表与 chroot(便于管控)
- 启用用户列表:userlist_enable=YES、userlist_file=/etc/vsftpd/user_list、userlist_deny=NO
- 在 /etc/vsftpd/user_list 中列出需要限速的用户
- 视需要启用 chroot:chroot_local_user=YES、allow_writeable_chroot=YES
- 为这些用户分别放置或编辑其 per-user 配置文件设置 local_max_rate
- 重启服务生效
- 说明
- 每用户配置目录是 vsftpd 常用做法,便于为不同用户设置不同速率与目录策略。
三 系统级限速工具(备选)
- Trickle(进程级带宽整形)
- 安装:sudo apt-get install trickle
- 限制客户端(示例):trickle -u 100 -d 50 ftp(上传 100 KB/s、下载 50 KB/s)
- 也可尝试对服务进程整形:sudo trickle -d 100000 -u 50000 /usr/sbin/vsftpd /etc/vsftpd.conf(是否生效取决于 vsftpd 是否以可整形方式启动)
- TC(网卡队列整形,系统层面)
- 示例(限制某主机或服务的出站带宽为 10 Mbit):
- 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 -j MARK --set-mark 10
- sudo tc filter add dev eth0 parent 1: protocol ip prio 1 handle 10 fw flowid 1:10
- 说明
- Trickle 与 TC 属于系统级手段,适合临时测试或需要跨进程/跨用户统一限速的场景;TC 规则在重启后可能丢失,需持久化。
四 验证与常见问题
- 验证方法
- 使用 FTP 客户端进行大文件传输,观察实时速率是否接近设定值(注意区分 KB/s 与 kbit/s)
- 服务器端可用 nload、iftop、sar -n DEV 1 等工具观察带宽占用
- 常见问题
- 单位混淆:vsftpd 限速参数为字节/秒,常用换算为 1 MB/s = 1048576 B/s,100 KB/s = 102400 B/s
- 配置未生效:检查是否修改了正确的配置文件、是否执行了 systemctl restart vsftpd、以及语法是否正确(vsftpd -t)
- 被动模式端口与防火墙:若使用被动模式,请开放相应端口范围,避免数据通道被防火墙阻断
- 匿名与本地:未设置 anon_max_rate 时,匿名用户不受下载限速;未设置 local_max_rate 时,本地用户不受限速