在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 <sftp_pid>
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的帶寬限制。請根據你的實際需求調整帶寬限制值和網絡接口名稱。