centos

centos sftp如何限制上传速度

小樊
69
2025-03-21 16:34:45
栏目: 智能运维

在CentOS系统中,可以通过配置SSH服务器来限制SFTP用户的上传速度。以下是一些常见的方法:

方法一:使用tc(Traffic Control)工具

  1. 安装tc工具

    sudo yum install iproute
    
  2. 创建一个队列规则: 假设你想限制用户的上传速度为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
    
  3. 限制特定用户的上传速度: 如果你想限制特定用户的上传速度,可以使用iptablestc结合的方式:

    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和自定义脚本

  1. 安装fail2ban

    sudo yum install fail2ban
    
  2. 创建自定义脚本: 创建一个脚本/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
    
  3. 设置脚本权限

    sudo chmod +x /usr/local/bin/sftp_speed_limit.sh
    
  4. 配置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
    
  5. 重启fail2ban服务

    sudo systemctl restart fail2ban
    

方法三:使用cgroups(Control Groups)

  1. 安装cgroups工具

    sudo yum install libcgroup-tools
    
  2. 创建一个cgroup

    sudo cgcreate -g net_cls:/sftp_limit
    
  3. 设置带宽限制

    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
    
  4. 将用户进程添加到cgroup

    sudo cgclassify -g net_cls:/sftp_limit <用户PID>
    

通过以上方法,你可以有效地限制CentOS系统中SFTP用户的上传速度。选择适合你需求的方法进行配置即可。

0
看了该问题的人还看了