Ubuntu防火墙限制带宽的主要方法
iptables是Ubuntu自带的防火墙工具,可通过limit模块限制特定流量的速率。适用于简单场景(如限制SSH登录速率)。
示例命令:
# 限制SSH(端口22)的新建连接速率为100个/分钟,超出后丢弃 sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 100/minute -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j DROP 说明:--limit指定速率(支持/second、/minute等单位),-m limit启用速率限制模块。需保存规则(sudo iptables-save | sudo tee /etc/iptables/rules.v4)以持久化。
tc是Linux内核提供的流量控制工具,通过HTB(Hierarchical Token Bucket)队列调度算法实现灵活的带宽分配,适用于复杂场景(如限制特定IP或端口的带宽)。
步骤详解:
sudo apt update && sudo apt install iproute2 eth0(替换为目标接口)附加到HTB队列,handle 1:为队列句柄,default 30表示未匹配流量的默认类。sudo tc qdisc add dev eth0 root handle 1: htb default 30 1:)的保证带宽(rate)和最大带宽(ceil),子类(1:1)继承父类并设置具体限制(如1Mbps)。sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit u32模块匹配特定流量(如源IP192.168.1.100),将其分配到对应的类(1:1)。sudo tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip src 192.168.1.100 flowid 1:1 说明:rate为保证带宽,ceil为最大允许带宽(突发流量上限)。监控规则效果可使用tc -s qdisc ls dev eth0。
nftables是iptables的下一代替代工具,语法更简洁,支持更丰富的流量匹配(如meter、quota)。适用于需要高性能或复杂规则的场景。
示例命令:
meter统计流量,超过rate 1mbit时触发drop(或log)。sudo nft add table inet filter sudo nft add chain inet filter output { type filter hook output priority 0; policy accept; } sudo nft add rule inet filter output meta l4proto tcp dport 80 meter http_meter { ip saddr limit rate 1mbit } drop quota限制总流量(如100MB),超出后拒绝。sudo nft add table inet filter sudo nft add chain inet filter input { type filter hook input priority 0; policy accept; } sudo nft add rule inet filter input ip saddr 192.168.1.100 meter bw_quota { bytecount 100mb } drop 说明:meter用于流量统计,limit rate设置速率限制,quota设置总流量配额。持久化规则需导出到/etc/nftables.conf并启用服务(sudo systemctl enable --now nftables)。
wondershaper是基于tc的脚本工具,简化了常用带宽限制场景(如限制上下行速度)的配置,适用于快速部署。
步骤详解:
sudo apt install wondershaper eth0为目标接口,1000为下载速度(KB/s),500为上传速度(KB/s)。sudo wondershaper eth0 1000 500 sudo wondershaper clear eth0 说明:wondershaper自动创建HTB队列和过滤器,适合非技术人员快速配置。
sudo)。/etc/iptables/rules.v4;nftables规则需导出到/etc/nftables.conf并启用服务;tc规则需添加到启动脚本(如/etc/rc.local)。