述
利用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。可以从获取当前的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
主要偏向于如何建立一个FreeBSD防火墙,而防火墙在很多时候主要是要看如何使用,现在我们看看如何使用建立好了的FreeBSD防火墙保护企业,关于FreeBSD的防火墙建设过程请参考我的《利用FreeBSD组建安全的网关》,首先假设某企业有以下服务器和工作站:
1、WEB服务器两台、一台企业主页,一台做BBS,希望IP地址为xxx.xxx.xxx.001和xxx.xxx.xxx.002
2、DNS服务器一台,并且兼带企业E-mail服务,IP地址为xxx.xxx.xxx.003,把解析到xxx.xxx.xxx.001以及bbs.testdomain.com解析到xxx.xxx.xxx.002
3、企业内部局域网络,计算机N台,IP地址为10.125.0.0到10.125.255.255
对于这样的一个企业,我们首先要设计好网络构架,在设计的同时要考虑到各个服务器以及内部网络各放在什么位置,才能更有效的配合防火墙,使得防火墙对每个部分都能充分的保护。
我们首先来分析一下“黑客”入侵的手段和途径,作为一个入侵者,他的第一步自然是先要找到目标企业在网络中的位置,假设他已经知道该企业没有使用主机托管服务,而是和企业的网络放在了一起,那么他只须ping一下该企业的主页就能了解到该企业的IP地址为xxx.xxx.xxx.001和xxx.xxx.xxx.002,而另外还有一台DNS服务器,也可以使用nslookup这样的工具,一下就能查到目标企业的DNS服务器为地址xxx.xxx.xxx.003,并且他还会计划,假设已经进入以上三台服务器中的一台,他就会马上分析网络结构,并且进入内网,获取内部网络员工资料,以及很多重要数据。从上面看得出来,要保护这个网络,我们需要做很多东西,首先我们可以想办法对服务器之间以及服务器和内部网络之间进行隔离,但又能应用到他们应该有的功能,现在对该企业的网络做如下策划:
首先确定FreeBSD防火墙是作为企业连接到Internet服务器的唯一途径,然后对FreeBSD进行一定的设置,开启它的ipfirewall以及NATD功能,上图告诉了我们现在是把WWW、BBS、DNS等服务器都放在内部进行保护,所以在防火墙要开启NATD的反向代理功能,首先我们把xxx.xxx.xxx.001,xxx.xxx.xxx.002,xxx.xxx.xxx.003,绑定在FreeBSD外部网卡上,假设外部网卡号为fxp0,在rc.conf里我们需要设置如下:
ifconfig_fxp0="inet xxx.xxx.xxx.001 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet xxx.xxx.xxx.002 netmask 255.255.255.0"
ifconfig_fxp0_alias1="inet xxx.xxx.xxx.003 netmask 255.255.255.0"
绑好之后我们现在就开始分析了,首先我们来看看内部网络,内部要上Internet就必须要有一个网关,并且让他们正常的使用网络,假设FreeBSD内部网卡编号为fxp1,那么我们还要在rc.conf里加入:
ifconfig_fxp1="inet 10.125.0.1 netmask 255.255.0.0"
然后在防火墙规则里加上:
divert 8668 ip from any to any via fxp0
这条规则,允许NATD服务,仅允许NATD服务还不行,还要设置内部网络能连接到Internet,我们再加上:
allow ip from any to 10.125.0.0/16
allow ip from 10.125.0.0/16 to any
内部网络设置Gateway为10.125.0.1,这样企业的内部网络就能正常连接到Internet了。
然后我们来看看WWW服务器,这个服务器一般来说只要开放三个端口就够了,第一个端口自然是HTTP端口不用说了,第二个端口那就是ftp端口以及ftp数据端口,其中HTTP端口自然是让Internet上以及企业内部访问的端口,而FTP端口是用来更新主页或做别的事的,并且只须要企业内部人员访问就足够了,当然有必要的话还要开telnet或ssh端口,这是方便企业内部系统管理员远程管理的,这里我建议使用ssh,并且为了防止万一入侵者进来了,他可能要对其他机器进行攻击,我决定对WWW服务器进行单独分离,现在假设FreeBSD的内部网卡编号为fxp1,我们编辑rc.conf文件,加上:
ifconfig_fxp1_alias0 ="inet 10.80.0.1 netmask 255.255.255.0"
然后我们把WWW的服务器设置成10.80这个网段,网关为10.80.0.1,这样就把WWW服务器单独划在了一个特殊的区域里了,假设我们设置WWW的IP为10.80.0.80现在我们再设置防火墙规则:
allow tcp from any to xxx.xxx.xxx.001 80 in
allow tcp from xxx.xxx.xxx.001 80 to any out //允许任意地方能访问防火墙的80
allow tcp from 10.80.0.80 80 to any out
allow tcp from any to 10.80.0.80 80 in //允许任意地方访问WWW服务器的80端口
allow tcp from 10.125.0.0/16 to 10.80.0.80 21 in
allow tcp from 10.125.0.0/16 to 10.80.0.80 20 in
allow tcp from 10.80.0.80 21 to 10.125.0.0/16 out
allow tcp from 10.80.0.80 20 to 10.125.0.0/16 out //允许内部网络使用FTP服务器连接WWW服务器
设置完成防火墙规则还不行还需要设置NATD,我们设置NATD为:
redirect_port tcp 10.80.0.80:80 xxx.xxx.xxx.001:80
这样设置以后,WWW服务器就可以允许企业内部人员顺利的更新主页和浏览主页了,而Internet却只能浏览WWW服务器上的主页,就算万一WWW服务器利用HTTP服务器入侵了该机器,由于该服务器的各种连接都被放火墙阻断,而无法对企业内部网络进行入侵和破坏,达到充分保护WWW服务器以及内部网络的目的。
现在我们再来分析DNS服务器,由于BBS服务器和WWW服务器实质上都一样这里就不讨论了,DNS服务器自然要提供DNS服务器,也就是UDP53端口,由于同时还带MAIL功能,所以还要开放SMTP端口以及POP3端口,而POP3服务器同样只允许内部企业访问,所以我们给rc.conf加入:
ifconfig_fxp1_alias0="inet 10.80.2.1 netmask 255.255.255.0"
然后给DNS服务器设置IP为10.80.2.53,设置防火墙规则为:
allow udp from any to xxx.xxx.xxx.003 53 in
allow udp from xxx.xxx.xxx.003 53 to any out //允许任意地方能访问防火墙的53端口
allow tcp from any to xxx.xxx.xxx.003 25 in
allow tcp from xxx.xxx.xxx.003 25 to any out //允许任意地方能访问防火墙的smtp端口
allow udp from 10.80.2.53 53 to any out
allow udp from any to 10.80.2.53 53 in //允许任意地方访问DNS服务器的53端口
allow tcp from any to 10.80.2.53 25 in
allow tcp from 10.80.2.53 25 to any out //允许任意地方访问DNS的SMTP端口
allow tcp from 10.125.0.0/16 to 10.80.2.53 110 in
allow tcp from 10.80.2.53 110 to 10.125.0.0/16 out //允许企业内部访问DNS的POP3端口
NATD设置为:
redirect_port udp 10.80.2.53:53 xxx.xxx.xxx.003:53 //把10.80.2.53的53转到xxx.xxx.xxx.003的53上,使用的UDP。
redirect_port tcp 10.80.2.53:25 xxx.xxx.xxx.003:25 //把10.80.2.53的25转到xxx.xxx.xxx.003的25上,使用的TCP。
按照上面的规则设置好企业网络后,使得企业网络保护更加的严密,服务器和服务器之间以及服务器和企业内部网络之间进行了严格控制。当然这里没有考虑内部入侵,以及内部IP盗用行为,这也就是FreeBSD防火墙的局限性。不过可以添加一块网卡,把企业内部人员的网络单独用一个网卡来进行隔离,达到弥补的办法。
好了,以上为我使用FreeBSD防火墙保护企业网络的个人做法,希望能给一部分企业网管有所帮助。
阅读(767) | 评论(0) | 转发(0) |