温馨提示×

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=YESuserlist_file=/etc/vsftpd/user_listuserlist_deny=NO
    • /etc/vsftpd/user_list 中列出需要限速的用户
    • 视需要启用 chroot:chroot_local_user=YESallow_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/skbit/s
    • 服务器端可用 nloadiftopsar -n DEV 1 等工具观察带宽占用
  • 常见问题
    • 单位混淆:vsftpd 限速参数为字节/秒,常用换算为 1 MB/s = 1048576 B/s100 KB/s = 102400 B/s
    • 配置未生效:检查是否修改了正确的配置文件、是否执行了 systemctl restart vsftpd、以及语法是否正确(vsftpd -t
    • 被动模式端口与防火墙:若使用被动模式,请开放相应端口范围,避免数据通道被防火墙阻断
    • 匿名与本地:未设置 anon_max_rate 时,匿名用户不受下载限速;未设置 local_max_rate 时,本地用户不受限速

0