广告图片
TOP云-靠谱的企业级公有云服务平台

云服务器、物理服务器、云安全、SSL证书限时3折抢购!

双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,

TOP云-靠谱的企业级公有云服务平台:双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,云服务器、物理服务器、云安全、SSL证书限时3折抢购!点击这里立即抢购! 展开广告

TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);
内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。
购买链接:https://c.topyun.vip/cart?fid=1&gid=236

  在服务器运维中,端口带宽限速是保障关键业务稳定性的重要手段。例如,防止单个用户占用过多带宽影响其他服务,或避免突发流量冲击导致服务器崩溃。通过Linux系统自带的tc(Traffic Control)和iptables工具,可精准控制端口的出入口带宽。本文将详细对比两种方案的实现原理、适用场景及操作步骤,并推荐TOP云物理服务器特惠机型(立即选购),助力企业构建高效、可控的网络环境。

一、为什么需要端口限速?

1. 常见应用场景

  • 防止带宽滥用:如共享服务器中,某用户通过P2P下载占用全部带宽,影响其他用户访问网站。
  • 保障核心业务:优先分配带宽给数据库、API等关键服务,限制非核心业务(如日志上传)的带宽。
  • 应对突发流量:避免因流量激增导致服务器过载,触发安全组拦截或云服务商流量计费超支。
  • 合规性要求:满足部分行业对数据传输速率的监管要求(如金融、医疗领域)。

2. 限速工具对比

工具 层级 优势 劣势
tc 网络层(IP) 精细控制队列调度算法(如HTB、SFQ),支持多级限速,适合复杂流量管理。 配置复杂,需理解QoS(服务质量)概念,对新手不友好。
iptables 传输层(TCP/UDP) 简单易用,通过--limit--limit-burst参数快速限制连接速率。 仅能限制连接数或数据包速率,无法直接控制带宽(需结合hashlimit模块)。

二、方案一:使用tc实现端口带宽限速

1. tc限速原理

tc是Linux内核提供的流量控制工具,通过**队列规则(qdisc)分类(class)**实现带宽分配。典型流程如下:

  1. 创建根队列:在网卡(如eth0)上绑定HTB(Hierarchical Token Bucket)队列。
  2. 定义子分类:为特定端口(如80)创建子分类,并分配带宽上限。
  3. 应用过滤器:通过u32fw过滤器将流量匹配到对应分类。

2. 完整操作步骤(限制端口80的出站带宽为10Mbps)

步骤1:安装必要工具
Bash

# 确保系统已安装iproute2(通常默认安装)
which tc || sudo apt install iproute2 -y  # Ubuntu/Debian
which tc || sudo yum install iproute -y    # CentOS/RHEL
步骤2:创建HTB根队列
Bash

# 获取网卡名称(如eth0、ens33)
IFACE="eth0"
# 获取网卡最大带宽(单位:Mbps,需根据实际带宽调整)
MAX_BANDWIDTH=1000  # 假设服务器总带宽为1Gbps

# 创建HTB根队列,默认允许所有流量通过
sudo tc qdisc add dev ${IFACE} root handle 1: htb default 10
步骤3:创建子分类并分配带宽
Bash

# 为端口80创建子分类(classid 1:100),限制带宽为10Mbps
sudo tc class add dev ${IFACE} parent 1: classid 1:100 htb rate 10mbit ceil 10mbit
步骤4:应用过滤器匹配端口80流量
Bash

# 使用u32过滤器匹配目标端口80的TCP流量
sudo tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 \
    match ip dport 80 0xffff \
    flowid 1:100
步骤5:验证配置
Bash

# 查看队列规则
sudo tc -s qdisc show dev ${IFACE}
# 查看分类和过滤器
sudo tc class show dev ${IFACE}
sudo tc filter show dev ${IFACE}
步骤6:删除规则(测试后清理)
Bash

sudo tc qdisc del dev ${IFACE} root

三、方案二:使用iptables限制端口连接速率

1. iptables限速原理

