在Ubuntu上限制FTP服务器的带宽可以通过多种方法实现,以下是使用vsftpd和trickle工具进行带宽限制的步骤:
vsftpd和trickle安装vsftpd和trickle:
sudo apt update
sudo apt install vsftpd trickle
配置vsftpd:
编辑/etc/vsftpd.conf文件,确保以下配置项存在并正确设置:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
创建一个启动脚本:
创建一个启动脚本,用于在启动vsftpd时使用trickle限制带宽。例如,创建一个名为/etc/init.d/vsftpd-trickled的文件:
sudo nano /etc/init.d/vsftpd-trickled
在文件中添加以下内容:
#!/bin/sh
### BEGIN INIT INFO
# Provides: vsftpd-trickled
# Required-Start: $local_fs $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start vsftpd with bandwidth limiting
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DESC="vsftpd with bandwidth limiting"
NAME=vsftpd-trickled
DAEMON=/usr/sbin/vsftpd
DAEMON_ARGS="--bandwidth 102400" # 限制为100KB/s
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
set -e
. /lib/lsb/init-functions
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
log_end_msg $?
}
do_stop()
{
start-stop-daemon --stop --quiet --pidfile $PIDFILE
log_end_msg $?
}
case "$1" in
start)
do_start
;;
stop)
do_stop
;;
restart|force-reload)
do_stop
do_start
;;
status)
status_of_proc -p $PIDFILE $DAEMON && exit 0 || exit $?
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
设置脚本权限并启动服务:
sudo chmod +x /etc/init.d/vsftpd-trickled
sudo update-rc.d vsftpd-trickled defaults
sudo service vsftpd-trickled start
cgroups(更高级)如果你需要更精细的控制,可以使用cgroups来限制FTP服务器的带宽。以下是基本步骤:
安装cgroup-tools:
sudo apt install cgroup-tools
创建一个新的cgroup:
sudo cgcreate -g net_cls:/ftp_bandwidth
设置带宽限制:
echo 100000 > /sys/fs/cgroup/net_cls/ftp_bandwidth/net_cls.classid # 限制为100KB/s
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 21 0xffff flowid 1:1
将FTP进程添加到cgroup: 找到FTP服务器的PID并将其添加到新创建的cgroup中:
sudo cgclassify -g net_cls:/ftp_bandwidth <FTP_PID>
请注意,这些步骤可能需要根据你的具体环境和需求进行调整。特别是使用cgroups的方法,可能需要更深入的系统配置知识。