架设此服务器,使内网用户通过本服务器与外界通讯;基本原理为内网用户通过
FreeBSD内自带的
网关路由功能(route)与外网进行通讯,服务器的安全性及病毒的防护控制通过FreeBSD的
ipfilter来完成。初步架设过程如下:
网卡接口说明:
vr0:外网网卡接口
vr1:内网网卡接口
1、 最小化安装
FreeBSD6.1Release从ftp://ftp.FreeBSD.org/pub/FreeBSD/下载
FreeBSD6.1Release镜像文件,然后刻成光盘,将服务器设置成从光驱启动,开始安装,安装时我选择最小化安装,开通ftp及ssh。其它的默认安装就可以。具体可参考
这篇文章。安装完后重启机器。
2、 安装内核
将安装光盘放入光驱,然后:
# /usr/sbin/sysinstall
然后选择Configure --> Distributions -> src -> sys,点install,安装完成后重启机器。
3、 基本的配置
配置/etc/rc.conf
# cd /etc
# ee rc.conf
内容如下:
hostname="gatewall.wxic.edu.cn"defaultrouter="172.16.252.17"ifconfig_vr0="inet 172.16.252.x netmask 255.255.255.252"ifconfig_vr1="inet 58.193.11x.25x netmask 255.255.248.0"inetd_enable="YES"linux_enable="YES"sshd_enable="YES"usbd_enable="YES"sendmail_enable="NONE" 配置/etc/resolv.conf
# ee /etc/resolv.conf
内容如下:
nameserver 58.193.112.1
4、 配置内核,加入对ipfilter的支持
# cd /usr/src/sys/i386/conf
# cp GENERIC funpower
# ee funpower
然后开始编辑内核文件,机器和应用方面的不同会有不同的内核文件,因为需要用到ipfilter,我们加入对ipfilter的支持。在内核中加入如下内容:
options IPFILTER
options IPFILTER_LOG
options IPFILTER_DEFAULT_BLOCK
其它选项可以参考这篇文章,然后自己定制。编辑完后保存退出。然后进行如下操作:
# /usr/sbin/config funpower
# cd ../compile/funpower
# make cleandepend
# make depend
# make
# make install
编译完后重启服务器(因为ipfilter默认是阻止所有通讯,所以确保你是在服务器前操作)。
5、 在/etc/rc.conf中加入路由选项
# cd /etc
# ee rc.conf
在最后加入如下几行:
gateway_enable="YES"
static_routes="static1"
route_static1="-net 58.193.11x.0/21 172.16.252.x/30" //说明第一个IP为内网IP范围;第二个IP为外网网卡的网关地址
6、 配置ipfilter
在/etc/rc.conf中加入:
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.conf"
然后编辑/etc/ipf.conf文件
# cd /etc/
# ee ipf.conf
内容如下:
#环路网卡lo0 #out in 全部通过pass in quick on lo0 allpass out quick on lo0 all#外网网卡vr0#out 只让开通的IP通讯block out quick on vr0 from any to 192.168.0.0/16block out quick on vr0 from any to 0.0.0.0/8block out quick on vr0 from any to 169.254.0.0/8block out quick on vr0 from any to 10.0.0.0/8block out quick on vr0 from any to 127.16.0.0/12block out quick on vr0 from any to 127.0.0.0/8block out quick on vr0 from any to 192.0.2.0/24block out quick on vr0 from any to 204.152.64.0/23block out quick on vr0 from any to 224.0.0.0/3#开通58.193.112.1pass out quick on vr0 proto tcp/udp from 58.193.112.1/32 to any keep statepass out quick on vr0 proto icmp from 58.193.112.1/32 to any keep state#开通58.193.112.3pass out quick on vr0 proto tcp/udp from 58.193.112.3/32 to any keep statepass out quick on vr0 proto icmp from 58.193.112.3/32 to any keep state#开通58.193.113.1pass out quick on vr0 proto tcp/udp from 58.193.113.1/32 to any keep statepass out quick on vr0 proto icmp from 58.193.113.1/32 to any keep state#开通58.193.113.2pass out quick on vr0 proto tcp/udp from 58.193.113.2/32 to any keep statepass out quick on vr0 proto icmp from 58.193.113.2/32 to any keep stateblock out on vr0 all#in 阻止一些IP(比如私有IP)和一些病毒攻击端口(如138\139\445等)block in quick on vr0 from 192.168.0.0/16 to anyblock in quick on vr0 from 172.16.0.0/12 to anyblock in quick on vr0 from 10.0.0.0/8 to anyblock in quick on vr0 from 127.0.0.0/8 to anyblock in quick on vr0 from 0.0.0.0/8 to anyblock in quick on vr0 from 169.254.0.0/16 to anyblock in quick on vr0 from 192.0.2.0/24 to anyblock in quick on vr0 from 204.152.64.0/23 to anyblock in quick on vr0 from 224.0.0.0/3 to anyblock in quick on vr0 from 58.193.112.0/21 to anyblock in quick on vr0 proto udp from any to any port = 69block in quick on vr0 proto tcp/udp from any to any port = 135block in quick on vr0 proto udp from any to any port = 137block in quick on vr0 proto udp from any to any port = 138block in quick on vr0 proto tcp/udp from any to any port = 139block in quick on vr0 proto tcp/udp from any to any port = 445block in quick on vr0 proto tcp/udp from any to any port = 593block in quick on vr0 proto tcp from any to any port = 1022block in quick on vr0 proto tcp from any to any port = 1023block in quick on vr0 proto tcp from any to any port = 1025block in quick on vr0 proto tcp from any port = 1034 to any port = 80block in quick on vr0 proto tcp from any to any port = 1068block in quick on vr0 proto tcp from any to any port = 1433block in quick on vr0 proto udp from any to any port = 1434block in quick on vr0 proto tcp from any to any port = 1871block in quick on vr0 proto tcp from any to any port = 2745block in quick on vr0 proto tcp from any to any port = 3208block in quick on vr0 proto tcp from any to any port = 3127block in quick on vr0 proto tcp from any to any port = 4331block in quick on vr0 proto tcp from any to any port = 4334block in quick on vr0 proto tcp from any to any port = 4444block in quick on vr0 proto tcp from any port = 4444 to anyblock in quick on vr0 proto tcp from any to any port = 4510block in quick on vr0 proto tcp from any to any port = 4557block in quick on vr0 proto tcp from any to any port = 5554block in quick on vr0 proto tcp from any to any port = 5800block in quick on vr0 proto tcp from any to any port = 5900block in quick on vr0 proto tcp from any to any port = 6129block in quick on vr0 proto tcp from any to any port = 6667block in quick on vr0 proto tcp from any to any port = 9995block in quick on vr0 proto tcp from any to any port = 9996block in quick on vr0 proto tcp from any to any port = 10080block in quick on vr0 all with fragsblock in quick on vr0 proto tcp all with shortblock in quick on vr0 all with opt lsrrblock in quick on vr0 all with opt ssrrblock in log first quick on vr0 proto tcp from any to any flags FUPblock in quick on vr0 all with ipoptspass in quick on vr0 proto tcp from any to any port = 80 flags S keep statepass in quick on vr0 proto tcp from any to any port = 23 flags S keep statepass in quick on vr0 proto tcp from any to any port = 22 flags S keep statepass in quick on vr0 proto tcp from any to any port = ftp flags S/SA keep statepass in quick on vr0 proto tcp from any to any port = ftp-data flags S/SA keep statepass in quick on vr0 proto tcp from any to any port 30000 >< 50001 flags S/SA keep statepass in quick on vr0 proto icmp from any to any icmp-type 0pass in quick on vr0 proto icmp from any to any icmp-type 11block in log quick on vr0 proto icmp from any to anyblock in log on vr0 all#内网网卡vr1#out 全部通过pass out on vr1 all#in 全部通过pass in on vr1 all配置完后重启服务器。
找一台客户机测试,首先使用ipf.conf中开通的IP,然后ping edu.cn,可以ping通,说明可以连接外网了。
然后将IP设置为不是开通列表中的IP,如果ping不通,则说明ipf.conf的设置生效了。
作者:老管(funpower) email:funpower@gmail.com 2006-6-30参考文章:IP Filter Based Firewalls HOWTO \ 26.5 IPFILTER (IPF) 防火墙(freebsd handbook) \ 27.2 网关和路由Trackback: http://tb.donews.net/TrackBack.aspx?PostId=932858