在Debian系統上設置SFTP服務器的帶寬限制,可以通過多種方法實現。以下介紹兩種常用的方法:
trickle
工具限制帶寬trickle
是一個輕量級的帶寬控制工具,可以用來限制單個應用程序的網絡帶寬使用。
安裝 trickle
打開終端并運行以下命令來安裝 trickle
:
sudo apt update
sudo apt install trickle
配置 SSH 服務以使用 trickle
編輯 SSH 配置文件 /etc/ssh/sshd_config
,添加或修改以下內容:
# 在文件末尾添加
Match Group sftpusers
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
ChrootDirectory %h
PermitTunnel no
AllowAgentForwarding no
# 使用 trickle 限制帶寬
ForceCommand /usr/bin/trickle -d 1024 -u 1024 sftp-server
上述配置中,-d 1024
和 -u 1024
分別限制下載和上傳的帶寬為1MB/s。你可以根據需要調整這些值。
創建用戶組并分配用戶
創建一個專門用于SFTP的用戶組,并將需要限制帶寬的用戶添加到該組:
sudo groupadd sftpusers
sudo usermod -aG sftpusers your_username
將 your_username
替換為你想要限制帶寬的用戶名。
重啟 SSH 服務
使配置生效:
sudo systemctl restart ssh
驗證配置
確保用戶被正確限制帶寬??梢酝ㄟ^登錄SFTP并執行大文件傳輸來測試帶寬限制是否生效。
trickle
主要通過修改環境變量來限制帶寬,因此對于某些復雜的應用場景可能不夠靈活。trickle
版本支持你需要的功能。cgroups
(控制組)限制帶寬cgroups
是Linux內核提供的一種資源管理機制,可以用來限制進程的資源使用,包括網絡帶寬。
安裝必要的工具
安裝 cgroup-tools
和 iproute2
:
sudo apt update
sudo apt install cgroup-tools iproute2
創建 cgroup
創建一個新的cgroup用于限制SFTP帶寬:
sudo cgcreate -g net_cls:/sftp_bandwidth
設置帶寬限制
設置下載和上傳的帶寬限制(單位:kbps)。例如,限制為1Mbps:
echo 1024 | 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
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst <server_ip> flowid 1:1
將 <server_ip>
替換為你的服務器IP地址。
將 SFTP 進程添加到 cgroup
找到SFTP進程的PID并將其添加到cgroup:
sudo cgclassify -g net_cls:sftp_bandwidth <sftp_pid>
將 <sftp_pid>
替換為SFTP進程的PID。
持久化配置
為了使配置在系統重啟后仍然有效,可以將上述命令添加到 /etc/rc.local
文件中。
cgroups
配置較為復雜,需要對Linux網絡和cgroup機制有一定的了解。eth0
)正確無誤。以上兩種方法各有優缺點,trickle
更適合簡單場景,而 cgroups
提供了更細粒度的控制。根據你的具體需求選擇合適的方法進行配置。