centos

centos sftp带宽限制设置

小樊
46
2025-04-08 16:46:00
栏目: 智能运维

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

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

  1. 安装tc工具(如果尚未安装):

    sudo yum install iproute
    
  2. 创建一个qdisc(队列规则)

    sudo tc qdisc add dev eth0 root handle 1: htb default 30
    
  3. 创建一个类(class)

    sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
    
  4. 为SFTP用户创建一个子类

    sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbps ceil 1mbit
    
  5. 使用iptables标记SFTP流量

    sudo iptables -A OUTPUT -t mangle -p tcp --dport 22 -m owner --uid-owner <sftp_user_uid> -j MARK --set-mark 10
    
  6. 将标记的流量绑定到子类

    sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10
    

方法二:使用cgroups(Control Groups)

  1. 安装cgroups工具(如果尚未安装):

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

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

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

    sudo cgclassify -g net_cls:/sftp_limit <sftp_user_pid>
    

方法三:使用fail2ban和自定义脚本

  1. 安装fail2ban(如果尚未安装):

    sudo yum install fail2ban
    
  2. 创建一个自定义脚本来限制带宽:

    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
    
  3. 赋予脚本执行权限

    sudo chmod +x /usr/local/bin/sftp_bandwidth_limit.sh
    
  4. **配置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
    
  5. 创建一个过滤器来匹配SFTP登录失败: 编辑/etc/fail2ban/filter.d/sftp.conf文件,添加以下内容:

    [Definition]
    failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for invalid user <HOST> from <HOST>
    ignoreregex =
    
  6. 重启fail2ban服务

    sudo systemctl restart fail2ban
    

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

0
看了该问题的人还看了