|
看过的几乎所有的书上都说,对注册在每一条链上的nf_hook_ops,
都是按照优先级的高低开始执行注册在链上结构中的hook函数的.当优先级高的规则 ACCEPT 一个数据包时,此包将被下一个hook函数继续判断是否匹配,
直到匹配一个规则 并且 DROP(或NF_QUEUE) 时才结束这个包在这条链中的流程.否则将达到预定义的规则
在 使用iptables 中,使用
iptables -P INPUT DROP
来设定 INPUT 链上的预定义规则为 DROP
这里我的问题是,为什么当预定义规则设为 DROP 时 所有数据包都无法访问呢,相当于断开网络!而且其它的规则定义时,并不象说的那样如果是 ACCEPT 的时候 就会继续再判断,直到 DROP
- #!/bin/sh
- echo "Starting iptables rules..."
- #Refresh all chains
- /sbin/iptables -F
- [color=red]
- /sbin/iptables -P INPUT ACCEPT
- /sbin/iptables -P OUTPUT ACCEPT
- /sbin/iptables -P FORWARD ACCEPT
- [/color]
- [color=green]
- /sbin/iptables -A INPUT -p tcp --syn --dport http -j ACCEPT
- /sbin/iptables -A INPUT -p tcp --syn --dport ssh -j ACCEPT
- [/color]
- [color=blue]
- /sbin/iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j DROP
- /sbin/iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j DROP
- /sbin/iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j DROP
- /sbin/iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j DROP
- /sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j DROP
- [/color]
- [color=purple]
- /sbin/iptables -A INPUT -p tcp --syn -j DROP
- [/color]
- # END
复制代码
如果这样写的话,我的 http 和 ssh 服务都可以用,按理讲,因为最后一条
/sbin/iptables -A INPUT -p tcp --syn -j DROP
的存在,应该时所有发起的 tcp 联接都应该被拒绝才对呀! 为什么?只要 ACCEPT 了,就不进行下面的检查了???
然而如果把蓝色的部分放在红色和绿色的中间时, http 和 ssh 服务都不可用
而且差不多是网络不通了!
而 当把红色的部分换为:- [color=red]/sbin/iptables -P INPUT DROP
- /sbin/iptables -P OUTPUT DROP
- /sbin/iptables -P FORWARD DROP
- [/color]
复制代码 时 ,无论其它规则如何,网络都是不通的!
请高手指点! |
|