用FreeBSD5.3建立安全网关,ADSL+FreeBSD+ipfilter+ipnat

最近由于病毒肆虐,遂打算换掉原来的Windows 2000 server 网关,由于本人曾使用过FreeBSD,感觉这个系统还可以—曾用其作服务器,连续运行几个月都没有出过问题,所以打算用FreeBSD来做安全网关 。
在网上查阅了一些资料,花了半天的时间,将基于FreeBSD的网关搞定:
现分享如下:
一网络环境:
通过1M ADSL上网,动态IP,不向外提供服务 。内部有几十台电脑,要共享上网 。FreeBSD5.3,两块网卡,8139( rl0 ),对外,同ADSL猫相连,530tx( vr0 ),对内,同交换机相连 。
二系统安装:
至于系统的安装网上有很多资料,在此不细说 。
详情请看 http://www.xyinfo.ha.cn/netschool/freebsd/index.htm
三编译内核:
加上ipfilter支持,去掉系统默认的 ipfirewall 。
#cd /usr/src/sys/i386/conf
#cp GENERIC DAFEI
#ee DAFEI
修改这一行,红色的部分要和该文件名相同 。
ident DAFEI
在末尾加入一下几行:
#禁用ipfirewall 。
#options IPFIREWALL
#options IPFIREWALL_VERBOSE
#options IPFIREWALL_VERBOSE_LIMIT=90
#options IPFIREWALL_DEFAULT_TO_ACCEPT
#options IPDIVERT
#支持ipfilter
options BRIDGE
options IPFILTER
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP
由于ipfirewall和ipfilter都运行在内核,二者不能同时共存,所以必须注释掉ipfirewall,其他内核优化选项这里就不细说了 。
编译内核:
#cd /usr/src
#make kernel KERNCONF=DAFEI
编译成功后要重新启动计算机 。
四 配置拨号上网:
修改ppp.conf文件
#cd /etc/ppp
#cp ppp.conf cpp.conf.bak
#ee ppp.conf
修改如下:
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set redial 15 28800
set reconnect 15 28800
set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5
"" AT OK-AT-OK ATE1Q0 OK dATDTTTIMEOUT 40 CONNECT"
adsl:
set device PPPoE: rl0
set mru 1492
set mtu 1492
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname YOURUSERNAME used to login
set authkey YOURPASSWord used to login
【用FreeBSD5.3建立安全网关,ADSL FreeBSD ipfilter ipnat】 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
enable dns
红色的部分是需要修改的
五 定制防火墙规则:
#cd /etc
#touch ipf.rules
#ee ipf.rules
加入如下内容:
block in log quick all with short
block in log quick all with ipopts
block in log quick all with frag
block in log quick all with opt lsrr
block in log quick all with opt ssrr

pass out on vr0 all
pass in on vr0 all
pass out quick on lo0 all
pass in quick on lo0 all

block out on rl0 all

pass out quick on rl0 proto tcp from any to any flags S keep state keep frags
pass out quick on rl0 proto udp from any to any keep state
pass out quick on rl0 proto icmp all keep state

block in quick on rl0 all

由于空间的限制,删去了一些规则 。
六 配置地址转换(实现NAT功能):
#cd /etc
#touch ipnat.rules
#ee ipnat.rules
加入如下内容:
map rl0 192.168.0.0/16 -> 0/32 proxy port ftp ftp/tcp
map rl0 192.168.0.0/24 -> 0/32 portmap tcp/udp 10000:30000
map rl0 192.168.0.0/24 -> 0/32

七 配置rc.conf文件:

#cd /etc
#ee rc.conf
修改如下:
gateway_enable="YES"
hostname="ginifab-gatway.ginifab.com"
ifconfig_vr0="inet 192.168.1.1 netmask 255.255.255.0"
kern_securelevel="1"
kern_securelevel_enable="YES"
inetd_enable="YES"
Linux_enable="NO"
sendmail_enable="NO"
keyrate="fast"
nisdomainname="NO"
sshd_enable="YES"
usbd_enable="NO"
ppp_enable="YES"
ppp_mode="ddial"
ppp_mode="background"
ppp_profile="adsl"

推荐阅读