电脑技术学习

FreeBSD handbook中文版 2 开始安装FreeBSD(2)

dn001
作者:iceblood;
E-Mail:;iceblood@163.com;
写作日期:2002-03-03;
FreeBSD在网络服务器的领域里占有一席之地,不管是在高端应用,还是小型企业里,
使用FreeBSD做服务器都是不错的选择,但是如何才能建立一个安全的网络呢?;

首先我们来做一个这样的假设,某公司有两台服务器,需要建立一个以FreeBSD为平台
的网关,并且还能提供电子邮件、DNS、WEB等服务,看起来好象这是一个很简单的事情,
然而要建立一个安全性高的却不简单,在此我将为大家介绍如何去做,首先我凭着自己
对FreeBSD的熟练程度,做了以下设计:;

Internet;
____|____;
|;|;
|;Gateway;|;
---------;
|;
____________|______________;
___|____;;____|____;
|||;|;
|;;LAN;;;||;;WWW;;;;|;
--------------------;

以上是我为该公司设计的网络结构图,首先我们来分析一下这个图,由于Gateway是一个
与Internet直接连接的服务器,糟受的攻击自然也是最多的,所以也是最危险了。而且
由于该服务器担任着公司的网关,该服务器只要一出问题,也将影响到全公司。为了稳
定性、安全性,我考虑该服务器要跑的服务越少越好。服务越少,那么漏洞出现的可能
性也越少。而WWW服务器由于放在了Gateway里面,受Gateway的保护,所以一般来说遭受
的攻击比较少,所以一般可以满足足够多的服务,但是这些服务怎么样才能让Internet
上的人访问呢?这就会在下面我们详细介绍了。;

首先我们来安装Gateway,Gateway要使用的Internet的IP为x.x.x.x网卡为xl0,内部IP
为192.168.0.1网卡为xl1,由于Gateway起到网关的作用,所以为了安全性,在该服务器
上做安全是非常重要的,FreeBSD有自带了一个ipfirewall防火墙,既然有,我们当然要
利用上了,首先编译内核:;

cd;/sys/i386/conf;
cp;GENERIC;./kernel_IPFW;

用编辑器打开kernel_IPFW这个文本文件,在该文件里加入以下内容:;

optionsIPFIREWALL//通知操作系统的内核检查每个IP数据包,将它们与规则
集进行比较;
optionsIPDIVERT//启用由ipfw;divert使用的转向IP套接字。这一选项需要
与natd联合使用。;
optionsIPFIREWALL_VERBOSE;;;;;;;//向系统的注册程序发送注册信息包。;
optionsIPFIREWALL_VERBOSE_LIMIT=100;;;;;;;//限制一台机器注册的次数。;
optionsIPSTEALTH//启动支持秘密转发的代码,这一选项在使防火墙不被
traceroute和类似工具发现时很有用。;
optionsACCEPT_FILTER_DATA;;;;;
optionsACCEPT_FILTER_HTTP;;;;;;//接受过滤器中的静态连接;
optionsICMP_BANDLIM//ICMP_BANDLIM根据带宽限制产生icmp错误。一般情况
下我们需要这个选项,它有助于你的系统免受D.O.S.攻击。;

把以上参数加入以后保存kernel_IPFW文件。;

make;depend;
cd;../../compile/kernel_IPFW;
make;
make;install;

(注意!!!!!请不要使用远程方式来设置服务器!为什么?等下你就能知道了。);

以上完成以后,你就可以重新启动系统使用新的内核了。;

使用新内核以后,如果该系统本来是连在网络上的,那么这时他的网络部分已经完全
丧失,这表示系统新的内核已经起作用了,防火墙也起作用了,但由于FreeBSD的防火
墙默认情况下是不允许任何机器访问,所以该机器的任何网络功能都暂时丧失。不过不
要着急,接着往下看,你就会觉得非常有意思了。;

既然该服务器担当是的网关,那么让网关启动起来是必须的。我们现在再:;

cd;/etc;

用编译器编译rc.conf;

加入如下参数:;

gateway_enable="YES";;;;;;//启动网关;
##########IP-firewall#################;
firewall_enable="YES";;;;;//激活firewall防火墙;
firewall_script="/etc/rc.firewall";;;;;;//firewall防火墙的默认脚本;
firewall_type="/etc/ipfw.conf";//firewall自定义脚本;
firewall_quiet="NO";//起用脚本时,是否显示规则信息。现在为“NO”假如你的
防火墙脚本已经定型,那么就可以把这里设置成“YES”了。;
firewall_logging_enable="YES";;;;;;//启用firewall的log记录。;
##########NATD#######################;
natd_interface="xl0";;;;;;;//NATD服务启用在哪块网卡。;
natd_enable="YES"//激活NATD服务;
natd_flags="-config;/etc/natd.conf";;;;//NATD服务参数设置文件。;

设置完成后我们再编译/etc/syslog.conf文件。;

加入以下行:;

!ipfw;
*.*;/var/log/ipfw.log;

好了rc.conf文件设置完毕,然后就是其他文件了。;

新建/etc/ipfw.conf;文件,在文件里写入以下内容:;

