一、什么是防火墙
Firewall防火墙是工作在网络或主机的边缘,对进出的数据包根据定义好的规则进行检查并作出相应处理的一套组件。工作中的防火墙分硬件防火墙和软件防火墙,这里针对软件防火墙做阐述。
所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。
在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的黑客来访问你的网络。换句话说,如果不通过防火墙,公司内部的人就无法访问Internet,Internet上的人也无法和公司内部的人进行通信
防火墙类型:防火墙分以下两种类型
1. 包过滤型防火墙(网络层防火墙)
网络层防火墙可视为一种 IP 封包过滤器,运作在底层的 TCP/IP 协议堆栈上。我们可以以枚举的方式,只允许符合特定规则的封包通过,其余的一概禁止穿越防火墙(病毒除外,防火墙不能防止病毒侵入)。这些规则通常由网络管理员来定义或修改。
2. 应用层网关防火墙
应用层防火墙是在 TCP/IP 堆栈的“应用层”上运作,我们使用浏览器时所产生的数据流或是使用 FTP 时的数据流都是属于这一层。应用层防火墙可以拦截进出某应用程序的所有封包,并且封锁其他的封包(通常是直接将封包丢弃)。理论上,这一类的防火墙可以完全阻绝外部的数据流进到受保护的主机中。
防火墙的特性:
1. 内部网络和外部网络之间的所有网络数据流都必须经过防火墙
这是防火墙所处网络位置特性,同时也是一个前提。因为只有当防火墙是内、外部网络之间通信的唯一通道,才可以全面、有效地保护企业网内部网络不受侵害。
防火墙适用于用户网络系统的边界,属于用户网络边界的安全保护设备。所谓网络边界即是采用不同安全策略的两个网络连接处,比如用户网络和互联网之间连接、和其它业务往来单位的网络连接、用户内部网络不同部门之间的连接等。防火墙的目的就是在网络连接之间建立一个安全控制点,通过允许、拒绝或重新定向经过防火墙的数据流,实现对进、出内部网络的服务和访问的审计和控制。
典型的防火墙体系网络结构如下图所示。从图中可以看出,防火墙的一端连接企事业单位内部的局域网,而另一端则连接着互联网。所有的内、外部网络之间的通信都要经过防火墙。
2. 只有符合安全策略的数据流才能通过防火墙
防火墙最基本的功能是确保网络流量的合法性,并在此前提下将网络的流量快速的从一条链路转发到另外的链路上去。防火墙是一个类似于桥接或路由器的、多端口的(网络接口>=2)转发设备,它跨接于多个分离的物理网段之间,并在报文转发过程之中完成对报文的审查筛选的工作。
二、包过滤性防火墙的工作流程
1.数据包从外网传送给防火墙后,防火墙在IP层向TCP层传输数据前,将数据包转发给包检查模块进行处理。
2.首先与第一条过滤规则进行比较。
3.如果与第一条规则匹配,则进行审核,判断是否允许传输该数据包,如果允许则传输,否则查看该规则是否阻止该数据包通过,如果阻止则将该数据包丢弃。
4.如果与第一条过滤规则不同,则查看是否还有下一条规则。如果有,则与下一条规则
匹配,如果匹配成功,则进行与3相同的审核过程。
5.依此类推,一条一条规则匹配,直到最后一条过滤规则。如果该数据包与所有的过滤规则均不匹配,则采用防火墙的默认访问控制策略(丢掉该数据包,或允许该数据包通过)。
三、Netfilter/iptables架构的概念
(1)在配置iptables之前,要确保本机中的路由转发功能已打开。
打开方法:
Vim /proc/sys/net/ipv4/ip_forward
修改内核变量:ip_forward的值为1,保存退出。
将配置文件/etc/sysctl.conf中的”net.ipv4.ip_forward”的值也更改为1。
在实际网络中,路由转发功能主要是为了提供数据包转发的,若本机收到数据包请求,会先判断是否是针对本机的请求,如若不是,本机就会把这个请求转发出去。
(2)针对不同类型的数据包,应在不同的位置检测,因此在TCP/IP协议栈的内部,一般有以下几个检查规则:
1.所有到达本机内部来的数据包
2.所有从本机内部流出的数据包
3.经过本机路由做出决策,但是不经过本机内部的数据包
四、linux内核中自带的防火墙规则定义的工具iptables:
Iptables是一款用户空间的工具,iptables本身并不是防火墙,它的主要作用就是写规则,然后把写完的规则放到内核当中使其执行,但是众所周知,应用程序都只是在用户空间内执行的,内核中是不能随便让其插入数据的,所以iptables有一个与之匹配的内核框架,该框架只接受iptables命令送过来的关于正确符合定义的规则语法的规则,所以iptables本身也可以检查语法。那么在内核框架中的TCP/IP协议栈上的检测点组合起来叫做netfilter,即网络过滤器。
五、防火墙的规则链和table
在netfilter上一共有5个检测点,如下:INPUT, OUTPUT,FORWARD, PREROUTING, POSTROUTING.这五个点就是可以存放规则的检查点,由于每个检测点上面可以存放很多规则,因此我们称为规则链。每个规则链都相对应一个钩子函数,因此报文送到哪一个规则链上,就意味着被送到相应的钩子函数上去执行相应的命令
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表包括PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING五个链。
raw:这个一般不会用到,不做阐述。