Ubuntu FTP Server 带宽限制实用指南
一、在 vsftpd 中按用户限速
- 适用场景:需要对本地用户与匿名用户分别限速,配置简单、生效快。
- 步骤:
- 安装并启用服务
- sudo apt update
- sudo apt install vsftpd
- sudo systemctl enable --now vsftpd
- 编辑配置文件
- sudo nano /etc/vsftpd.conf
- 按需添加或修改(速率单位为字节/秒):
- 限制本地用户:local_max_rate=1048576 # 约 1 MB/s
- 限制匿名用户:anon_max_rate=524288 # 约 512 KB/s
- 使配置生效
- sudo systemctl restart vsftpd
- 说明:上述参数直接作用于 vsftpd 会话,按连接限速,适合精细化控制用户带宽。
二、在 ProFTPD 中按用户或全局限速
- 适用场景:需要更灵活的限速策略(如按用户、组、虚拟主机或目录)。
- 步骤:
- 安装并启用服务
- sudo apt update
- sudo apt install proftpd
- sudo systemctl enable --now proftpd
- 启用模块并配置
- 确认已加载 mod_bandwidth(Debian/Ubuntu 常见已内置),在 /etc/proftpd/proftpd.conf 中加入:
-
BandwidthModule on
DefaultBandwidth **50KB/s**
- 说明:DefaultBandwidth 为全局默认;可按需增加用户/目录/虚拟主机段进行更细粒度限制。
- 使配置生效
- sudo systemctl restart proftpd
- 提示:若需按用户/目录定制,可在对应 // 段内设置带宽指令。
三、系统级限速的替代方案
- 使用 trickle 限制某个进程(适合临时或按进程限速)
- 安装:sudo apt install trickle
- 示例:trickle -s -d 1024 -u 512 vsftpd
- 说明:对指定进程的下载/上传分别限速(单位 KB/s),无需改 FTP 服务配置;注意 trickle 对 setuid/守护进程支持有限。
- 使用 wondershaper 限制网卡(适合整网卡上下行)
- 安装:sudo apt install wondershaper
- 示例:sudo wondershaper eth0 1024 512
- 说明:对网卡 eth0 的下载/上传限速(单位 Kbps),影响该网卡所有流量,粒度较粗。
- 使用 tc + iptables(适合按 IP/端口/方向的精细流量整形)
- 要点:tc 只能直接整形“出方向”流量;对“入方向”需配合 ifb 虚拟网卡做 ingress 重定向后再整形。
- 示例思路:
- 出方向:tc qdisc add dev eth0 root handle 1: htb; tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit; 用 iptables -t mangle 给目标流量打 mark;tc filter add dev eth0 parent 1: handle fw flowid 1:1
- 入方向:创建 ifb0,将 eth0 的 ingress 流量镜像到 ifb0,再对 ifb0 做 HTB 限速
- 说明:功能强大但配置复杂,适合需要按源/目的限速或做 QoS 的场景。
四、验证与注意事项
- 验证方法
- 使用 ftp/ncftp/lftp 或图形客户端进行大文件传输,观察吞吐是否接近设定值;建议用 iperf3 做基线对比,排除网络本身瓶颈。
- 单位换算与常见误区
- vsftpd 的 local_max_rate/anon_max_rate 单位为字节/秒;常见写法如 1048576=1 MB/s,524288=512 KB/s。
- 系统级工具单位可能不同:trickle 使用KB/s,wondershaper 使用Kbps,tc/htb 使用bit/s;换算时避免把 KB/s 与 Kbps 混淆。
- 生效与回滚
- 修改 FTP 服务配置后需重启服务;系统级限速(tc/wondershaper)建议脚本化并持久化,变更前先备份现有规则以便快速回滚。