Linux操作系统内核具有包过滤能力,系统管理员通过管理工具设置一组规则即可建立一个基于Linux的防火墙,用这组规则过滤被主机接收、发送的包或主机从一个网卡转发到另一个网卡的包。
由于Linux的内核各有不同,提供的包过滤的设置办法也不一样。IpFwadm是基于 Unix 中的ipfw,它只适用于Linux2.0.36以前的内核;对于Linux2.2以后的版本,使用的是Ipchains。IpFwadm和Ipchains的工作方式很相似。用它们配置的4个链中,有3个在Linux内核启动时进行定义,分别是:进入链(Input Chains)、外出链(Output Chains )和转发链(Forward Chains),另外还有一个用户自定义的链(User Defined Chains)。进入链定义了流入包的过滤规则,外出链定义了流出包的过滤规则,转发链定义了转发包的过滤规则。这些链决定怎样处理进入和外出的IP包,即当一个包从网卡上进来的时候,内核用进入链的规则决定了这个包的流向; 如果允许通过,内核决定这个包下一步发往何处,如果是发往另一台机器,内核用转发链的规则决定了这个包的流向; 当一个包发送出去之前,内核用外出链的规则决定了这个包的流向。某个特定的链中的每条规则都是用来判定IP包的,如果这个包与第一条规则不匹配,则接着检查下一条规则,当找到一条匹配的规则后,规则指定包的目标,目标可能是用户定义的链或者是Accept、Deny、Reject、Return、Masq和Redirect等。其中,Accept指允许通过; Deny指拒绝; Reject指把收到的包丢弃,但给发送者产生一个ICMP回复;Return指停止规则处理,跳到链尾;Masq指对用户定义链和外出链起作用,使内核伪装此包; Redirect只对进入链和用户定义链起作用,使内核把此包改送到本地端口。为了让Masq和Redirect起作用,在编译内核时,我们可以分别选择Config_IP_Masquerading 和Config_IP_Transparent_Proxy。网络结构如附图所示。
附图 配置基于Linux防火墙
假设有一个局域网要连接到Internet上,公共网络地址为202.101.2.25。内部网的私有地址根据RFC1597中的规定,采用C类地址192.168.0.0~192.168.255.0。为了说明方便,我们以3台计算机为例。实际上,最多可扩充到254台计算机。
具体操作步骤如下。
在一台Linux主机上安装2块网卡ech0和ech1,给ech0网卡分配一个内部网的私有地址191.168.100.0,用来与Intranet相连; 给ech1网卡分配一个公共网络地址202.101.2.25,用来与Internet相连。