防火墙其实就是用于实现Linux下访问控制的功能的它分为硬件和软件防火墙两种。无论是在哪个网络中营销策略它分为硬件和软件防火墙两种。无论是在哪个网络中防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作这就是防火墙的策略、规则以达到让它对出入网络的IP、数据进行检测!
一、简介
1. 关于防火墙
目前市面上比较常见的有三、四层的防火墙叫做网络层的防火墙还有七层的防火墙其实是代理层的网关。对于TCP/IP的七层模型来讲我们知道第三层是网络层三层的防火墙会在这层对源地址和目标地址进行检测。但对于七层的防火墙不管你源端口或者目标端口源地址或者目标地址是什么都将对你所有的东西进行检查。所以对于设计原理来讲七层防火墙更加安全但是这却带来了效率更低。所以市面上通常的防火墙方案都是两者相互结合的。
2. iptables的发展
包括iptables及其前身在内这些都是工作在用户空间中定义规则的工具本身并不算是防火墙。它们定义的规则并且可以让在内核空间当中的“Netfilter”来读取从而实现让防火墙工作。而放入内核的地方必须要是特定的位置必须是TCP/IP的协议栈所经过的地方——Netfilter。
iptables只是防火墙的管理工具在内核中真正实现防火墙功能的是Netfilter。
对Linux而言TCP/IP协议栈存在于内核当中这就意味着对数据报文的处理是在内核中处理的也就是说防火墙必须在工作在内核中防火墙必须在内核中完成TCP/IP报文所流进的位置使用规则去检查才真正能工作起来。
3. iptables的结构
从上面的发展我们知道了作者选择了五个位置来作为控制的地方但是你有没有发现其实前三个位置已经基本上能将路径彻底封锁了但是为什么已经在进出的口设置了关卡之后还要在内部设置关卡呢?由于数据包尚未进行路由决策还不知道数据要走向哪里所以在进出口是没有办法实现数据过滤的。所以要在内核空间里设置转发的关卡进入用户空间的关卡从用户空间出去的关卡。那么既然他们没有什么用我们为什么还要放置他们呢?
因为在进行NAT/DNAT的情况下目标地址转换必须在路由之前转换。所以我们必须在外网而后内网的接口处进行设置关卡。
Netfilter规定的这五个位置也叫五个规则链:
iptable的结构:在数据包过滤表中规则被分组放在我们所谓的链中。链就是一个规则的列表(如图所示)。
二、表和链要设置一个Linux防火墙就要使用规则每个规则指定在包中与什么匹配分时段优化每个规则指定在包中与什么匹配以及对包执行什么操作。那么什么是规则呢?因为iptables利用的是数据包过滤的机制分时段优化以及对包执行什么操作。那么什么是规则呢?因为iptables利用的是数据包过滤的机制所以它会分析数据包的报头数据。根据报头数据与定义的规则来决定该数据包是否可以通过或者是被丢弃。也就是说根据数据包的分析资料来与预先定义的规则内容进行“比对”若数据包数据与规则内容相匹配则进行相应的处理否则就继续下一条规则的比对。重点在于比对与比对的顺序。
什么是表和链呢?
这得由iptables的名称说起为什么称为iptables呢?因为它里面包含有多个表格(table)每个表格都定义出自己的默认策略与规则且每个表格的用途都不相同。iptables包含四个表五个链。其中表是按照对数据包的处理功能区分的链是按照不同的Hook点来区分的表和链实际上是netfilter的两个维度。
四个规则表分别为:Filter、NAT、Mangle、Raw默认表是Filter(没有指定表的时候就是Filter表)。 表的处理优先级为:Raw>Mangle>NAT>Filter
常用的三个表:
三、工作流程iptables采用的是数据包过滤机制工作的所以它会对数据包的报头信息进行分析并根据我们预先设定的规则进行匹配来决定是否对数据包的处理方式。