LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2274|回复: 16

请高手耐心看看,很费脑筋,怎么觉得iptables的教程这里相矛盾?

[复制链接]
发表于 2005-7-9 10:53:28 | 显示全部楼层 |阅读模式
李忠宪的文章:
参数 -m limit --limit
范例 iptables -A INPUT -m limit --limit 3/hour
说明 用来比对某段时间内封包的平均流量(单位时间为秒),上面的例子是用来比对:每小时平均流量是否超过一次 3 个封包。除了每小时平均一次外,也可以每秒钟、每分钟或每天平均一次,默认值为每小时平均一次,参数如后: /second、 /minute、/day。除了进行封包数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因骇客使用洪水攻击法,导致服务被阻断。
参数 --limit-burst
范例 iptables -A INPUT -m limit --limit-burst 5
说明 用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过 5 个(这是默认值),超过此上限的封包将被直接丢弃,其余封包放入缓冲区等待处理。
举实例来说明:假设现在同时涌入10个封包,前5 个封包进入缓冲区(--limit-burst 5),其余封包丢弃,这5个封包由于iptables每秒只处理一个1个(--limit 1/s),所以共需要5秒钟,在这5秒内将不再接受任何封包。

看这段红字的意思是,大量超过limit限制的封包涌入时,只处理前5 个,其余丢弃。
可是台湾“天蓝工作室”的资料却是这样写的:
iptables -A INPUT -p icmp -s 11.22.33.44 -m limit --limit 6/m -j ACCEPT
那 麼這道規則只會每分鐘核對六次,過了六次後,這個標頭不算符合。可是這個封包不符合該規則,便會往下層繼續與其他規則核對,到最後這個封包?K不能與任何一道規則相符合,而這道 chain的預設處理為ACCEPT,那麼這個封包還是會進入您的網絡,即是說剛才這道過濾規則還不足以把這?濾掉。
於是,我們需要在這道過濾規則下面加上:
iptables -A INPUT -p icmp -s 11.22.33.44 -j DROP

那麼當上面的規則已因超越六次後,已經變成不符合時,該封包會立刻與下面這道規則核對,?K且被消滅。

而且李忠宪的文章中有这样的例子:
$IPTABLES -t nat -N syn_flood
$IPTABLES -t nat -A syn_flood -m limit --limit 3/m --limit-burst 3 -j RETURN
$IPTABLES -t nat -A syn_flood -j \
LOG --log-level INFO --log-prefix "IPTABLES SYN-FLOOD:"
$IPTABLES -t nat -A syn_flood -j DROP
$IPTABLES -t nat -A PREROUTING -p TCP --syn -j syn_flood

按“天蓝工作室”的资料,从这个例子来理解,应该是流量在limit的数值之内时(流量小,安全)进行RETURN动作,如果流量超过limit的数值,就不符合该规则了,就不能再RETURN了,而是只抓出三个包用LOG记录下来,最后再把这三个包DROP掉。
可是这样的理解与上面的红字那一段相矛盾了,按红字的意思看刚才这个例子,似乎是即使超过limit的限制了,也只是把多余的包丢弃,而把那三个包继续可以RETURN动作。


我现在就是不明白,在坛子里经常有这样的句子:
-m limit --limit 100/s --limit-burst 100 -j ACCEPT
我觉得应该是流量小于等于limit限制时进行ACCEPT,问题是如果大于limit了,是仍然ACCEPT其中的100个,把其它丢弃呢,还是所有的都不能ACCEPT了,只能继续下面的后续规则呢?
发表于 2005-7-11 19:08:14 | 显示全部楼层
个人理解如下:
--limit-burst  用来比对瞬间大量封包的数量,比如:--limit-burst  100,则说明当接收包达到100后将会触发。
--limit xx/s 用来比对某段时间内封包的平均流量,那就是在一段时间内只能处理xx个包,两者并不矛盾,如
-m limit --limit 100/s --limit-burst 100 -j ACCEPT  理解如下:
当有多于100个包进来时,将会触发 --limit-burst 100 ,触发后实行--limit 100/s,也就是iptables的每10毫秒记录一次,如果在某个10毫秒内无包进来,则将--limit-burst 复位一个,再进行封包对比。。

打个比方说,要通过一座桥,--limit-burst 100就像是通行证的总数量,刚开始来的人就不设限制,先来就先拿通行证过桥,当--limit-burst的通行证总量发送完后,就没有可用的通行证,这时来的人就过不了,但是因为有--limit 100/s(iptables是每10毫秒记录一次),所以每10毫秒就会再产生一张通行证,通行证也会累积,但总量不能超过--limit-burst所限制的数量,
我以下句为例画的图示:
-m limit --limit 1/s --limit-burst 5 -j ACCEPT
黑点为收到的包,下划线为不再接收包(以秒为单位),线圈为没有收到包,仔细看我上面写的就的清楚了。。。


这两者结合使用起到了防止泛洪攻击的作用,不知道我有没有说清楚,多多交流了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2005-7-12 13:34:40 | 显示全部楼层
我觉得好象是
-m limit --limit 100/s --limit-burst 100 -j ACCEPT
是限制每秒限制100个包,,在一秒钟监视100次吧
回复 支持 反对

使用道具 举报

发表于 2005-7-13 14:17:50 | 显示全部楼层
Post by 妖的终爱
我觉得好象是
-m limit --limit 100/s --limit-burst 100 -j ACCEPT
是限制每秒限制100个包,,在一秒钟监视100次吧


应该是在开始每秒限制100个包功能实现之前,先允许100个突发包~ :beat
回复 支持 反对

使用道具 举报

发表于 2005-7-13 17:40:24 | 显示全部楼层
Post by huhuegg
应该是在开始每秒限制100个包功能实现之前,先允许100个突发包~ :beat

不明白,,不是限制每秒通过100个包,并且一秒监视100次吗
请您详细点讲好吗
回复 支持 反对

使用道具 举报

发表于 2005-7-14 15:46:53 | 显示全部楼层
Post by 妖的终爱
不明白,,不是限制每秒通过100个包,并且一秒监视100次吗
请您详细点讲好吗


突发包是在限制之前,100个包后才运用每秒通过100个包的限制~
回复 支持 反对

使用道具 举报

发表于 2005-7-15 09:53:14 | 显示全部楼层
对,就是要在限制之前先允许通过--limit-burst xxx个的包,然后才进行限制,和我上面所说的一致。。。
回复 支持 反对

使用道具 举报

发表于 2005-7-15 17:13:09 | 显示全部楼层
个人认为 elico_yqf 正解。

还有个问题,这个值设定多少合适,上面说的是--limit 100/s --limit-burst 100 , 但我看有的文章是 --limit 3/minute --limit-burst 3 , 这个值差的似乎有点大。
回复 支持 反对

使用道具 举报

发表于 2005-7-20 17:51:42 | 显示全部楼层
3足够了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-1 10:07:56 | 显示全部楼层
总算明白了,真是感谢。

原来--limit-burst是个触发条件。
是不是说在 -m limit --limit 100/s --limit-burst 100 -j ACCEPT这句中,当达不到--limit-burst 100这个条件时,连前面的--limit 100/s 这个速度限制参数也不会起作用。

而在iptables -A INPUT -p icmp -s 11.22.33.44 -m limit --limit 6/m -j ACCEPT这句中,因为没有--limit-burst这个参数,所以此句的意思就仅仅表示为限制速度为6/minute了。

不知道我的理解对不对?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表