iptables通过--limit--limit-burst参数限制单位时间内匹配规则的数据包数量,间接控制带宽。例如:

  • 限制每秒最多100个数据包(--limit 100/second)。
  • 允许突发流量(--limit-burst 50),即短时间内允许超过限制值。

2. 完整操作步骤(限制端口22的SSH连接速率为10个/秒)

步骤1:添加限速规则
Bash

# 限制新SSH连接速率(目标端口22)
sudo iptables -A INPUT -p tcp --dport 22 \
    -m state --state NEW \
    -m limit --limit 10/second --limit-burst 5 \
    -j ACCEPT

# 允许已建立的连接通过
sudo iptables -A INPUT -p tcp --dport 22 \
    -m state --state ESTABLISHED,RELATED \
    -j ACCEPT
步骤2:保存规则(根据系统选择方法)
Bash

# Ubuntu/Debian
sudo iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL
sudo service iptables save
步骤3:验证规则
Bash

sudo iptables -L INPUT -v -n | grep 22

四、高级场景:结合tc与iptables实现精准限速

1. 场景需求

  • 限制端口443(HTTPS)的入站带宽为50Mbps,同时防止单个IP滥用。
  • 优先保障白名单IP的带宽需求。

2. 实现方案

步骤1:使用tc限制端口443总带宽
Bash

IFACE="eth0"
sudo tc qdisc add dev ${IFACE} root handle 1: htb default 10
sudo tc class add dev ${IFACE} parent 1: classid 1:100 htb rate 50mbit ceil 50mbit
sudo tc filter add dev ${IFACE} protocol ip parent 1:0 prio 1 u32 \
    match ip sport 443 0xffff \
    flowid 1:100
步骤2:使用iptables标记白名单IP
Bash

# 标记白名单IP(如192.168.1.100)的流量
sudo iptables -A PREROUTING -t mangle -s 192.168.1.100 -p tcp --dport 443 -j MARK --set-mark 1

# 为标记1的流量创建独立队列(分配更高带宽)
sudo tc class add dev ${IFACE} parent 1: classid 1:200 htb rate 30mbit ceil 30mbit
sudo tc filter add dev ${IFACE} protocol ip parent 1:0 prio 2 handle 1 fw flowid 1:200

五、TOP云物理服务器:为限速策略提供高性能基础

限速工具的稳定性依赖服务器硬件性能。TOP云物理服务器提供以下配置(立即购买),确保限速规则高效执行:

  1. 多核CPU快速处理流量规则
    • 双路E5-2696/98 V4(88核):并行处理数万条iptables/tc规则,避免延迟。
    • 双路Platinum 8173(112核):支撑超大规模流量管理(如CDN节点、游戏服务器)。
  2. 大内存缓存规则表
    • 内存从32G-128G可选,防止因内存不足导致规则丢失或性能下降。
  3. 高带宽保障限速精度
    • 提供单线、多线独享20M-200M带宽,确保限速值与实际传输速率一致。

六、常见问题解答

Q1:如何限制出站和入站带宽?

  • 出站带宽:在tc中匹配sport(源端口)或dport(目标端口)的流量。
  • 入站带宽:需在网卡的ingress方向创建队列(需内核支持):
    Bash

    sudo tc qdisc add dev ${IFACE} ingress
    sudo tc filter add dev ${IFACE} parent ffff: protocol ip prio 1 u32 \
        match ip dport 80 0xffff \
        action mirred egress redirect dev ifb0  # 需创建ifb虚拟设备

Q2:限速后如何监控实际带宽?

  • 使用iftop
    Bash

    sudo iftop -i eth0 -P  # 按端口查看实时带宽
  • 使用nload
    Bash

    sudo nload eth0  # 查看网卡总带宽

Q3:如何动态调整限速值?

  • 通过脚本修改tc规则
    Bash

    # 修改子分类带宽为20Mbps
    sudo tc class change dev eth0 parent 1: classid 1:100 htb rate 20mbit ceil 20mbit

立即行动:选购TOP云物理服务器,部署精准端口限速策略,保障业务稳定运行!
点击购买

阿, 信