在CentOS系统中,可以通过配置SSH服务器来限制SFTP用户的上传速度。以下是一些常见的方法:
方法一:使用tc
(Traffic Control)工具
-
安装
tc
工具:sudo yum install iproute
-
创建一个队列规则: 假设你想限制用户的上传速度为1Mbps,可以使用以下命令:
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 dst <用户IP> flowid 1:1
-
限制特定用户的上传速度: 如果你想限制特定用户的上传速度,可以使用
iptables
和tc
结合的方式:sudo iptables -A OUTPUT -t mangle -p tcp --dport 22 -m owner --uid-owner <用户UID> -j MARK --set-mark 1 sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:1
方法二:使用fail2ban
和自定义脚本
-
安装
fail2ban
:sudo yum install fail2ban
-
创建自定义脚本: 创建一个脚本
/usr/local/bin/sftp_speed_limit.sh
,内容如下:#!/bin/bash USER=$1 LIMIT=1024 # 限制为1Mbps # 获取用户的当前上传速度 UPLOAD_SPEED=$(sudo iptables -L -v -n | grep $USER | awk '{print $5}') if [ "$UPLOAD_SPEED" -gt "$LIMIT" ]; then sudo iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner $USER -j DROP echo "User $USER has exceeded the upload speed limit." else sudo iptables -D OUTPUT -p tcp --dport 22 -m owner --uid-owner $USER -j DROP fi
-
设置脚本权限:
sudo chmod +x /usr/local/bin/sftp_speed_limit.sh
-
配置
fail2ban
: 编辑/etc/fail2ban/jail.local
文件,添加以下内容:[DEFAULT] bantime = 600 findtime = 600 maxretry = 3 [sftp] enabled = true filter = sftp action = iptables-multiport[name=SFTP, port="ssh", protocol=tcp] logpath = /var/log/secure bantime = 600 findtime = 600 maxretry = 3
-
重启
fail2ban
服务:sudo systemctl restart fail2ban
方法三:使用cgroups
(Control Groups)
-
安装
cgroups
工具:sudo yum install libcgroup-tools
-
创建一个cgroup:
sudo cgcreate -g net_cls:/sftp_limit
-
设置带宽限制:
echo "1048576" | sudo tee /sys/fs/cgroup/net_cls/sftp_limit/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 dst <用户IP> flowid 1:1 sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1: cgroup
-
将用户进程添加到cgroup:
sudo cgclassify -g net_cls:/sftp_limit <用户PID>
通过以上方法,你可以有效地限制CentOS系统中SFTP用户的上传速度。选择适合你需求的方法进行配置即可。