在CentOS上设置SFTP带宽限制,可以使用tc
(流量控制)工具和cgroups
(控制组)来实现。以下是详细的步骤:
方法一:使用tc
和cgroups
-
安装必要的软件包 确保你的CentOS系统上安装了
tc
和cgroups
相关的软件包。sudo yum install iproute cgroup-tools
-
创建cgroups 创建一个新的cgroups来控制SFTP的带宽。
sudo cgcreate -g net_cls:/sftp_bandwidth
-
设置cgroups的网络类 为cgroups分配一个网络类,并设置带宽限制。
echo "100000" | sudo tee /sys/fs/cgroup/net_cls/sftp_bandwidth/net_cls.classid sudo tc qdisc add dev eth0 root handle 1: htb default 30 sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:1 sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbps ceil 1mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
这里的
eth0
是你的网络接口名称,rate
是总带宽限制,ceil
是突发带宽限制。你可以根据需要调整这些值。 -
将SFTP进程分配到cgroups 找到SFTP进程的PID,并将其分配到创建的cgroups中。
sudo cgexec -g net_cls:sftp_bandwidth sftp-server
或者,如果你已经有一个正在运行的SFTP服务器进程,可以使用
cgclassify
命令将其移动到cgroups中。sudo cgclassify -g net_cls:sftp_bandwidth
方法二:使用nftables
和tc
-
安装必要的软件包 确保你的CentOS系统上安装了
nftables
和tc
相关的软件包。sudo yum install nftables iproute
-
创建nftables规则 创建一个新的nftables规则来标记SFTP流量,并使用
tc
进行带宽限制。sudo nft add table ip filter sudo nft add chain ip filter input { type filter hook input priority 0 \; } sudo nft add rule ip filter input tcp dport 22 meta mark set 1
-
设置tc规则 设置
tc
规则来限制标记为1的流量。sudo tc qdisc add dev eth0 root handle 1: htb default 30 sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1 sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbps ceil 1mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10
-
应用nftables规则 应用nftables规则来标记SFTP流量。
sudo nft list ruleset
通过以上步骤,你可以在CentOS上成功设置SFTP的带宽限制。请根据你的实际需求调整带宽限制值和网络接口名称。