在 Ubuntu 上使用 iptables 对某个 IP 进行限速,通常借助 hashlimit 模块(推荐)或 tc(流量控制)。下面按常见场景说明。
例如限制 192.168.1.100 每秒最多 100 个包:
iptables -A INPUT -s 192.168.1.100 \
-m hashlimit \
--hashlimit-name limit_ip \
--hashlimit-mode srcip \
--hashlimit-above 100/sec \
-j DROP
超过 100 包/秒的流量将被丢弃
iptables -A OUTPUT -d 192.168.1.100 \
-m hashlimit \
--hashlimit-name limit_ip_out \
--hashlimit-mode dstip \
--hashlimit-above 100/sec \
-j DROP
例如限制每秒 1MB(约 8Mbps):
iptables -A INPUT -s 192.168.1.100 \
-m hashlimit \
--hashlimit-name bw_limit \
--hashlimit-mode srcip \
--hashlimit-above 1mb/s \
-j DROP
支持单位:
kb/smb/skbit/smbit/siptables -A INPUT -s 192.168.1.100 \
-m hashlimit \
--hashlimit-name conn_limit \
--hashlimit-mode srcip \
--hashlimit-above 20/minute \
-j DROP
(不是速率,但常用于防护)
iptables -A INPUT -s 192.168.1.100 \
-m connlimit --connlimit-above 10 \
-j DROP
超过 10 个并发连接直接拒绝
iptables -L -n -v
iptables -D INPUT -s 192.168.1.100 -m hashlimit ...
或按编号删除:
iptables -L INPUT --line-numbers
iptables -D INPUT 3
如果你需要真正限速而不是丢包,建议使用:
tc + htb + iptables MARK
示例(简化):
tc qdisc add dev eth0 root htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 1mbit
iptables -t mangle -A PREROUTING -s 192.168.1.100 -j MARK --set-mark 10
tc filter add dev eth0 protocol ip parent 1:0 handle 10 fw flowid 1:10
✅ Ubuntu 默认已支持 hashlimit
❌ iptables 限速是“丢包式”,不是平滑限速
✅ Docker / 云服务器注意网卡名称(如 eth0, ens33)
如果你能告诉我:
我可以给你更精确的命令。