在CentOS系统中,可以通过配置SSH服务器和SFTP子系统来限制用户的带宽。以下是一些常见的方法:
tc
(Traffic Control)工具安装tc
工具(如果尚未安装):
sudo yum install iproute
创建一个qdisc(队列规则):
sudo tc qdisc add dev eth0 root handle 1: htb default 30
创建一个类(class):
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
为SFTP用户创建一个子类:
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbps ceil 1mbit
使用iptables
标记SFTP流量:
sudo iptables -A OUTPUT -t mangle -p tcp --dport 22 -m owner --uid-owner <sftp_user_uid> -j MARK --set-mark 10
将标记的流量绑定到子类:
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
cgroups
(Control Groups)安装cgroups
工具(如果尚未安装):
sudo yum install libcgroup-tools
创建一个cgroup:
sudo cgcreate -g net_cls:/sftp_limit
设置带宽限制:
echo "512k" | sudo tee /sys/fs/cgroup/net_cls/sftp_limit/net_cls.classid
sudo cgset -r net_cls.classid=0x100001/sftp_limit
sudo cgset -r net_cls.net_cls.classid=0x100001/sftp_limit
将SFTP用户进程添加到cgroup:
sudo cgclassify -g net_cls:/sftp_limit <sftp_user_pid>
fail2ban
和自定义脚本安装fail2ban
(如果尚未安装):
sudo yum install fail2ban
创建一个自定义脚本来限制带宽:
sudo nano /usr/local/bin/sftp_bandwidth_limit.sh
脚本内容示例:
#!/bin/bash
USER=$1
LIMIT=512k
# 获取用户的PID
PID=$(pgrep -u $USER sshd)
if [ -n "$PID" ]; then
# 使用tc限制带宽
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 class add dev eth0 parent 1:1 classid 1:10 htb rate $LIMIT ceil 1mbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
fi
赋予脚本执行权限:
sudo chmod +x /usr/local/bin/sftp_bandwidth_limit.sh
**配置fail2ban
**来调用脚本:
编辑/etc/fail2ban/jail.local
文件,添加以下内容:
[DEFAULT]
banaction = iptables-multiport
bantime = 600
[sftp]
enabled = true
filter = sftp
action = %(action_mwl)s
logpath = /var/log/secure
maxretry = 3
findtime = 600
bantime = 600
创建一个过滤器来匹配SFTP登录失败:
编辑/etc/fail2ban/filter.d/sftp.conf
文件,添加以下内容:
[Definition]
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for invalid user <HOST> from <HOST>
ignoreregex =
重启fail2ban
服务:
sudo systemctl restart fail2ban
通过以上方法,你可以有效地限制CentOS系统中SFTP用户的带宽。选择适合你需求的方法进行配置即可。