hashlimit-Iptables笔记

一、简介

hashlimit是iptables的一个匹配模块,用它结合iptables的其它命令可以实现限速的功能。注意:单独hashlimit模块是无法进行限速的

二、原理介绍

实际上,使用 hashlimit 进行限速主要包括两个步骤:

  • 对符合 hashlimit 匹配规则包放行
  • 丢弃/拒绝未放行的包

2.1 令牌桶模型

hashlimit 的匹配方式是基于令牌桶(Token bucket)的模型,令牌桶是一种网络通讯中常见的缓冲区工作原理,它有两个重要的参数,令牌桶容量n令牌产生速率s

  • 令牌桶容量n:可以把令牌当成是门票,而令牌桶则是负责制作和发放门票的管理员,它手里最多有n张令牌。初始时,管理员开始手里有n张令牌,每当一个数据包到达后,管理员就看看手里是否还有可用的令牌。如果有,就把令牌发给这个数据包,hashlimit 就告诉iptables,这个数据包被匹配了,而当管理员把手上所有的令牌都发完了,再来的数据包就拿不到令牌了;这时,hashlimit 模块就告诉 iptables ,这个数据包不能被匹配,对应参数--hashlimit-burst
  • 令牌产生速率s:当令牌桶中的令牌数量少于n,它就会以速率s来产生新的令牌,直到令牌数量到达n为止;

通过令牌桶机制,可以有效的控制单位时间内通过(匹配)的数据包数量,又可以容许短时间内突发的大量数据包的通过(只要数据包数量不超过令牌桶n),对应参数--hashlimit

2.2 匹配项

除了令牌桶模型外,hashlimit 匹配的另外一个重要概念是匹配项。在hashlimit中,每个匹配项拥有一个单独的令牌桶,执行独立的匹配计算,对应参数--hashlimit-mode,匹配项的可选参数为以下几种:

  • srcip:每个源地址IP为一个匹配项;
  • dstip:每个目的地址IP为一个匹配项;
  • srcport:每个源端口为一个匹配项;
  • dstport:每个目的端口为一个匹配项;

2.3 相关配置参数

hashlimit 的相关匹配项参数介绍如下:

  • --hashlimit-name:该参数指定了每个调用了 hashlimit 模块的 iptables 命令而建立的文件名,该文件存放在 /proc/net/ipt_hashlimit 目录中,其中保存着各匹配项的信息;

  • --hashlimit:令牌产生速率,示例:5/sec 代表每秒产生5个;

  • --hashlimit-burst:令牌桶容量,默认是5;

  • --hashlimit-mode:匹配项,每个匹配项拥有一个单独的令牌桶,执行独立的匹配计算,可选参数如下所示:

    • srcip:每个源地址IP为一个匹配项;
    • dstip:每个目的地址IP为一个匹配项;
    • srcport:每个源端口为一个匹配项;
    • dstport:每个目的端口为一个匹配项;
  • --hashlimit-htable-size:设置哈希表的元值;

  • --hashlimit-htable-max:设定哈希表入口最大数量;

三、示例介绍

3.1 实例一

iptables -A INPUT -p tcp --dport 1234 -m hashlimit --hashlimit-name HashLimitName --hashlimit 1/sec --hashlimit-burst 1 --hashlimit-mode srcip -j ACCEPT
iptables -A INPUT -p tcp --dport 1234 -j DROP

上述实例解释信息为:

  • 为所有访问本机 1234 端口的不同IP建立一个匹配项;
  • 匹配项对应的令牌桶容量为10;
  • 令牌产生速率为5个每秒;
  • 放行通过匹配的数据包;
  • 丢弃所有其它访问本机 1234 端口的数据包;

3.2 实例二

iptables -N DEFLOOD 
iptables -A FORWARD -s 192.168.1.2/24 -m state --state NEW -j DEFLOOD
iptables -A DEFLOOD -m hashlimit --hashlimit-name deflood --hashlimit 10/sec
--hashlimit-burst 10 --hashlimit-mode srcip -j ACCEPT
iptables -P DEFLOOD -j DROP
  • 建立了一个自定义的处理链;
  • 所有来自于 192.168.1.2/24 网段的并且打算新建网络连接的数据包,都进入 DEFLOOD 链处理 ;
  • 在 DEFLOOD 链中,为每个IP建立一个匹配项,对应令牌桶容量为10,产生速率为10个每秒;
  • 放行通过匹配的数据包;
  • 在 DEFLOOD 链中丢弃所有其它的数据包 ;
Author: bugwz
Link: https://bugwz.com/2019/01/04/iptables-hashlimit/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.