1.1 包过滤防火墙的一般概念
1.1.1 什么是包过滤防火墙
包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包
的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包
通过),也可能执行其它更复杂的动作。
在 Linux 系统下,包过滤功能是内建于核心的(作为一个核心模块,或者直接内建),
同时还有一些可以运用于数据包之上的技巧,不过最常用的依然是查看包头以决定包的命
运。
包过滤防火墙将对每一个接收到的包做出允许或拒绝的决定。具体地讲,它针对每一
个数据报的报头,按照包过滤规则进行判定,与规则相匹配的包依据路由信息继续转发,
否则就丢弃。包过滤是在 IP 层实现的,包过滤根据数据包的源 IP 地址、目的 IP 地址、协
议类型(TCP 包、UDP 包、ICMP 包)、源端口、目的端口等报头信息及数据包传输方向
等信息来判断是否允许数据包通过。
包过滤也包括与服务相关的过滤,这是指基于特定的服务进行包过滤,由于绝大多数
服务的监听都驻留在特定 TCP/UDP 端口,因此,为阻断所有进入特定服务的链接,防火墙
只需将所有包含特定 TCP/UDP 目的端口的包丢弃即可。
1.1.2 包过滤防火墙的工作层次
包过滤是一种内置于 Linux 内核路由功能之上的防火墙类型,其防火墙工作在网络层。
1.1.3 包过滤防火墙的工作原理
(1)使用过滤器。数据包过滤用在内部主机和外部主机之间, 过滤系统是一台路由
器或是一台主机。过滤系统根据过滤规则来决定是否让数据包通过。用于过滤数据包的路
由器被称为过滤路由器。
数据包过滤是通过对数据包的 IP 头和 TCP 头或 UDP 头的检查来实现的,主要信息有:
* IP 源地址
* IP 目标地址
* 协议(TCP 包、UDP 包和 ICMP 包)
* TCP 或 UDP 包的源端口
* TCP 或 UDP 包的目标端口
* ICMP 消息类型
* TCP 包头中的 ACK 位
* 数据包到达的端口
* 数据包出去的端口
在 TCP/IP 中,存在着一些标准的服务端口号,例如,HTTP 的端口号为 80。通过屏蔽
特定的端口可以禁止特定的服务。包过滤系统可以阻塞内部主机和外部主机或另外一个网
络之间的连接,例如,可以阻塞一些被视为是有敌意的或不可信的主机或网络连接到内部
网络中。
(2)过滤器的实现。数据包过滤一般使用过滤路由器来实现,这种路由器与普通的路
由器有所不同。
普通的路由器只检查数据包的目标地址,并选择一个达到目的地址的最佳路径。它处
理数据包是以目标地址为基础的,存在着两种可能性:若路由器可以找到一个路径到达目
标地址则发送出去;若路由器不知道如何发送数据包则通知数据包的发送者“数据包不可
达”。
过滤路由器会更加仔细地检查数据包,除了决定是否有到达目标地址的路径外,还要
决定是否应该发送数据包。“应该与否”是由路由器的过滤策略决定并强行执行的。