一个基于 shell script 的网络层防火墙设计与实现
摘 要 提出了一种基于 Linux 内建的 Netfilter/ Iptables 标准框架设计网络层防火墙的思路, 分析了关键技术, 给出了一个非常接近实际应用的基于 shell 脚本的企业安全网关解决方案。 此网关对信任区域网络提供了基本安全防护, 并且通过地址伪装和目标网络地址转换技术, 定制和实现了企业内外网之间的互通互访。
目前 Linux 内核使用标准 Netfilter/ Iptables 框架实现网络层防火墙的基本功能。该框架由两个子系统组成:内核模块和用户接口应用程序。内核模块对Netfilter 规则表进行管理, 通过添加删除链中的规则, 完成对输入、输出和转发数据包的过滤修改等操作;用户接口程序负责接收用户命令, 并且将用户命令添加到内核中。Netfilter 预设了五条规则链—PRE RO UTING 、INPUT 、FOR- WA RD 、O UTPU T 、PO ST ROUT ING, 利用其组合
能实现三种典型应用, 正对应于Iptables 内建的三个规则表—包过滤表 fil ter 、网络地址转换表 nat 、用于修改分组数据特定规则的表 mangle[ 2 ~ 3] 。下图简单说明了各表及其所含链的关系与用途
图 1 Iptables 的预设表与链
由于与特殊标识高度相关, 所以比较单纯的网络环境中较少使用m ang le 表。在忽略 m ang le 表的情况下, 各个预设表与链的关系就可以简单地使用图 2 来表示。可以看出, 经路由判断, Iptables 可以控制两种数据包流向 :1 ) 如果数据包的目标
地址为防火墙本机, 则进入该防火墙后会经过 fil- ter 表的 IN PU T 链的检查, 而数据包离开之前还要经过 filt er 表的OU TPUT 链的检查。如图 2 中的路线A ;2) 如果数据包要穿越防火墙继而进入其后端网络, 则依次经过 nat 表的PREROU TING 链、f ilter 表的 FORWARD 链以及 nat 表的 POS-
TROU TING 链。如图 2 中的路线B 。
图 2 表与链的默认关系简图
Iptables 防火墙高效工作在OSI 模型的网络层, 它根据IP 包头的分析资料, 比对预先定义的规则内容, 来决定该数据包是否可以进入主机或者是被丢弃。若两者相同则执行规定的动作, 否则就继续下一条规则的比对, 其分析流程如图 3 所示, 关键在于进行比对与分析的顺序[ 4] 。由若干规则按先后顺序组成一条规则链。规则会被依序应用到每个遍历该链的数据包上。每个规则链都有其特定的用途, 并且都设置了一个预设策略( ACCEPT 或DROP) 。
图 3 包过滤的工作流程