使用FreeBSD构建流量控制防火墙

概述

利用FreeBSD内核支持的BRIDGE、IPFIREWALL以及DUMMYNET选项,可以建立基于FreeBSD的透明流量控制防火墙(桥接模式),起到限制流量和包过滤的功能。

准备

可以在任何FreeBSD的兼容硬件上构建流量控制防火墙,但是基于性能和管理上的考虑,建议:

使用Intel PII450以上的处理器

使用至少128MB RAM

使用高性能10/100Mbps自适应网络适配器

如果多于一组桥接设备,建议使用双处理器系统

另外准备一块单独的网络适配器用于管理

--------------------------------------------------------------------------------

实例

联想万全1300 PC服务器,具有一颗Intel PII300处理器,配置有128MB RAM,主板集成Intel 82557网络适配器,另外安装了4块3Com 3C905B 10/100Mbps自适应PCI网络适配器。

--------------------------------------------------------------------------------

安装

安装最新版本的FreeBSD。可以从www.FreeBSD.org获取当前的FreeBSD版本信息,并且获得安装源文件。可以使用光盘安装和FTP安装方式。为了保证最好的硬件兼容性,请使用FreeBSD 4.3 RELEASE或者更高的版本。

必须安装操作系统源代码中的"sys"部分,安装完成以后需要重新编译系统内核以支持必要的流量控制防火墙选项。

--------------------------------------------------------------------------------

实例

安装FreeBSD-4.3-20010818-STABLE版本,从ftp://releng4.freebsd.org/pub/FreeBSD/snapshots/i386/

获得。使用FTP安装方式,安装选项为:

[X] bin

[X] crypto

[X] man

[X] src->sys

--------------------------------------------------------------------------------

配置

完成操作系统安装以后,必须重新编译系统内核使其支持桥接流量控制防火墙选项。必须在系统内核编译配置文件中添加以下内容:

options BRIDGE

options DUMMYNET

options IPFIREWALL

options IPFIREWALL_DEFAULT_TO_ACCEPT

重新编译完系统内核以后必须重新启动计算机。

--------------------------------------------------------------------------------

实例

# cd /usr/src/sys/i386/conf

# cp GENERIC BRGFW

# echo "options BRIDGE" >> BRGFW

# echo "options DUMMYNET" >> BRGFW

# echo "options IPFIREWALL" >> BRGFW

# echo "options IPFIREWALL_DEFAULT_TO_ACCEPT" >> BRGFW

# config

# cd ../../compile/BRGFW

# make depend all install

# reboot

--------------------------------------------------------------------------------

重新启动计算机以后,使用以下命令激活桥接流量控制防火墙选项:

sysctl -w net.link.ether.bridge_ipfw=1

sysctl -w net.link.ether.bridge_cfg=""

sysctl -w net.link.ether.bridge=1

其中bridge_cfg参数用于设置多组桥接设备,如果仅考虑单组桥接,可以忽略。实例使用集成的Intel 82557网络适配器作为管理网络,其他3Com 3C905B网络适配器分为两组网桥使用。

--------------------------------------------------------------------------------

实例

# sysctl -w net.link.ether.bridge_ipfw=1

# sysctl -w net.link.ether.bridge_cfg="xl0:0,xl1:0,xl2:1,xl3:1"

# sysctl -w net.link.ether.bridge=1

使用

使用ipfw命令来控制流量和防火墙策略。其中流量控制是作为一条防火墙策略实现的,因此ipfw是唯一的管理界面。通过实例来说明ipfw的使用。

在实例中,网段192.168.254.0/24经过第一组网桥,网段192.168.250.0/24经过第二组网桥,并建立以下策略:

允许所有的ICMP连接,限制总流量为10Kbit/s

允许所有的UDP链接,限制总流量为100Kbit/s

允许TCP到网段192.168.254.0/24的所有连接,限制流量为5Mbit/s

允许TCP到主机192.168.250.222的HTTP连接,限制流量为2Mbit/s

允许TCP到主机192.168.250.0/24的所有其他连接,限制流量为1Mbit/s

禁止其他所有连接

--------------------------------------------------------------------------------

实例

# ipfw -flush

# ipfw add 100 pipe 1 icmp from any to any

# ipfw pipe 1 config bw 10Kbit/s

# ipfw add 200 pipe 2 udp from any to any

# ipfw pipe 2 config bw 100Kbit/s

# ipfw add 300 pipe 3 tcp from 192.168.254.0/24 to any

# ipfw pipe 3 config bw 5Mbit/s

# ipfw add 400 pipe 4 tcp from any to 192.168.254.0/24

# ipfw pipe 4 config bw 5Mbit/s

# ipfw add 500 pipe 5 tcp from any to 192.168.250.222 80

# ipfw pipe 5 config bw 2Mbit/s

# ipfw add 600 pipe 6 tcp from 192.168.250.222 80 to any

# ipfw pipe 6 config bw 2Mbit/s

# ipfw add 700 pipe 7 tcp from 192.168.250.0/24 to any

# ipfw pipe 7 config bw 1Mbit/s

# ipfw add 800 pipe 8 tcp from any to 192.168.250.0/24

# ipfw pipe 8 config bw 1Mbit/s

# ipfw add 60000 deny ip from any to any

# ipfw -a l