add;00400;divert;natd;ip;from;any;to;any;via;xl0;;;//natd服务启动设置;
add;00001;deny;log;ip;from;any;to;any;ipopt;rr;
add;00002;deny;log;ip;from;any;to;any;ipopt;ts;
add;00003;deny;log;ip;from;any;to;any;ipopt;ssrr;
add;00004;deny;log;ip;from;any;to;any;ipopt;lsrr;
add;00005;deny;tcp;from;any;to;any;in;tcpflags;syn,fin;;;;//这5行是过滤各种扫描包;
#######tcp#########;
add;10000;allow;tcp;from;xx.xx.xx.xx;to;x.x.x.x;22;in;//向Internet
的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。;
add;10001;allow;tcp;from;any;to;x.x.x.x;80;in;;;;;//向整个Internet开放HTTP服务。;
add;10002;allow;tcp;from;any;to;x.x.x.x;25;in;;;;;//向整个Internet开放smtp服务。;
add;10003;allow;tcp;from;any;to;x.x.x.x;110;in;;;;//向整个Internet开放pop3服务。;
add;19997;check-state;
add;19998;allow;tcp;from;any;to;any;out;keep-state;setup;
add;19999;allow;tcp;from;any;to;any;out;;;//这三个组合起来是允许内部网
络访问出去,如果想服务器自己不和Internet进行tcp连接出去,可以把19997和19998去
掉。(不影响Internet对服务器的访问);
######udp##########;
add;20001;allow;udp;from;any;53;to;me;in;recv;xl0;;;;;//允许其他DNS服务器的
信息进入该服务器,因为自己要进行DNS解析嘛~;
add;20002;allow;udp;from;any;to;x.x.x.x;53;in;recv;xl0;;;;//向整个Internet开
放DNS服务。;
add;29999;allow;udp;from;any;to;any;out;//允许自己的UDP包往外发送。;
######icmp#########;
add;30000;allow;icmp;from;any;to;any;icmptypes;3;
add;30001;allow;icmp;from;any;to;any;icmptypes;4;
add;30002;allow;icmp;from;any;to;any;icmptypes;8;out;
add;30003;allow;icmp;from;any;to;any;icmptypes;0;in;
add;30004;allow;icmp;from;any;to;any;icmptypes;11;in;;;;//允许自己ping别人的
服务器。也允许内部网络用router命令进行路由跟踪。;
#######lan##########;
add;40000;allow;all;from;192.168.0.0/16;to;any;
add;40001;allow;all;from;any;to;192.168.0.0/16;;//允许内部网络访问Internet。;

好了,还有natd没设置了,我们再次添加/etc/natd.conf这个文件,其内容如下:;

log;yes;;;;;;//启动natd的log记录。;
redirect_port;tcp;192.168.0.2:25;x.x.x.x:25;;;;;//把对服务器IP为x.x.x.x的smtp
访问转到192.168.0.2的25上去。;
redirect_port;tcp;192.168.0.2:80;x.x.x.x:80;;;;;//把对服务器IP为x.x.x.x的http
访问转到192.168.0.2的80上去。;
redirect_port;tcp;192.168.0.2:110;x.x.x.x:110;;;;;//把对服务器IP为x.x.x.x的pop3
访问转到192.168.0.2的110上去。;

好了,natd也设置完了~重新启动一下系统让防火墙和natd生效,现在就是该装的服务没
装了,虽然防火墙已经让这些服务通行。;

我们现在在Gateway上安装DNS服务,我现在选择的是bind;9.2.0,安装过程不是我们的
重点,所以这里就不详细介绍了,我这里只对bind的安全设置做一个说明,假设bind的
工作目录是/etc/namedb现在我们对bind设置一下,因为bind的大多数版本都存在问题,
这个版本虽然目前没有,但还是提防为好,我在这里建议使用chroot技术来增强bind的
安全,假设我们把chroot目录设在/chroot,我们做以下事情:;


pw;useradd;bind;-g;53;-u;53;-d;/nologin;-s;/nologin;
mkdir;/chroot;
mkdir;/chroot/etc;
mkdir;/chroot/var;
mkdir;/chroot/var/run;
cp;-rp;/etc/namedb;/chroot/etc/namedb;;//建立bind的工作环境和目录。;

然后再运行;

$PATH/sbin/named;-t;/chroot;-u;bind;

这样做了后运行ps;-ax;|grep;named会发现bind是以bind这个权限很底的身份运行,
我们到/chroot/var/run目录下看,会发现有named.pid这个文件,表示bind已经很成
功的被chroot在/chroot这个目录里了,就算被“黑客”利用bind入侵了,由于权限很底,
而且被限制在/chroot这个目录里,并且里面没有任何的shell,不给“黑客”任何的破
坏条件。所以说bind这时已经相当安全了。;

到此整个Gateway服务器就已经完全设置完毕。;

现在就是内部服务器了,而内部服务器受到Gateway以及防火墙的保护,所以在安装上
没有多大的问题,只要注意一下邮件服务软件以及HTTP服务软件是否有漏洞就行了,
比如不要使用老版本的sendmail,因为sendmail的每个版本都存在一定的安全问题,
我这里建议使用Qmail,关于Qmail的安装可以下载我提供的Qmail安装包
http://www.linuxaid.com.cn/training/tips/showtip.jsp?i=245;,而在HTTP上就
要注意不要使用带漏洞的新闻发布系统,论坛等。;

好了,整个服务器都已经安装完了,以上本人已经在两台FreeBSD;4.5的机器上测试
通过。使用FreeBSD4.5的朋友们,如果按以上方法去设置自己的服务器的话,基本
能保证正常工作。;

声明:该文章由iceblood本人原创,如有什么问题欢迎大家与我交流经验,文章如
要转载,请保持文章的完整性,包括“声名”部分

标签: