FreeBSD系统安装及安全调整 (转)
一边听:一万个理由 ... 一边看。[wma]http://home.js.chinavnet.com/UserBlog/11001425013/2006217131447130.mp3[/wma]
2K-RR*R+?HiRM[&]
内容简介:本文将详细介绍一个网站服务器的系统安装、针对安全因素的系统调整。该服务器通过Apache+PHP4+MySQL提供动态网站服务,通过自带的FTPD提供网页上传服务,通过自带的OpenSSH提供管理维护服务。本文将不涉及Apache和MySQL的管理。 ]%sDem{-M}%?k
一、安装操作系统
.w9|,H_d4Sy@
1.选择发行版本 2O\ tv_kD
p CpTP8B6T.s
安装生产服务器,应当尽量选择最新的稳定版本。本文将采用FreeBSD 4.8 RELEASE。
4.8-RELEASE是成文时候最新的-STABLE版本。5.0-RELEASE和即将推出的5.1-RELEASE都是-CURRENT分支的发行版本,其稳定性和性能可能不如-STABLE,仅适合于开发者和发烧友。对于生产服务器来说,miniinst或disc1就足够了。请下载4.8-RELEASE-i386-mini.iso这个文件,刻录成安装光盘。 :i,Fe!_B"H_
本文所叙述操作系统的安装就将采用光盘安装方式。 &~G2_3ia,g!vYJ]Tn0\
2.安装要点
#]lP8t!Wo4r
通过安装向导可以很轻松的完成系统安装,这里不加详细叙述,仅仅指出如下两点: }OO9U(@3wfLv
(1)硬盘分区的注意事项: "f4Y!dHUA z^2P
eRX.@-I%}I;~
分区的大小根据应用的实际情况而异,特别指出的是,网站文件、数据库文件、日志文件、临时文件应当单独分区存储,以防止攻击者滥用磁盘空间导致系统崩溃。下面是一块容量为18G SCSI硬盘的分区例子:
分区 大小 备注 Z-bz)jIh4f)n Oa
/ 128M
SWAP 1008M 至少是内存数量的2倍(本系统采用512M内存)
/tmp 256M
/usr 3G 系统和Apache等应用软件、源码存储于这个分区 L7jbIC+d
/usr/home 7G 网站文件存储于此 !@NsZF4m7|W5L
/var 3G 数据库将使用这个分区 8N i;x/Q'TRF5q tH4l
/var/log 2811M 日志文件单独分区
(2)选择要安装的文件(distributions):
/s Wx;cQ#P%OO/M
只安装必要的基本系统即可,绝对不要安装全部软件。在custom项目中,选取如下安装内容:
9gs.? fl6NJ Q4i
bin,基本的FreeBSD系统文件; 0bo)ALv
man,系统帮助文件; ^+x oJ'Zk3||[!@)B
src—》sys,操作系统核心源码,定制内核时候将使用到。
接下来,安装程序询问是否安装PORTS,为了方便安装软件,我们选择安装。但在高安全要求的系统上,最好不要使用ports或者packages,尽量自己下载源代码在本地编译,手动安装。 %TYI@m2Z&g/[O
提示:有时,安全和易用是相互矛盾的。
然后是拷贝文件,直至安装完毕。
3.安装后的初步设置
)NH0T3Pn)m%nY
安装完之后,建议您安装cvsup-without-gui(从bento.freebsd.org可以下在最新版本),并同步代码。对系统进行初步设置: 0k['CZ7J7i rsR
增加用户帐号;
设置网络参数,将主机连接到网络上(全部设置完成后移动到Internet);
配置网络服务,打开FTP、SSH服务,后续的配置工作都将远程进行。 RaaRE O\oQY
&H\ P c|r)w(J
二、定制系统内核 9plDj9b4?)b'C
g|OI TQEW](o
定制系统内核内容:
支持特定硬件,如SMP、RAID、大容量内存;
删除多余硬件驱动支持;
增强系统安全性,增加IP过滤防火墙支持。
编辑内核设置文件,为增强安全特性,增添或修改如下内容:
#启用ipfw过滤 hH x5q7n{Wp u_5G
options IPFIREWALL #打开IPFW过滤功能
options IPFIREWALL_VERBOSE #设置过滤日志记录 N#D,\3y"u
options IPFIREWALL_VERBOSE_LIMIT=100 #设置日志记录限制 /_qa}*E~N
options IPFIREWALL_DEFAULT_TO_ACCEPT #设置缺省行为 :ICUECI y-L(Co8`
options NOLKM#关闭LKM
options TCP_DROP_SYNFIN #丢弃SYNFIN包,需要在rc.conf中打开
#关于虚拟终端 6j1\h4aFg^
#取消历史记录,在登出系统后刷新虚拟终端缓冲中的内容
SC_NO_HISTORY
#取消debug键
SC_DISABLE_DDBKEY
#取消ctl+alt+del键 /LcTao.Z
SC_DISABLE_REBOOT V*[%mHSM
重新编译系统内核并使之生效。
3R1c7]5UX6C.E
三、系统配置 -Q q&N{3_&{3u5w
{;h$WS3i"Ab
1.修改/etc/inetd.conf文件内容,配置inetd服务 u5KU4V/YH|TO
(1)telnet服务 V2uGR7u;g!V
.K+v6z.}rc2s
我们将使用SSH远程管理这台服务器,因此禁止telnet服务:在行前加"#"标记。
(2)FTP服务
1sc7~n Uuz`
使用系统自带的FTP服务,并作如下设置:
n}UVb@Nvi9xNe
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -h VFX'JG(X:g&\.tz
-l 参数,记录每个成功或者失败的FTP登录尝试;
-l -l 参数,所有的下载、上传、删除更动作和文件名都会被记录下来(设置syslog.conf)
-h参数,将禁止主机相关信息的输出,例如ftpd版本、主机名等;
-P参数,指定FTPD进程监听端口号 3o Wy Z:sC9p0F
"M[r"ayQX
FTP服务其他安全方面的设置: N7{P kUw2nu
把网站编辑帐号放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录,防止浏览其他目录。 f c5KoWw N
编辑/etc/hosts.allow 文件,限制对FTPD的访问。 3MB;[$]h%q#R
可以编辑/etc/ftpwelcome,防止泄露系统信息。 3Y5O Kp,qD
gi0~ZR,u hs ~
2.修改/etc/rc.conf文件,配置系统初始参数 xZR}~2S
#配置开机器后自动启动或关闭的守护进程 $_"n"u|#f6p v
#可以关闭inetd,使用SSH代替了telnet服务,使用其他的FTP服务程序代替系统的ftpd。 J;Y(r3g&j,J
inetd_enable="NO"
z-rS0{ l@.w
#如果决定使用inetd则启动inetd的日志选项,并提高一个服务每分钟启动的上限数目(默认是256,建议提高到1024),防止DoS攻击; !vS#Fn#[z3Y
inetd_enable="YES"
inetd_flags="-l -R 1024"
#打开SSHD
sshd_enable="YES"
8_L3wv'v8_
#禁止syslogd记录其他主机日志(关闭端口514) +v#y1~x&C
syslogd_enable="YES"
syslogd_flags="-s -s"
V|tW4J0y
#关闭不必要的服务。本服务器没有NFS、NIS登需要,可以关闭portmap (关闭端口111)
portmap_enable="NO" Xa~.t&Z`jDQ
nfs_server_enable="NO" ` Z i)h0j"}
nfs_client_enable="NO"
L$`-R4C(AD n
#使sendmail只监听localhost,允许邮件客户程序发送邮件 LmO!eTFz2n
sendmail_enable="NO"
#设置为"NONE",将彻底关闭25端口 ry)H0y4F
9xT#l8OA#n%VT5S
#设置内核安全级别(Securelevels)
#内核安全级别从-1到3,-1和0级别是非安全级别。
#系统在多用户模式下,安全级别只能提升不能降低。 CC*P&[2q6L)W
#Securelevel -1,永久不安全模式 7BhY Y }Wm
#Securelevel 0,不安全模式
#Securelevel 1,安全模式 g%AW\V j.@&x
#Securelevel 2,高安全模式 U;qw@i@3szL2~%Ez
kern_securelevel_enable="YES" !y'B*aB:_u^
kern_securelevel="2" 2Q]?W0ao s!?'fy
"c/q:Y{8LlK
#计算机启动时候发现文件系统失效,将以-y参数运行fsck (Nak#p0qK o;SQA2l
{W:gd,xE"^5U$a E
fsck_y_enable="YES" *c OhB Q
`o A0vA/r HupkN
#打开磁盘配额
enable_quotas="YES" 7VX"Q0?*O `9pk/R
check_quotas="YES"
#在系统启动时清空/tmp *UK'R@U_t&H.v&Z
clear_tmp_enable="YES" %Q"c`~'O7n
#防止系统自动加入信息到motd
update_motd="NO" *~MNKE
Ms(Z]|L$@
#启动防火墙设置 0k*A6eu rr7p.d^
firewall_enable="YES" U)|W ^9WZn#@I8?
firewall_logging="YES" t3E5[ B0q`v7]f
firewall_script="/etc/firewall.rules"