防火墙即是工作在网络或者主机边缘,并且对进出的数据包根据一定的规则进行过滤且作出处理的套件组合。

    iptables正是写这些规则的工具,这些规则本身即是匹配条件和处理办法。

   

防火墙_iptables
包过滤性防火墙:工作在二三四层协议,对头部的过滤。效率高、可靠性低。 

网关性防火墙:工作在应用层(对特定的应用层协议作检查)对数据本身直接过滤。效率低、可靠性高。

硬件防火墙:netscreen checkpoint但是商业版的很贵,所以~~~~~

包顾虑防火墙又分为:简单包过滤

                    带状态检测的包过滤(即连接状态)

IP头部报文格式图:

防火墙_netfilter_02

TCP头部报文格式:

防火墙_TCP头部_03

    端口号的范围就是0-65535,其中1-1023个端口号,在linux主机中,只有管理员才能使用。这些就是特权啊端口号,所有启动一些服务的时候就必须是由管理员来启动了。UDP是一种无连接的协议,而TCP是有链接的协议。所以TCP是可靠的协议。

TCP:有连接,数据输出之前要先建立一个专用的通信信道,基于它的协议有HTTP,FTP,SSH

UDP: 无连接,数据传输前不建立专用的通信信道,额外开销少,可靠性低。基于UDP的协议:DNS QQ,

  Reserved表示保留位.

  TCP的六个标识位,用来标识TCP报文的属性的。

    URG:紧急位。当它的值为1的时候表示有效,0表示无效。当URG=1的时候,紧急指针(Urgent Point)才是有效的。

    ACK:它就是表示的就是Acknowlegement,表示确认号是否意义,在TCP的三次握手中,第一次是无 意义的所以,第一次握手ACK的值必须是0.

    PSH:推送

    RST: 重置位,有风险的位,一般不用,当因为某种原因连接端口后,我们重新连接的时候不需要重新发送请求报文。只需要将连接重新确认,并且进行数据传输就可以了。

SYN: 同步位,在三次握手的前两次握手SYN必须是1,第一次握手ACK=0。第二次握手ACK=1,以后就对SYN没有要求了。

    FYN: 结束位,当请求断开连接的时候,FYN=1

    防火墙即是工作在网络或者主机边缘,并且对进出的数据包根据一定的规则进行过滤且作出处理的套件组合。

    iptables正是写这些规则的工具,这些规则本身即是匹配条件和处理办法。

    匹配条件即是:帧首部、IP首部、TCP首部、应用层首部。

    在Linux内核当中有内置的软件防火墙过滤框架即netfilter。

    netfilter:为我们提供了过滤平台,它工作在内核当中,是由五个钩子函数组成,iptables定义的规则放到这五个地方当中就会生效。这五个地方对iptables来说认为是规则链PREROUTING INPUT OUTPUT FORWARD POSTROUING.每条链对应一个钩子函数,规则定义后会送给对应的钩子函数,从而生效。另外Netfilter是由很多的检查模块组成,有核心模块,有扩展模块,这写模块用于netfilter扩展能够指定什么样子的匹配条件。

    当被条件匹配到后,就要有对应的处理动作如下:

    TARGE  DORP  REJECT REDIRECT ACCEPTE MASQUERADE DNAT SNAT RETURN LOG

    防火墙的功能:filter nat mangle raw

    不同的功能不能混杂使用.他们会互相影响。

    流向:

    到本机:PERROUTING--->INPUT

    转发:  PERROUTING--->FORWARD--->POSTROUTING

    由本机发出:PERROUTING--->PERROUTING--->POSTROUTING

    raw: PREROUTING OUTPUT 

    mangel: PREROUTING PERROUTING INPUT FORWARD OUTPUT

    nat: PERROUTING OUTPUT  POSTROUTING

    filter: OUTPUT INPUT FORWARD

    我们可以自定义链,但是我们的链不能生效,因为他们没有对应的钩子函数,要想生效必须关联到我们的五个链当中的某个链上。即可以被我们的默认链调用。实现方式及时可以在我们的主链上提供调用自定链的入口,当匹配某条规则的时候让其自动给跳转到我们的自定链,当没有被匹配到的时候在跳转到主链上,接着往下匹配。

 

/etc/rc.d/init.d/iptables 管理规则的脚本,它的peiz

/etc/sysconfig/iptabes-config 这里面存放了很多的规则

service iptalbes {status start stop restart save}

 

命令的使用:

 

diptables [-t 表名] COMMAND CHAIN  [匹配条件] -j ACTION(一般情况下)

表名只用四种:raw mangle nat filter (默认是filter)

COMMAND:对链,或者对链中的规则进行管理操作

规则操作:  -A 添加

-I # 插入第#条

-R # 替换第#条 

-D # 删除第#条规则 -D CRETERIA

对链的操作:

-N: 新建一条自定义链

-X:删除自定义的空链

-E:重命名一条自定义链

-F:清空指定链,如果不指定,则清空整个表中的所有的链

-P:设定链的默认策略

-Z:置零(每条规则,包括默认策略都有两个计数器,一个是被本规则匹配到的所有数据包的个数,另个是被本规则匹配到的所有数据包的大小之和)

查看:

        -L

-v

-vv

--line-numbers显示规则的行号

-x显示计数器的精确值

                        -n不要对端口和地址做名称反解

 

 

 扩展匹配(模块扩展功能):

隐式扩展

-p tcp(-m tcp指定扩展模块,可以省略)

--sprot PORT[-PORT2] 指定源端口或者端口端

--dprot PORT[-PORT2] 指定目标端口或者端口端

--tcp-flags 指定tcp的标识位

--tcp-flags SYN,ACK,FIN,RST SYN 表示检查三个位,SYN必须是1的

匹配第一次握手的简写:--syn 

匹配第二次握手:

--tcp-flags ACK,SYN,FIN,RST ACK,SYN

匹配第三次握手

--tcp-flags ACK,SYN,FIN,RST ACK

-p udp

--sprot

--dprot

-p icmp 

--icmp-type 0:echo-reply

8:echo-request

 显式扩展

netfilter扩展模块引用的扩展,用于卡扩展匹配条件,通常需要额外专用选项来定义 

-m state: 用于是实现连接的状态检测

 --state 

 NEW,ESTABLISHED

 RELATED,指的是和另一个链关联的链接 

 INVALID非法的

-m multiport

  --source-ports

  --destination-ports

  --ports

 

                        -m limit 通过令牌桶过滤器实现数据包的流量

          --limit  #/min

          --limit-burst  #

               -m connlimit

          [!] --connlimit-above #  最多的的访问量

          (表示多余#个才满足条件,如果对某选向取反的时候,要放到这个选项的前面)

              -m iprange

           --src-range ip-ip

           --dst-range ip-ip

              -m -mac 

           --mac-souce XX:XX:XX:XX(对mak的限定) 只能用在INPUT OUTPUT FORWORD链上面

              -m string(这个是对字符编码的匹配)

           --algo {bm|kmp}

           --string "PATTERN"

              -m recent 限制用户的请求

                           --name

   --set

   --rcheck

   --update

   --remove

   --seconds  禁止访问的时间长度

   --hiconut  某行为达到几次后,会被禁掉

   --rtl

              -m  time

           --datestart

           --datestop

           --timestop

           --weekdays

              -m  --l7proto 是用来匹配协议的