热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

iptableslimit参数限速详解

limit匹配:限制匹配数据包的频率或速率,看清楚了,它是用来限制匹配的数据包的频率和速率的.这里limit这个词经常给别人限制的误解,其实准确说,应该是按一定速率去匹配,至于限制还是放行是后面-j动作来实现的,limit仅仅是个match模块,他的功能是匹配

limit匹配:限制匹配数据包的频率或速率,看清楚了,它是用来限制匹配的数据包的频率和速率的.这里“limit”这个词经常给别人“限制”的误解, 其实准确说,应该是“按一定速率去匹配”,至于“限制”还是“放行”是后面 -j 动作来实现的,limit 仅仅是个 match 模块,他的功能是匹配,匹配方式是按一定速率.

用iptables的limit模块,目标是ACCEPT.当你设置300/s时,它大约每3ms发出一个令牌,获得令牌的包可以发出去,没有获得令牌的包只能等待下一个令牌到来,这样不会造成一些包丢失,更不会造成所谓“断线”的. 

以下2条是对icmp的burst限制
iptables -A INPUT -p icmp -m limit --limit 1/sec --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

第一条ipables的意思是限制ping包每一秒钟一个,10个后重新开始.

同时可以限制IP碎片,每秒钟只允许100个碎片,用来防止DoS攻击.
iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT


下面详细的讲述一下iptables的limit模块的功能:




  • 限制 ping (echo-request) 传入的速度

限制前, 可正常每 0.2 秒 ping 一次
ping your.linux.ip -i 0.2

限制每秒只接受一个 icmp echo-request 封包
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

--limit 1/s 表示每秒一次; 1/m 则为每分钟一次
--limit-burst 表示允许触发 limit 限制的最大次数 (预设 5)

再以每 0.2 秒 ping 一次, 得到的响应是每秒一次
ping your.linux.ip -i 0.2

下面规则亦可达到每秒只接受一个 echo-request 封包
iptables -N pinglimit
iptables -A pinglimit -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A pinglimit -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j pinglimit






  • 建立自订 Chain, 限制 tcp 联机每分钟一次, 超过者触发 Log 记录 (记录在 /var/log/messages)

iptables -N ratelimit
iptables -A ratelimit -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A ratelimit -p tcp --syn -m limit --limit 1/m --limit-burst 1 -j ACCEPT
iptables -A ratelimit -p tcp -j LOG --log-level "NOTICE" --log-prefix "[RATELIMIT]"
iptables -A ratelimit -p tcp -j DROP

引用自订 Chain, 限制 ssh (tcp port 22) 连入频率(特定 IP 来源不受限制)
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ratelimit

补充: 清除自定义 Chain
iptables -L -n --line-number
iptables -D INPUT n
iptables -F ratelimit
iptables -X ratelimit






  • 防治 SYN-Flood 碎片攻击

iptables -N syn-flood
iptables -A syn-flood -m limit --limit 50/s --limit-burst 10 -j RETURN
iptables -A syn-flood -j DROP
iptables -I INPUT -j syn-flood

读者可以自行使用httperf/webbench等压力测试工具模拟一下syn-flood攻击.看一看效果.





  • iprange a.b.c.d-a.b.c.d 表示这一段地址还是分别表示每一个包含的地址?

iptables -A INPUT -m iprange --src-range 172.16.1.10-172.16.16.1 -m limit --limit 300/second -j ACCEPT

表示172.16.1.10-172.16.16.1这段地址每秒一共匹配300个数据包,还是表示172.16.1.10-172.16.16.1地址中的每一个ip 分别匹配300个数据包?
经笔者经验,iprange a.b.c.d-a.b.c.d 应该表示一段地址每秒一共匹配00个数据包.读者可以验证一下.

禁止ping 
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

推荐阅读
author-avatar
俣宸爸555_872_923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有