最近学习了防火墙的有关知识,想通过一篇文章来总结一下学习内容…有人提出费曼学习法,是一种使人提起兴趣的有效方法:即把复杂的道理,专业的知识和技术用通俗有趣的话语讲清楚,这可不单单是个提高兴趣的过程~它甚至可以一直使人记忆犹新…
目录
一、为什么会有防火墙的存在?
我们都知道内网和外网之间是可以交互通信的,那么什么是内网,什么是外网?一般都说局域网是内网,广域网是外网,这是个比较笼统的概念。其实内网和外网是一个相对存在的概念:假如家里内部有一两台电脑的局域网,而小区有覆盖范围比较大的一片网络区域,那么家庭内部的网络就是内网,小区的那片网络区域就是外网;再比如公司的局域网比较强大,一个项目组或者一个办公室里的几台电脑就会构成一个内网,整个公司的局域网就是外网;假如公司的局域网连接到Internet上,那么公司的局域网就是内网,Internet就是外网。
这是我的个人理解,关于内网和外网的具体区别请借鉴:关于内网和外网的区别
讲的很通俗~一定记得看!
所以我们可以想到外网其实是一个不确定的网络,它内部管理的网络有很多,这是不安全的,举个例子:外网有一部分数据包原本是要发送给内网A的,但是内网A和内网B没有介质去判断这些数据包自己是否需要,那么A和B都会同时接收到这些消息,那么这对内网B来讲就是不友好的,假设这些数据包比较大,那它就会使得内网B的稳定性受到威胁甚至攻击。
所以这就开始有了防火墙的存在,防火墙原本应该是按照字面意思来理解:“防止火灾发生的一堵墙”,所以后来被形象的运用在科学技术领域。
防火墙就是在不同网络之间设置一道墙,外网要发送数据包给内网,此时内网会通过防火墙来判断这写数据包是否是我需要的,如果是那我就接收进来;如果不是,那就拒绝接收。墙外的网络属于风险区域网络,内部属于安全区域网络。
二、防火墙基本功能
了解了防火墙是做什么的,那么我们就可以很轻松的说出防火墙具有哪些功能了:
- 对进出网络的数据包进行过滤;
- 对数据包进出网络的行为进行管理;
- 对某些禁止进入内网办理业务的数据包封堵;
- 实时记录防火墙信息内容和活动;
- 实时监测网络攻击。
三、防火墙的(常用)核心技术
防火墙之所以如此广泛的被运用,那一定有它的优势所在,值得一说的是防火墙工作在TCP/IP协议的五层模型中,(请先了解OSI七层模型和TCP/IP五层模型)五层模型中几乎每一层都有它的存在(其实学到这里的时候我自己也是有些...的)但是这里只解释防火墙最常用的两种技术。
1、防火墙包过滤技术(常用)
包过滤技术工作在网络层,它会规则(后面介绍)检查每一个字段的报文,包括源IP、目的IP、协议、端口等,基于这些关键信息去识别并处理数据包,根据规则接收或者丢弃数据包。防火墙的包过滤技术是一种特殊编程的过滤器,包括IP地址或者ICMP报文的类型,以及端口号确定各种UDP、TCP服务,网络管理员会安装过滤器或者访问控制列表,可以限制网络流量,允许特定设备访问,指定转发特定端口数据包。
2、防火墙应用代理技术(常用)
防火墙应用代理工作在应用层,通过编程代理应用程序,实现对应用层数据的检测和分析,代理防火墙相当于一个跑在应用层的网关,有多个网络接口,应用代理通过特定的代理程序可以实现对应用层的监督和控制。当客户机向服务器发送一段请求数据报文时,要先发送给应用网关,应用网关查看该报文是否合法,若是,则将该数据报文转发给服务器,若不是,则丢弃。无可厚非,这就相当于送快递,商家发送的快递到快递员手里,他会查看这个快递是不是你的快递,如果是,就会把这个快递给你送过来,如果不是,则把它丢到另一边。
四、Netfilter和iptables
1、Netfilter
Netfilter是网络管理员安装在Linux系统内核中的管理内核包过滤的工具,在内核中有一个框架,包含四表五链。可以实现内核应用中的许多功能,比如数据包过滤、数据包处理、地址包装和动态网络地址转换等,工作在网络层。
简单介绍四表五链:
1.1、四表
-
filter表: INPUT链、OUTPUT链、FORWARD链
-
NAT表:PREROUTING链、OUTPUT链、POSTROUTING链
-
managle表:用于指定如何处理数据包,可改变TCP头中的QoS位,
INPUT链 、OUTPUT链、FORWARD链、PREROUTING链、POSTROUTING链 -
Raw表:处理数据包异常,提高性能。
PREROUTING链、OUTPUT链
1.2、五链
INPUT规则链 :对进入本地的数据包的处理策略;
OUTPUT规则链:对流出本地数据包的处理策略;
FORWARD规则链:对数据包转发的处理策略;
PREROUTING规则链:对数据包做路由选择前的处理策略;
POSTROUTING规则链:对数据包做路由选择后的处理策略。
1.3、四表五链的使用
1、数据包从网络接口进入;
2、进入raw表的PREROUTING链,连接之前处理数据包;
3、进入mangle表中的PREROUTING链修改数据包;
4、进入nat表的PREROUTING链做DNAT处理;
5、查看路由发送至本机还是其他主机,需做出如下判断:
1.3.1、数据包转发给本地主机
6、路由之后进入mangle表的INPUT链,可以进行对应修改;
7、进入filter表的INPUT链对进来的所有数据包进行过滤,不需要考虑来自于哪个网口;
8、交给本地主机处理;
9、处理结束路由决定发到哪里去;
10、进入raw表的OUTPUT;
11、对本地数据包进行处理;
12、进入mangle的OUTPUT链,修改数据包但不过滤;
13、进入nat表的OUTPUT,对数据做NAT处理;
14、再次路由决定,进入filter表的OUTPUT链,对要发出的数据包处理;
15、进入mangle的POSTROUTING链,数据包还在本地,依然可以修改;
16、进入nat表的POSTROUTING链,做SNAT处理;
17、从网络接口出去。
1.3.2、数据包转发给其他主机
6、进入mangle表的FORWARD链,做路由决定之前依然可以修改;
7、进入filter表中的FORWARD链,对数据包过滤;
8、进入mangle表的POSTROUTING链,路由决定做完书包依然在本地主机,可以修改;
9、进入nat表的POSTROUTNG链,做SNAT处理;
10、从网络接口出去。
2、iptables
iptables是防火墙中配置过滤包的工具,一般我们用iptables来代替防火墙,但他并不是,iptables和netfilter结合起来编写某些规则,并保存在相应的数据库中,编写的这些规则可以对不通网络间的数据包传送进行规范操作,以此来达到使用者理想的需求。
iptables命令格式,下次学习总结好再写吧,先推个大佬链接iptables命令规则
3、iptables过滤包转发过程
刚刚提到:netfilter从网络层开始对数据包进行“管理”,所以从图中可以明确看到:数据包进入网络层之后,会通过PREROUTING链进入,这个过程是要通过raw、mangle、nat三个表的查验,然后进入路由判断,如果数据包被需求,那么就会根据INPUT链进入上层协议栈,此时会通过mangle、nat、filter表查验。上层协议栈使用之后,会通过OUTPUT链出去,此时经过raw、mangle、nat、filter链查验。再次经由路由判断。然后通过POSTROUTING出去,经由mangle、nat表查验。
如果不被需求那么会根据表规则中的FORWAR链再次判断,此时会通过mangle、filter表查验。再次经由路由判断。然后通过POSTROUTING出去,经由mangle、nat表查验。
如有错误,恭请指正!