netfilter-iptables理解
iptables是基于内核的防火墙,一个强大的IPv4包过滤和NAT的管理工具。它可以用来设置、维护和检查Linux内核中的IPv4包过滤规则表。用户通过iptables,可以对进出你的计算机的数据包进行过滤。通过iptables命令设置你的规则,来把守你的计算机网络──哪些数据允许通过,哪些不能通过,哪些通过的数据进行记录(log)。我们可以定义一些不同的表。每种表包含一系列内建的链或用户自定义的链。每个链是一组规则以匹配一组数据包。
iptables格式:
iptables -t [tables] option chain [rulenum] rule-specification
rule-specification = [matches…] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
iptables中的表
-t参数用来指定规则表,内建的规则表有四种,分别是filter、nat、mangle和raw,当未指定规则表时,则默认为filter
先级由高到低的顺序为raw–>mangle–>nat–>filter, 例如如果PRROUTING链上,既有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理。raw表只使用在PREROUTING链和OUTPUT链上,一但用户使用了raw表,在某个链上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。raw表一般应用在内网访问DMZ区域的情况,能加速防火墙的处理速度。例如 iptables -t raw -A PREROUTING -i eth2 -o eth1 -p tcp –dport 80 -j NOTRACK。
- filter:iptables默认的表,主要用于包过滤。它拥有INPUT、FORWARD和OUTPUT三种内建的链。INPUT匹配目的地IP为本机的数据包,FORWARD匹配路由经过本机的数据包,OUTPUT匹配本机产生的要发送出去的数据包。filter规则表顾名思义是用来进行封包过滤的动作,例如DROP、LOG、ACCEPT或REJECT。(INPUT,FORWARD,OUTPUT)
- nat:nat表的主要用处是网络地址转换。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。当本机遇到一个创建新连接的数据包时nat表就会被检查。它拥有PREROUTING、OUTPUT、POSTROUTING三种内建的链,主要功能为源地址转译(SNAT)或目的地址转译(DNAT)。PREROUTING用来当数据包进来时修改其目的地址,OUTPUT用于修改本机产生数据包(在路由之前),POSTROUTING用于当数据包出去时修改其源地址。注意由于转译工作的特性,需进行目的地网址转译的封包,就不需要进行来源网址转译,反之亦然,因此为了提升改写封包的速率,在防火墙运作时,每个封包只会经过这个规则表一次。如果我们把封包过滤规则也定义在这个数据表里,将会造成无法对同一包进行多次比对,因此这个规则表除了作网址转译外,请不要做其它用途。
- mangle:该表主要用于流量整形,即对包进行特定的修改。因为某些特定应用可能需要去改写数据包的一些传输特性,如更改数据包的TTL和TOS、或者是设定MARK(将封包作记号,以进行后续的过滤)。(wifidog中使用MARK来标记包,并在后续的链中判断accept还是drop)。它拥有PREROUTING、POSTROUTING、INPUT、FORWARD和OUTPUT三种内建的链。
- raw:结合NOTRACK动作(通过-j选项指定),可以配置数据包不经过连接跟踪。在iptables中raw表的优先级最高。它拥有PREROUTING、OUTPUT三种内建的链。
##iptables中内建的链
- PREROUTING 匹配包路由前(当数据包进来时修改其目的地址)
- POSTROUTING 匹配包路由后(当数据包出去时修改其源地址)
- FORWARD 匹配路由经过本机的数据包
- OUTPUT 匹配本机产生的要发送出去的数据包(但还未发送)
- INPUT 匹配目的地IP为本机的数据包
Iptables表、链、规则
##主要的命令选项:
http://blog.csdn.net/zhoudaxia/article/details/6158601