LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: 万里北国

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

[复制链接]
发表于 2005-8-4 09:42:50 | 显示全部楼层
Post by 万里北国
总算明白了,真是感谢。

原来--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了。

不知道我的理解对不对?


我个人理解--limit-burst 100 就好比是个100个包的触发,达到后--limit 100/s生效
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-14 16:35:44 | 显示全部楼层
这么说李忠宪的这个教程的解释确实有点问题,在他的INPUT chain里最后有这样一句,因为在INPUT链的最后,所以这一句应该是记录那些碎片的:
# 限制过滤规则的比对频率为每分钟平均流量三个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多处理三个封包(超过上限的封包将丢弃不予处理),这类封包通常是骇客用来进行阻断式攻击 
#$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
#--log-level INFO --log-prefix "IPT INPUT packet died:

按elico_yqf兄的指点,应当这样解释:低流量的碎片(低于瞬间3个的)正常记录,瞬间流量设定为一次最多处理三个封包,当达到这个值时,条件被触发,每minute会分配3个通行证,以继续进行LOG动作。



另外还有一处我有些迷惑,就是
$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

这里蓝色的两句有用吗?它上面的绿色那一句是说低于瞬间3个的流量时直接RETURN到主规则链PREROUTING,当触发这个限制后,每分钟分配3个,以继续能RETURN到主规则链PREROUTING,这里的问题是大量的多余封包怎样处理?按李忠宪的说法是直接丢弃了,可是已经直接丢弃了,那蓝色的两句还有什么用呢?它们应该接不到任何封包呀!
除非是多余的封包没有直接丢弃,而是继续向下遍历,蓝色的两句才会有用,请大家给讲解一下。
回复 支持 反对

使用道具 举报

发表于 2005-8-17 11:15:29 | 显示全部楼层
大家讨论的应该够清楚了,不知limit-burst limit值应该怎样确定呢?
回复 支持 反对

使用道具 举报

发表于 2005-9-7 17:37:41 | 显示全部楼层

Iptables

iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "一般都这么写吧,很明白,很清楚,它那样写是觉得不太清楚了,上面这句明白了就行,也可以自己写脚本来运行一下看看,我有另外一篇文章写了ulogd可以试试,在这里沉下去了,呵呵,http://www.linuxsir.cn/bbs/showthread.php?t=205118;不过在linuxfans.org那里加精华了,呵呵,东方不亮西方亮啊。多看一下能用的脚本,学得更快。。。
回复 支持 反对

使用道具 举报

发表于 2005-9-7 17:38:32 | 显示全部楼层
iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "一般都这么写吧,很明白,很清楚,它那样写是觉得不太清楚了,上面这句明白了就行,也可以自己写脚本来运行一下看看,我有另外一篇文章写了ulogd可以试试,在这里沉下去了,呵呵,http://www.linuxsir.cn/bbs/showt ... 得更快。。。
回复 支持 反对

使用道具 举报

发表于 2005-9-13 16:20:51 | 显示全部楼层
iptables问题求救

iptables的执行脚本如下
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 >/proc/sys/net/ipv4/conf/eth1/proxy_arp
echo 1 >/proc/sys/net/ipv4/conf/eth0/proxy_arp
iptables -t nat -A POSTROUTING -s 192.168.1.0 -j SNAT --to-source 200.200.199.0
我要把 192.168.1.0的nat到200.200.199.0网段
iptables -I INPUT -p tcp -m mac --mac-source 00:0D:87:4B:FA:B1 -j ACCEPT
并且只有00:0D:87:4B:FA:B1可以nat可是配好后ping 200.200.199.2是可以的。可是ssh不可以请问如何改
这台就是2网卡eth0/1两卡的ip是192.168.1.1和200.200.199.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-18 09:28:33 | 显示全部楼层
楼上的再做个DNAT试试看。
我在主帖提的问题,看了看《iptables 指南 1.1.19》
有了新的理解:
6.4.3.1. Limit match
这个匹配操作必须由-m limit明确指定才能使用。有了它的帮助,就可以对指定的规则的日志数量加以限制,以免你被信息的洪流淹没哦。比如,你可以事先设定一个限定值,当符合条件的包的数量不超过它时,就记录;超过了,就不记录了。我们可以控制某条规则在一段时间内的匹配次数(也就是可以匹配的包的数量),这样就能够减少DoS syn flood攻击的影响。这是它的主要作用,当然,还有很多其他作用(译者注:比如,对于某些不常用的服务可以限制连接数量,以免影响其他服务)。limit match也可以用英文感叹号取反,如:-m limit ! --limit 5/s表示在数量超过限定值后,所有的包都会被匹配。

