一、netfilter/iptable的理解<?xml:namespace prefix = o />
这个当初我理解不了,主要是没把netfilter理解清楚. Netfilter是集成在内核中的,用来定义存储各种规则的.Iptalbe是修改这些规则的工具,修改后存在netfilter里面.
数据包进入LINUX服务器时,先进入服务器的netfilter模块中进行判断处理.
Netfilter包含有三种表,三种表下共包含有五种链,链下面包含各种规则.即表包含若干链,链包含若干规则.
(一)三种表为:filter nat mangle
1、filter:处理与本机有关的数据包,是默认表,包含有三种链:input output forward
2、nat表:与本机无关.主要处理源与目的地址IP和端口的转换.有三种链:prerouting postrouting output
3、mangle表:用于高级路由信息包,如包头内有更改(如tos改变包的服务类型,ttl包的生存时间,mark特殊标记).
有两种链:prerouting output (kernel <?xml:namespace prefix = st1 />2.4.18后又加了两种链:input forward)这种表很少使用:
(二)五种链(链在表下面,为了条理清晰,才另外作一大点讲解)
1、prerouting:进入netfilter后的数据包在进入路由判断前执行的规则.改变包.
2、Input:当经过路由判断后,要进入本机的数据包执行的规则.
3、output:由本机产生,需向外发的数据包执行的规则.
4、forward:经过路由判断后,目的地不是本机的数据包执行的规则.与nat 和 mangle表相关联很高,与本机没有关联.
5、postrouting:经过路由判断后,发送到网卡接口前.即数据包准备离开netfilter时执行的规则.
上图上,运行中的守护进程,是指本机.Input的包都会发到本机.本机处理后再经output 发出去.
(三)数据包进入netfilter后的经过图:
1、数据包进入linux服务器入接口,接口把数据包发往netfilter,数据包就此进入netfilter.
2、经prerouting处理,(如是否需要更改数据包的源IP地址等)
3、数据包到路由,路由通过路由表判断数据包的目的地.如果目的地是本机,就把数据包转给intput处理后进入本机.如果目的地不是本机,则把数据包转给forward处理.
4、数据包通过forward处理后,再转给postrouting处理,(是否有目标地址需要改变等),处理后数据包就出了netfilter,到linux服务器出接口,就出了linux服务器.
5、如果数据包进了本机后经过处理需要外发数据包,或本机自身有数据包需要外发,就把数据包发给output链进行处理后,转给postrouting处理后,出linux服务器.进入外面的花花世界.
(三)规则的执行顺序
当数据包进入netfilter,就会和里面的规则进行对比.规则是有顺序的.
先和规则1对比,如果和规则1相匹配,被规则1接受(accept),则数据将不再和后面的规则进行对比.
如果不匹配,则按顺序和后面的规则进行对比,直到被接受.如果所有的规则都不匹配,则进行默认策略操作,以决定数据包的去向.
规则的顺序很重要.
二、iptalbe语法及参数 |