《使用iptables建置linux防火墙》
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packet died:"
这样岂不是成了流量不到3/m、瞬间峰值不到一次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
这两个例子一比较,让人迷糊,到底是超过了limit的限制才进行limit后面跟的-j 动作,
还是流量在limit的限制之内时进行limit 后面的 -j 动作。
李忠宪的文章:
参数 -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秒内将不再接受任何封包。
iptables -A INPUT -p icmp -s 11.22.33.44 -m limit --limit 6/m -j ACCEPT
那 麼這道規則只會每分鐘核對六次,過了六次後,這個標頭不算符合。可是這個封包不符合該規則,便會往下層繼續與其他規則核對,到最後這個封包並不能與任何一道規則相符合,而這道 chain的預設處理為ACCEPT,那麼這個封包還是會進入您的網絡,即是說剛才這道過濾規則還不足以把這類濾掉。
於是,我們需要在這道過濾規則下面加上:
iptables -A INPUT -p icmp -s 11.22.33.44 -j DROP
那麼當上面的規則已因超越六次後,已經變成不符合時,該封包會立刻與下面這道規則核對,並且被消滅。
$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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |