1.防火墙的类型:包过滤性防火墙,应用层网关防火墙

2.包过滤型防火墙的工作原理

    包过滤型防火墙内置于Linux系统的内核,在网络层或传输层对经过的数据包进行筛选。筛选的依据是系统内设置的过滤规则(ACL)。通过检查数据流中每个数据包的源地址、目的地址、所有的协议、端口号等因素,来决定是否允许该数据包通过。包过滤型防火墙的工作过程

1)数据包从外网传送给防火墙后,防火墙在IP层向TCP层传输数据前,将数据包转发给包检查模块进行处理。

2)首先与第一条过滤规则进行比较。

3)如果与第一条规则匹配,则进行审核,判断是否允许传输该数据包,如果允许则传输,否则查看该规则是否阻止该数据包通过,如果阻止则将该数据包丢弃。

4)如果与第一条过滤规则不同,则查看是否还有下一条规则。如果有,则与下一条规则匹配,如果匹配成功,则进行与(3)相同的审核过程。

5)依此类推,一条一条规则匹配,直到最后一条过滤规则。如果该数据包与所有的过滤规则均不匹配,则采用防火墙的默认访问控制策略策略(丢掉该数据包,或允许该数据包通过)。

3.引入Netfilter/iptables架构的概念

 
    
  1. 在内核中打开路由转发功能:/proc/sys/net/ipv4/ip_forward 
  2.  
  3. 修改内核变量:ip_forward:  echo 1 >/proc/sys/net/ipv4/ip_forward 
  4.  
  5. 修改/etc/sysctl.conf文件使”net.ipv4.ip_forward”的值为1 

当有数据包到本机时,我们要根据数据的目标地址来判断,加入用户请求的地址就是一个网卡的地址,易知用户的请求肯定是对某个特定服务的请求,如果这个请求就是本机的话,此请求会到用户空间中,反之,如果对方请求的目标地址不是本机,和本机没有关系,但是却送到本机上来了,那就意味着可能需要本机来转发,那么就需要在内核中打开转发功能,即:/proc/sys/net/ipv4/ip_forward; ip_forward的功能其实就是打开网络间(网卡间)的转

发功能

4.针对不同类型的数据包,应在不同的位置检测,因此在我们TCP/IP协议栈的内部,我们的内核设计者,选择了如下几个点来检测不同走向类型的数据包:

a.到达所有到达本机内部来的数据包

b.所有从本机内部流出的数据包

c.经过本机路由做出决策,但是不经过本机内部的数据包

5.防火墙规则:

    为了本机或者整个网络的安全性,那么我们需要对不同走向的数据包(报文)进行检测来确保达到管理的目的,如果要检测,规则是前提,因此我们需要制定不同需求的规则来确保检测的实现,任何进出的数据包都需要被规则制定的匹配条件进行匹配。通俗的讲,每个点的规则有许多,为了使其检测性能更加突出,所以规则是要优化的,因此每条规则的排列顺序也是很重要的,一般来说,越是能匹配到报文的,就尽量的放到前面去。

6.引入写规则的工具iptables的概念

    规则生效的位置是在内核当中的,用户在写完规则后放到内核中使其生效就可以了,但是我们写规则的程序是应用程序,而应用程序是放在用户空间中的,如果用户写的规则随便就到了内核当中,那内核就完全没有稳定性可言,在此要谨记用户空间是不能随便和内核联系的。因此为了解决这种问题,我们就引入了iptables的概念。

Iptables是一款用户空间的工具,iptables本身并不是防火墙,它的主要作用就是写规则,然后把写完的规则放到内核当中使其执行,但是前面讲过了,内核中是不能随便让其插入数据的,所以iptables有一个与之匹配的内核框架,该框架只接受iptabgles命令送过来的关于正确符合定义的规则语法的规则,所以iptables本身也可以检查语法。那么在内核框架中的TCP/IP协议栈上的检测点组合起来叫做netfilter,即网络过滤器。

7.引入规则链的概念:

netfilter上一共有5个检测点,如下:INPUT, OUTPUT,FORWARD, PREROUTING, POSTROUTING.这五个点就是可以存放规则的检查点,由于每个检测点上面可以存放很多规则,因此我们称为规则链。每个规则链都相对应一个钩子函数,因此报文送到哪一个规则链上,就意味着被送到相应的钩子函数上去执行相应的命令

