第三章 包过滤防火墙原理:静态包过滤的工作机制
包过滤防火墙,说白了就是网络世界的门卫。它站在网络的入口,检查每一个进出的数据包。符合规则的放行,不符合的拦下。就这么简单。
我刚开始接触防火墙时,总觉得这东西很神秘。后来拆开一看,核心就是一张规则表——ACL(访问控制列表)。你给它什么规则,它就怎么干活。没有花哨的算法,没有复杂的计算,就是一条一条地比对。
静态包过滤的工作机制
静态包过滤,也叫无状态包过滤。它只看数据包本身,不关心这个包属于哪个连接。每次来一个包,它就独立判断一次。
判断的依据是什么?五个关键字段:
- 源IP地址——包从哪里来
- 目的IP地址——包要去哪里
- 源端口号——发送方的端口
- 目的端口号——接收方的端口
- 协议类型——TCP、UDP还是ICMP
我记得有一次帮客户排查问题,他们觉得防火墙坏了,因为某些应用能通,某些不能。我一看规则,发现只配了TCP的规则,UDP的流量全被默认拒绝了。嗯,这就是典型的静态包过滤问题——它不会帮你自动处理协议间的关联。
核心要点:静态包过滤工作在OSI模型的网络层和传输层。它不解析应用层数据,也不维护连接状态。每个包都是独立的个体。
ACL(访问控制列表)基础
ACL就是防火墙的规则集。每条规则告诉防火墙:什么样的包该放行,什么样的包该拒绝。
一条典型的ACL规则长这样:
access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 80
access-list 100 deny ip any any
这条规则的意思是:允许来自192.168.1.0/24网段的流量,访问任意主机的80端口(HTTP)。其他所有流量全部拒绝。
你可能会问:为什么要有两条规则?因为ACL的默认行为是拒绝所有。如果你只写允许规则,没写拒绝规则,那匹配不到的流量怎么办?
答案是:隐含拒绝。每条ACL的最后都有一条看不见的规则——deny any any。这是防火墙的自我保护机制。
| ACL规则类型 | 作用 | 示例 |
|---|---|---|
| 标准ACL | 只检查源IP地址 | access-list 1 permit 192.168.1.0 0.0.0.255 |
| 扩展ACL | 检查源/目的IP、端口、协议 | access-list 100 permit tcp any any eq 443 |
| 命名ACL | 用名字代替数字,更易读 | ip access-list extended WEB-INBOUND |
我的习惯:写ACL时,我永远把最具体的规则放在前面,最宽泛的规则放在后面。为什么?因为ACL是顺序匹配的,一旦匹配就停止检查。把精确规则放前面,能减少不必要的比对。
规则匹配顺序与隐含拒绝
ACL的匹配顺序,是很多新手栽跟头的地方。我见过太多案例,规则写了一大堆,结果流量全被拒绝了。原因就是顺序搞错了。
规则匹配遵循三个原则:
- 顺序匹配——从上到下,逐条检查
- 首次匹配——匹配到第一条规则就执行,不再继续
- 隐含拒绝——所有规则都不匹配时,默认拒绝
举个例子,你写了这么两条规则:
access-list 100 deny tcp any any eq 22
access-list 100 permit tcp 10.0.0.0 0.255.255.255 any eq 22
你本意是只允许10.0.0.0/8网段访问SSH,其他都拒绝。但顺序写反了——先拒绝了所有SSH流量,后面的允许规则永远没机会执行。结果就是所有人都连不上SSH。
我曾经在一个金融客户那里遇到类似问题。他们想开放某个端口给合作伙伴,结果把拒绝规则写在了允许规则前面。排查了整整一个下午,最后发现就是顺序问题。从那以后,我每次写ACL都会先画个流程图。
避坑指南:我曾经见过有人把ACL规则写了100多条,最后一条是permit ip any any。你想想看,前面99条规则的意义在哪里?隐含拒绝才是防火墙的底线,不要轻易用permit any any去覆盖它。
包过滤的决策流程
为了让你更直观地理解,我画了一张流程图。它展示了防火墙收到一个数据包后,是如何一步步做出决策的。
这张图把整个流程串起来了。你注意看那个循环——防火墙会一条一条地比对规则,直到找到匹配项。如果所有规则都不匹配,就执行隐含拒绝。
我刚开始学的时候,总觉得隐含拒绝是个很冷酷的机制。后来做安全审计才发现,正是这个机制保护了无数网络。如果没有隐含拒绝,漏配一条规则就可能让攻击者长驱直入。
实战建议:写ACL时,先把要拒绝的流量写清楚,再把要允许的流量写清楚。最后留一条deny any any作为兜底。不要偷懒写permit any any,那是给自己挖坑。
静态包过滤的优缺点
任何技术都有两面性。静态包过滤也不例外。
| 优点 | 缺点 |
|---|---|
| 处理速度快,延迟低 | 无法检测应用层攻击 |
| 对硬件要求低,成本可控 | 不支持动态端口协议(如FTP) |
| 配置简单,容易上手 | 容易被IP欺骗绕过 |
| 透明性好,不影响应用 | 规则数量多时管理困难 |
我记得有一次,客户用静态包过滤保护内网。一切正常,直到他们部署了一个FTP服务器。FTP的数据连接使用动态端口,静态包过滤根本不知道要开放哪些端口。折腾了两天,最后换成了状态检测防火墙才解决。
我的建议:静态包过滤适合边界清晰、流量简单的场景。比如公司出口只开放80和443端口。如果业务复杂,涉及动态端口或多协议交互,还是上状态检测防火墙更靠谱。
好了,这一章的内容就到这里。静态包过滤虽然基础,但它是理解所有防火墙技术的起点。你把这些搞明白了,后面学状态检测、应用层过滤都会轻松很多。