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

类别:软件工程 点击:0 评论:0 推荐:

        最近由于病毒肆虐,遂打算换掉原来的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 NO\\sCARRIER TIMEOUT 5 \
           \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 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

 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"
firewall_enable="NO"
firewall_logging_enable="NO"
ipfilter_enable="YES"
ipnat_enable="YES"

网关为192.168.1.1
八: #reboot now

一切OK。
注意:
编译内核时可根据自己机子的配置优化。本人的这个网关开机后总共使用不到30M内存。
定制防火墙规则可参考网上资料,定制的更加安全,高效。
在实现该网关的过程中,参考了很多网上的资料,本人仅把自己的配置过程写出来。

本文地址:http://com.8s8s.com/it/it33696.htm