8.防火墙的功能,Netfilter中内置有4张表:filter表,nat表和mangle表。其中filter表用于实现数据包的过滤、nat表用于网络地址转换、mangle表用于包的重构和raw

    filter: iptables默认的表, 主要用于数据包的过滤。filter表包含了INPUT链(处理进入的数据包)、FORWARD链(处理转发的数据包)和OUTPUT链(处理本地生成的数据包)。

    nat: 主要用于网络地址转换。nat表包含了PREROUTIN链(修改即将到来的数据包)、OUTPUT链(修改在路由之前本地生成的数据包)和POSTROUTING链(修改即将出去的数据包)。

    mangle: 大概的意思就是把报文拆开,看看,修改修改再封装,其TTL值是不发生变化的。在Linux2.4.18内核之后,mangle表包括PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING五个链。

    raw:略去。。

9.iptables命令

iptables命令格式为:

 
    
  1. 语法格式:iptables [-t TABLE] COMMAND CHAIN [CRETIRIA匹配条件] –j ACTION 
  2.  
  3. 常用命令如下: 
  4.  
  5. -P [链名] :定义默认策略(policy) 
  6.  
  7. -L [链名] :查看iptables规则列表,如果不指定链,则列出所有链中的所有规则(list) 
  8.  
  9.        -v:显示详细信息 
  10.  
  11.        -vv:比-v显示的信息更详细 
  12.  
  13.        -line-numbers显示规则的行号 
  14.  
  15.        -x:计数器的精确值 
  16.  
  17.        -n:不对地址和端口做名称反解, 
  18.  
  19. -A [链名] :在规则列表的最后增加一条规则(append) 
  20.  
  21. -I [链名] :在指定的链中插入一条规则(insert) 
  22.  
  23. -D [链名] :从规则列表中删除一条规则(delete) 
  24.  
  25. -R [链名] :替换规则列表中的某条规则(replace) 
  26.  
  27. -F [链名] :清除指定链和表中的所有规则,如果不指定链,则所有链都被清空(flush) 
  28.  
  29. -Z [链名] :置零(zero)(每条规则,包括默认策略都有两个计数器,一个是被本规则匹配到的所有数据包的个数,另一个是被本规则匹配到的所有数据包的大小之和) 
  30.  
  31. -N [链名] :创建一个用户自定义的链(new-chain) 
  32.  
  33. -X [链名] :删除一个自定义的空链(delete-chain) 
  34.  
  35. -C [链名] : 检查给定的包是否与指定链的规则做匹配(check) 
  36.  
  37. -E [旧链名] [新链名] :更改用户自定义的链的名称(rename-chain) 
  38.  
  39. -h :显示帮助信息(help) 

10.iptables命令之常用目标动作选项-j

 
    
  1.    -j:当我们被指定条件匹配到以后的数据包要做出相应的处理,处理我们用选项-j 
  2.  
  3.     ACCEPT : 接受报文或数据包 
  4.  
  5.     DROP : 丢弃数据包 
  6.  
  7.     REDIRECT:将数据包重定向到本机或另一台主机的某个端口,通常用于实现透明代理或对外开放内网的某些服务 
  8.  
  9.     SNAT:源地址转换,即改变数据包的源IP地址 
  10.  
  11.     DNAT: 目标地址转换,即改变数据包的目的IP地址 
  12.  
  13.     MASQUERADE:IP伪装,即NAT,MASQUERADE只用于ADSL拨号上网的IP伪装,如果主机的IP是静态的,则应用SNAT 
  14.  
  15.     LOG: 日志功能,将符号规则的数据包的相关信息记录在日志中,以便管理员进行分析和排错。 
  16.  
  17. Iptables命令制定永久性规则集: 
  18.  
  19.     保存规则:iptables-save > /etc/sysconfig/iptables 
  20.  
  21.     恢复规则集:iptables-restore < /etc/sysconfig/iptables 

11.iptables命令中常用的匹配规则

匹配规则分为两种:通用规则、扩展规则

 
    
  1. 下面先介绍通用规则: 
  2.  
  3.     ! [匹配规则]:表示除了匹配该规则之外的,取反的意思 
  4.  
  5.     -i:指定数据包从哪个网络接口进入,eg:eth0, eth1或ppp0 
  6.  
  7.     -o:指定数据包从哪个网络接口输出, eg:eth0, eth1或ppp0 
  8.  
  9.     -p:指定数据包匹配的协议,如tcp, udp, icmp等, 
  10.  
  11.     -d:指定数据包匹配的目的IP地址或子网。 
  12.  
  13.     --sport:指定匹配的源端口或端口范围 
  14.  
  15.     --dport:指定匹配的目标端口或端口范围