SFTP配置中設置文件傳輸限制的方法
通過修改SSH主配置文件sshd_config,使用LimitFileSize參數限制單個文件的最大傳輸大小。該參數支持字節(B)、千字節(KB)、兆字節(MB)、吉字節(GB)等單位,需配合Match指令針對特定用戶或用戶組生效。
操作步驟:
/etc/ssh/sshd_config文件:sudo nano /etc/ssh/sshd_config
sftpusers用戶組的單文件大小為100MB為例):Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory %h
AllowTcpForwarding no
X11Forwarding no
LimitFileSize 100M # 關鍵配置:限制單文件最大100MB
sudo systemctl restart ssh
說明:若未使用Match指令,LimitFileSize將對所有SFTP用戶生效;若需限制所有用戶,可直接在sshd_config全局添加該參數。
通過sshd_config中的LimitRate參數限制傳輸速率,支持字節/秒(B/s)為單位,可分別控制上傳/下載速率(部分版本支持UploadRate/DownloadRate)。
操作步驟:
/etc/ssh/sshd_config文件:sudo nano /etc/ssh/sshd_config
sftpusers用戶組的傳輸速率為1MB/s為例):Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory %h
AllowTcpForwarding no
X11Forwarding no
LimitRate 1M # 關鍵配置:限制傳輸速率為1MB/s
sudo systemctl restart ssh
說明:LimitRate是OpenSSH原生支持的參數,兼容性好,無需額外安裝工具。
通過Linux內核的tc工具限制SFTP流量的帶寬,適用于需要精細化控制的場景(如限制特定端口的帶寬)。
操作步驟:
iproute工具包(包含tc):sudo yum install iproute # CentOS
sudo apt-get install iproute2 # Debian/Ubuntu
sudo tc qdisc del dev eth0 root # eth0為網絡接口,需根據實際情況修改
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 100mbit # 總帶寬100Mbps
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 1mbit ceil 1mbit # SFTP帶寬1Mbps
sudo iptables -A OUTPUT -t mangle -p tcp --dport 22 -j MARK --set-mark 10
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
/etc/rc.local文件中(需賦予執行權限)。通過cgroups限制SFTP進程的網絡帶寬,適用于需要進程級控制的場景。
操作步驟:
libcgroup-tools工具包:sudo yum install libcgroup-tools # CentOS
sudo apt-get install cgroup-tools # Debian/Ubuntu
sudo cgcreate -g net_cls:/sftp_limit
echo 0x10001 | sudo tee /sys/fs/cgroup/net_cls/sftp_limit/net_cls.classid
sudo usermod -aG sftp_limit <username> # <username>為需限制的SFTP用戶名
通過限制SFTP的并發連接數,避免服務器資源被過度占用。
編輯/etc/ssh/sshd_config文件,添加或修改MaxSessions參數(控制所有用戶的總會話數)和MaxStartups參數(控制并發連接速率):
MaxSessions 10 # 限制所有用戶的總并發會話數為10
MaxStartups 10:30:100 # 最大并發連接數10,30分鐘內連接速率限制,允許增量100
保存后重啟SSH服務:
sudo systemctl restart ssh
在sshd_config中使用MaxSessionsPerUser參數(部分版本支持),或在/etc/security/limits.conf中添加限制:
# 方法1:sshd_config(需OpenSSH支持)
Match User <username>
MaxSessionsPerUser 5 # 限制<username>用戶的并發會話數為5
# 方法2:limits.conf(需PAM支持)
<username> hard maxlogins 5 # 限制<username>用戶的最大登錄數為5
保存后重啟SSH服務或重新登錄用戶使配置生效。