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服务或重新登录用户使配置生效。