包过滤防火墙工作在网络层或者传输层,是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运,可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。
在Linux系统下,包过滤功能是内建于核心的(作为一个核心模块,或者直接内建),同时还有一些可以运用于数据包之上的技巧,不过最常用的依然是查看包头以决定包的命运。包过滤防火墙将对每一个接收到的包做出允许或拒绝的决定。具体地讲,它针对每一个数据包的包头,按照包过滤规则进行判定,与规则相匹配的包依据路由信息继续转发,否则就丢弃。
包过滤是在IP层实现的,包过滤根据数据包的源IP地址、目的IP地址、协议类型(TCP包、UDP包、ICMP包)、源端口、目的端口等包头信息及数据包传输方向等信息来判断是否允许数据包通过。 包过滤也包括与服务相关的过滤,这是指基于特定的服务进行包过滤,由于绝大多数服务的监听都驻留在特定TCP/UDP端口,因此,为阻断所有进入特定服务的链接,防火墙只需将所有包含特定TCP/UDP目的端口的包丢弃即可。