117.info
人生若只如初见

centos sftp如何限制上传速度

在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用户的上传速度。选择适合你需求的方法进行配置即可。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe830AzsNAgFUAVI.html

推荐文章

  • centos spool如何压缩

    在CentOS系统中,spool目录通常用于存储临时文件和打印队列等。如果你想要压缩spool目录中的内容,可以使用以下步骤:
    方法一:使用tar命令 备份数据:

  • SELinux对CentOS安全有何影响

    SELinux(Security-Enhanced Linux)是Linux内核的一个安全模块,用于加强系统的安全性。它基于策略控制进程和用户对资源的访问,可能导致某些合法操作被阻止,产...

  • 在CentOS中如何使用export命令设置环境变量

    在 CentOS 中,您可以使用 export 命令来设置环境变量。以下是具体步骤: 打开终端。 输入 export 命令,后跟要设置的环境变量的名称和值。例如,如果您想要设置...

  • centos分区安全性如何保障

    保障CentOS分区的安全性是一个多层次的过程,涉及到系统加固、权限管理、防火墙配置等多个方面。以下是一些关键的安全措施:
    使用强密码策略 设置复杂且唯一...

  • Zookeeper与Kafka集成实践

    Zookeeper与Kafka的集成是分布式系统中常见的实践,它们共同构成了一个高可用、可扩展的消息队列系统。以下是关于Zookeeper与Kafka集成实践的相关信息:
    集...

  • Linux SFTP如何恢复误删除文件

    在Linux系统中,使用SFTP(SSH File Transfer Protocol)误删除文件后,可以尝试以下方法来恢复: 从备份中恢复:如果你有定期备份文件的习惯,那么可以从最近的...

  • Linux回收站如何设置容量

    在Linux系统中,回收站(Trash)通常是由桌面环境(如GNOME、KDE等)提供的,而不是由文件系统直接管理的。因此,回收站的容量设置通常依赖于桌面环境的配置。以...

  • Debian上Jenkins的集群部署方案有哪些

    在Debian上部署Jenkins集群可以采用多种方案,以下是一些常见的部署方式:
    1. 使用Docker容器部署Jenkins集群 安装Docker:首先在每台Debian服务器上安装Do...