(译者注:为了更好地理解这个匹配操作,我们通过一个比喻来解释一下。原文也做了类似地比喻,但我觉得对于初学者不易理解,故未采用。)limit match的工作方式就像一个单位大门口的保安,当有人要进入时,需要找他办理通行证。早上上班时,保安手里有一定数量的通行证,来一个人,就签发一个,当通行证用完后,再来人就进不去了,但他们不会等,而是到别的地方去(在iptables里,这相当于一个包不符合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理)。但有个规定,每隔一段时间保安就要签发一个新的通行证。这样,后面来的人如果恰巧赶上,也就可以进去了。如果没有人来,那通行证就保留下来,以备来的人用。如果一直没人来,可用的通行证的数量就增加了,但不是无限增大的,最多也就是刚开始时保安手里有的那个数量。也就是说,刚开始时,通行证的数量是有限的,但每隔一段时间就有新的通行证可用。limit match有两个参数就对应这种情况,--limit-burst指定刚开始时有多少通行证可用,--limit指定要隔多长时间才能签发一个新的通行证。要注意的是,我这里强调的是“签发一个新的通行证”,这是以iptables的角度考虑的。在你自己写规则时,就要从这个角度考虑。比如,你指定了--limit 3/minute --limit-burst 5 ,意思是开始时有5个通行证,用完之后每20秒增加一个(这就是从iptables的角度看的,要是以用户的角度看,说法就是每一分钟增加三个或者每分钟只能过三个)。你要是想每20分钟过一个,只能写成--limit 3/hour --limit-burst 5,也就是说你要把时间单位凑成整的。

Table 6-8. Limit match options

Match --limit
Example iptables -A INPUT -m limit --limit 3/hour
Explanation 为limit match设置最大平均匹配速率,也就是单位时间内limit match可以匹配几个包。它的形式是一个数值加一个时间单位,可以是/second /minute /hour /day 。默认值是每小时3次(用户角度),即3/hour ,也就是每20分钟一次(iptables角度)。
Match --limit-burst
Example iptables -A INPUT -m limit --limit-burst 5
Explanation 这里定义的是limit match的峰值,就是在单位时间(这个时间由上面的--limit指定)内最多可匹配几个包(由此可见,--limit-burst的值要比--limit的大)。默认值是5。为了观察它是如何工作的,你可以启动“只有一条规则的脚本”Limit- match.txt,然后用不同的时间间隔、发送不同数量的ping数据包。这样,通过返回的 echo replies就可以看出其工作方式了。


-m limit --limit 100/s --limit-burst 150
达到每秒150的值后开始每10毫秒分配一个通行证(也就是100/s),这是满足了触发条件后的。
如果达不到每秒150的值,比如只来了120,那也要占用大门保安手中的120个通行证,并且按照10毫秒过一个的速度通过大门,这时保安手中还剩150-120=30个通行证,如果这时再有后来的包,就要用他剩的这30个通行证了,当通行证用完后,再来人就进不去了,但他们不会等,而是到别的地方去(在iptables里,这相当于一个包不符合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理)。

我觉得还是多看看这本指南,会更清楚些。毕竟〈指南〉是官方的译本,更准确。
回复 支持 反对

使用道具 举报

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

本版积分规则

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