需求是要限制每个ip单独网速为100kb,服务器在阿里云上,专有网络网卡只有eth0
linux下限制网速的方法有很多种
1.wondershaper # 是一根据网卡来进行限制总网速,操作简单,适合新手
2.tc # linux自带的模块,规则复杂,但是效果强大
3.hashlimit # iptables的一个模块,用它结合iptables的其它命令可以实现限速的功能,但是单独hashlimit模块是无法限速的
这里我们选用的是hashlimit,因为比较熟悉iptables,tc太复杂,wondershaper 又达不到需求
利用hashlimit来限速需要包括两个步骤:
1.对符合hashlimit匹配规则包放行
2.丢弃/拒绝未放行的包
其实熟悉iptables,就可以很容易理解这个模块
根据需求使用以下规则就达到每个ip网速为100kb/s的限制
从eth0网卡进入INPUT链的所有数据,使用模块hashlimit 限制网速为100kb/s ,
mode为srcip,有4个mode选项:srcip(每个源地址IP为一个匹配项),dstip(每个目的地址IP为一个匹配项),srcport(每个源端口为一个匹配项),dstport(每个目的端口为一个匹配项),超过100kb/s的数据包会被DROP。OUTPUT链同理
iptables -A INPUT -i eth0 -m hashlimit --hashlimit-above 100kb/s --hashlimit-mode srcip --hashlimit-name in -j DROP
iptables -A OUTPUT -o eth0 -m hashlimit --hashlimit-above 100kb/s --hashlimit-mode dstip --hashlimit-name out -j DROP
删除
iptables -D INPUT -i eth0 -m hashlimit --hashlimit-above 100kb/s --hashlimit-mode srcip --hashlimit-name in -j DROP
iptables -D OUTPUT -o eth0 -m hashlimit --hashlimit-above 100kb/s --hashlimit-mode dstip --hashlimit-name out -j DROP
Comments | NOTHING