iptables系列之常用扩展模块
iptables
-s,-d
-s IP,NET
172.16.0.0/16,172.16.100.7
-m iprange
This matches on a given arbitrary range of IP addresses.
-m iprange
--src-range
--dst-range
iptables -t filter -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-m connlimit :连接数限制
[!] --connlimit-above n 连接数的上限
允许您限制每个服务器的并行连接数量,客户端地址(或客户端地址块)。
同一个地址允许同时发起多少个连接。
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp 90 -m connlimit ! --connlimit-above 2 -j ACCEPT
服务器的cpu,内存,网卡带宽有限。瞬间涌入大量的请求,后面的请求就是等待。
流量控制
ip,tc 流量整形 reshape
流量控制
流量控制是对已经成功分类的具体流量执行的一种管制行为,这控制行为从实施特性上大致可分为两种:流量监管(policing),事实上就是限速,如果可能它将超过限定速率的流量丢弃,或者重标记流量行为,流量整形(shaping)事实上就是尽量最大努力缓存并平滑流量。
接入速率(Access Rate):
是指物理接口的接入速率
认购速率(traffic contract):
认购流量也叫“契约流量”,所谓契约流量就是指用户花钱在ISP(Internet服务供应商)处购买的网络流速,这个速度是指ISP在任何时候都应该为用户保障的速率。通常它还有一个名称叫CIR(承诺信息速率CommittedInformation Rate)。
理解流量控制中的监管(限速)行为:
如图5所示,为流量的监管前后的示意图,可清晰的看出,没有被监管之前的流量,在限定速率之上的那部分,在执行监管这后,流量的波峰被丢弃,流量监管这种行为仅仅是对超过限定速率的流量进行丢弃或者重标记流量(一般重标记会降级流量的优先程度),不对流量做缓存,所以不会为那些没有超过限定的流量造成更大的延迟。更直接的讲流量监管实际上是一种限速行为,超额部分被丢弃的流量会引发重传。
理解流量控制中的整形(缓存)行为:
流量整形与流量监管有着不同的实质,流量整形是将超过限额的流量进行缓存,然后基于特定的策略和规则来传递这部分缓存的流量,达到平滑流量的效果。如图6所示,超过整形速率之上的流量在被实施流量整形后,这部分超额流量将以换回更大的转发延迟为代价来得到发送,而不是丢弃,所以在图6的环境中虚线所示的流量就是被整形后的流量,可看出它更加的平滑,但是在时间轴上的转发延迟将更大。
tc:令牌桶机制
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。如果令牌不被消耗,或者被消耗的速度小于产生的速度,令牌就会不断地增多,直到把桶填满。后面再产生的令牌就会从桶中溢出。最后桶中可以保存的最大令牌数永远不会超过桶的大小。
传送到令牌桶的数据包需要消耗令牌。不同大小的数据包,消耗的令牌数量不一样。
令牌桶这种控制机制基于令牌桶中是否存在令牌来指示什么时候可以发送流量。令牌桶中的每一个令牌都代表一个字节。如果令牌桶中存在令牌,则允许发送流量;而如果令牌桶中不存在令牌,则不允许发送流量。因此,如果突发门限被合理地配置并且令牌桶中有足够的令牌,那么流量就可以以峰值速率发送。
-m limit
此模块匹配使用令牌桶筛选器的有限速率。规则使用此扩展将匹配到该限制(除非'!'使用标志。它可以与日志目标结合使用有限的日志记录,如。
--limit rate :
最大平均匹配率:指定为一个数字,用一个可选的“/second”,“/minute”,“/hour”,或“/day”的后缀,默认是3/hour。
--limit-burst number
最大初始数据包数匹配:这个数字得到接受每一个时间达不到上述规定的限制,这个数字最多,默认为5。
iptables -t filter -I INPUT -d 172.16.1.3 -p tcp --dport 22 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -j ACCPET
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -m limit --limit=1/second --limit-burst=4 -j ACCEPT
-m string
--algo {bm|kmp}
--string "string"
iptables -I OUTPUT -s 172.16.1.3 -m string --algo kmp --string "nihao" -j REJECT
-j lOG
--log-prefix "string"
iptables -t -I INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -j LOG --log-prefix "--firewall log for icmp"
注意:防止磁盘IO,修改写入的速率。