≡ 典典 - 单机游戏攻略 ≡'s Archiver

admin 发表于 2006-8-23 14:01

FreeBSD系统安装及安全调整 (转)

一边听:一万个理由 ... 一边看。
*DQE+Fh:p _} [wma]http://home.js.chinavnet.com/UserBlog/11001425013/2006217131447130.mp3[/wma]
T7y6g]S0k:L6A T
l:`@ Nrw+I 2K-RR*R+?HiRM[&]
内容简介:本文将详细介绍一个网站服务器的系统安装、针对安全因素的系统调整。该服务器通过Apache+PHP4+MySQL提供动态网站服务,通过自带的FTPD提供网页上传服务,通过自带的OpenSSH提供管理维护服务。本文将不涉及Apache和MySQL的管理。 ]%sDem{-M}%?k
  一、安装操作系统
%}T`~:A3?+[k,t .w9|,H_d4Sy@
  1.选择发行版本 2O\ tv_kD
p C pTP8B6T.s
  安装生产服务器,应当尽量选择最新的稳定版本。本文将采用FreeBSD 4.8 RELEASE。
p4H,brEB?
`D[&K(fK   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\

TS'E%f#iM%I   2.安装要点
@k5h5]V [-H6?v #]lP8t!Wo4r
  通过安装向导可以很轻松的完成系统安装,这里不加详细叙述,仅仅指出如下两点: }OO9U(@3wfLv

z?P(fZ7_VGW   (1)硬盘分区的注意事项: "f4Y!dHUA z^2P
eRX.@-I%}I;~
  分区的大小根据应用的实际情况而异,特别指出的是,网站文件、数据库文件、日志文件、临时文件应当单独分区存储,以防止攻击者滥用磁盘空间导致系统崩溃。下面是一块容量为18G SCSI硬盘的分区例子:
'ZNE5ikfG
GD._"v'Fn Y1z#L)z 分区 大小 备注 Z-bz)j Ih4f)n Oa
/ 128M
F |j6f k+\w2v7| d\] SWAP 1008M 至少是内存数量的2倍(本系统采用512M内存)
i W%LgP-UIn~Z /tmp 256M
Jt6[VN /usr 3G 系统和Apache等应用软件、源码存储于这个分区 L7jbIC+d
/usr/home 7G 网站文件存储于此 !@NsZF4m7|W5L
/var 3G 数据库将使用这个分区 8N i;x/Q'TRF5q tH4l
/var/log 2811M 日志文件单独分区
FI9d[&F v!~^2T5n
i e!V!| Jw-m{x8@ b0kQ   (2)选择要安装的文件(distributions):
U]]4Q6L hM%JSO /s Wx;cQ#P%OO/M
  只安装必要的基本系统即可,绝对不要安装全部软件。在custom项目中,选取如下安装内容:
lI7T]LN3Fq d 9gs.? fl6NJ Q4i
  bin,基本的FreeBSD系统文件; 0bo)ALv
  man,系统帮助文件; ^+x oJ'Zk3| |[!@)B
  src—》sys,操作系统核心源码,定制内核时候将使用到。
(uo;h@9ES
V%t|ef ` tg(}   接下来,安装程序询问是否安装PORTS,为了方便安装软件,我们选择安装。但在高安全要求的系统上,最好不要使用ports或者packages,尽量自己下载源代码在本地编译,手动安装。 %TYI@m2Z&g/[O

K.bY n%a+Yt   提示:有时,安全和易用是相互矛盾的。
C3R5NjZ,XP
*vM~5P HM-W4L   然后是拷贝文件,直至安装完毕。
%d3UJ'pb[w
D0q q!oBCZ   3.安装后的初步设置
bfcyGL2L5I;XJ )NH0T3Pn)m%nY
  安装完之后,建议您安装cvsup-without-gui(从bento.freebsd.org可以下在最新版本),并同步代码。对系统进行初步设置: 0k['C Z7J7i rsR

ia k:y9O/Mul9l(|   增加用户帐号;
i'EH,n*V3h U   设置网络参数,将主机连接到网络上(全部设置完成后移动到Internet);
7Q Vvgy[+C;w   配置网络服务,打开FTP、SSH服务,后续的配置工作都将远程进行。 RaaRE O\oQY
&H\ P c|r)w(J

;t` hG.BM _   二、定制系统内核 9plDj9b4?)b'C
g|OI TQEW ](o
  定制系统内核内容:
h'H5Yxb
7fi*e \8P9Y r)yc&{   支持特定硬件,如SMP、RAID、大容量内存;
[2ty%|-Sv8IiD6g   删除多余硬件驱动支持;
@"t%[6w%b riF   增强系统安全性,增加IP过滤防火墙支持。
mt5F}-~r
Q l`3C ZM'WYj   编辑内核设置文件,为增强安全特性,增添或修改如下内容:
7Z L3U3lDd/_
%f#`_:a)i   #启用ipfw过滤 hH x5q7n{Wp u_5G
  options IPFIREWALL #打开IPFW过滤功能
#U:j(igx   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
.^%c4`t%iy J d ktG   options TCP_DROP_SYNFIN #丢弃SYNFIN包,需要在rc.conf中打开
F C \J+Iu
7f:u e(Oc`#Qe3K   #关于虚拟终端 6j1\h4aFg^
  #取消历史记录,在登出系统后刷新虚拟终端缓冲中的内容
2jL ROnx   SC_NO_HISTORY
Sy!d }*IW   #取消debug键
Fz|Q,j_8|A4vn s   SC_DISABLE_DDBKEY
yE'H|RH   #取消ctl+alt+del键 /LcTao.Z
  SC_DISABLE_REBOOT V*[%mHSM

:yXV,Q~^r3T9JM
Wr_G"D f3V]N   重新编译系统内核并使之生效。
6kw7AMF*\ 3R1c7]5UX6C.E
  三、系统配置 -Q q&N{3_&{3u5w
{;h$WS3i"Ab
  1.修改/etc/inetd.conf文件内容,配置inetd服务 u5KU4V/YH|TO

O1cQd+W u5AWE   (1)telnet服务 V2uGR7u;g!V
.K+v6z.}rc2s
  我们将使用SSH远程管理这台服务器,因此禁止telnet服务:在行前加"#"标记。
xD/J}HB
8?zL*?9i4~b   (2)FTP服务
v`/}9i-\#i 1sc7~n Uuz`
  使用系统自带的FTP服务,并作如下设置:
GM/n(mqiX'W:j n}UVb@ Nvi9xNe
  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -h VFX'JG(X:g&\.t z

:T{ wnn9dT   -l 参数,记录每个成功或者失败的FTP登录尝试;
+y C:N+vR?;]   -l -l 参数,所有的下载、上传、删除更动作和文件名都会被记录下来(设置syslog.conf)
5J W,i'w'f   -h参数,将禁止主机相关信息的输出,例如ftpd版本、主机名等;
'cZRW|/q"}\!U}6fM   -P参数,指定FTPD进程监听端口号 3o Wy Z:sC9p0F
"M[r"ayQ X
  FTP服务其他安全方面的设置: N7{P kUw2nu

9pH?(m{xb2U&G,D)l   把网站编辑帐号放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录,防止浏览其他目录。 fc5KoWw N
  编辑/etc/hosts.allow 文件,限制对FTPD的访问。 3MB;[$]h%q#R
  可以编辑/etc/ftpwelcome,防止泄露系统信息。 3Y5OKp,qD
gi0~ZR,u hs ~
  2.修改/etc/rc.conf文件,配置系统初始参数 x Z R} ~2S

f2a1h#F2{9B   #配置开机器后自动启动或关闭的守护进程 $_"n"u|#f6pv
  #可以关闭inetd,使用SSH代替了telnet服务,使用其他的FTP服务程序代替系统的ftpd。 J;Y(r3g&j,J
  inetd_enable="NO"
+^fN I:t,KO z-rS0{ l@.w
  #如果决定使用inetd则启动inetd的日志选项,并提高一个服务每分钟启动的上限数目(默认是256,建议提高到1024),防止DoS攻击; !vS#Fn#[z3Y

9{ sf*e.m S   inetd_enable="YES"
e5G |P|(z   inetd_flags="-l -R 1024"
W|H v%Jf"gT
l*D8E%R Y'@2_X^   #打开SSHD
ag0fH%KC nWk   sshd_enable="YES"
b-V%G*W!\+sJ,k n'\ 8_L3wv'v8_
  #禁止syslogd记录其他主机日志(关闭端口514) +v#y1~x&C
  syslogd_enable="YES"
8qh^"@|la7n   syslogd_flags="-s -s"
/Pg3a7R x/`vo V|t W4J0y
  #关闭不必要的服务。本服务器没有NFS、NIS登需要,可以关闭portmap (关闭端口111)
6E1@s&Qqx ww h+[SX   portmap_enable="NO" Xa~.t&Z`jDQ
  nfs_server_enable="NO" ` Z i)h0j"}
  nfs_client_enable="NO"
9p3lG#| v1L#m L$`-R4C(ADn
  #使sendmail只监听localhost,允许邮件客户程序发送邮件 LmO!eTFz2n
  sendmail_enable="NO"
7t8HGUC*u%L   #设置为"NONE",将彻底关闭25端口 ry)H0y4F
9xT#l8OA#n%VT5S
  #设置内核安全级别(Securelevels)
["x0U:daF   #内核安全级别从-1到3,-1和0级别是非安全级别。
!T#@pYi ~u   #系统在多用户模式下,安全级别只能提升不能降低。 CC*P&[2q6L)W
  #Securelevel -1,永久不安全模式 7B hYY }Wm
  #Securelevel 0,不安全模式
Z.`"yID"ysm]   #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 H upkN
  #打开磁盘配额
3{"D7CT r@z\   enable_quotas="YES" 7VX"Q0?*O `9pk/R
  check_quotas="YES"
%| ~h.^X(]
s2fzCwR   #在系统启动时清空/tmp *UK'R@U_ t&H.v&Z
  clear_tmp_enable="YES" %Q"c`~'O7n

_ dU2zzh:o0q%O5dFG   #防止系统自动加入信息到motd
6m}o d0Ii   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"
Y{P/PK/sTk
m:U:c4O8c4~4v   #丢弃SYNFIN信息包。缺省时设置为”NO”,当设置为”YES”的时候,系统内核将忽略同时设置了syn和fin位的TCP桢(需要内核的支持:options tcp_drop_synfin) 7W o&W&U7aP
  tcp_drop_synfin="YES"
Yl.mF:}#m CPM!W:K[_R:q
  #丢弃ICMP重定向。可以防止DOS攻击或劫持进程(hijack sessions)
7i"NDpZAq&U@y YDR   icmp_drop_redirect="YES"
`F2^3T\2E-P   icmp_log_redirect="YES" #记录ICMP重定向
*sU,N;s5K-K i   #在CISCO路由器上关闭重定向:no ip send-redirects )e hx nF hu
*_&FeU"@|5N
  log_in_vain="YES" #记录每一个到关闭端口的连接企图。 B q U&hH"B
  accounting_enable="YES" #打开系统审计功能 B$Hn~z9\k9p&K:Q+hI

0^7P+SY#Uf W0{v7oV y!U#W(Yuz
  3.修改/etc/sysctl.conf文件,调整IP堆栈
8q(C*?&D[P2D f(A+ibp
'T#Mdh5i3t7U ~mG
9KN f8F I/AhWNO4T6]   #关闭对广播类型的响应,过滤ICMP响应后,服务器无法ping 通,可以提高部分安全性能
3@&`3WPXhj h net.inet.icmp.bmcastecho=0
%i^\Uhcz#}   #对UDP包的校验和进行计算,防止不正确的UDP包的攻击 *fB)k'W7M4eim
  net.inet.udp.checksum=1 !m[#Z8fW`qZ

H J%fF)D"k-P   #在默认情况下,操作系统在关闭的端口上接受到TCP SYN段的时候,会发送RST信息包,告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个端口,使端口扫描简单化,浪费了本机CPU时间在DOS上。我们可以使用blackhole来控制对没有socket监听的TCP或者UDP端口接受到连接请求时的行为。 -}U2q T+EoX.o f
  #当设置这个选项后,系统将马上丢弃这个包而不发RST包,连接端将看到"Connection reset by peer." ;x1XuAs:m.F

l#@&?E k,Z0x   net.inet.tcp.blackhole=2
5h k&V}.y-Z@   net.inet.udp.blackhole=1 3P3kx@L!AO

6?c/y"Y ID   4.防火墙规则设置
[ WpZ/^ ^ TF%Z8R lN
  尽管按照上面的叙述已经能够形成一定的防护,但是若要实现安全程度更高的主机系统,就要借助于IPFW这样的包过滤软件,通过设置防火墙规则,严格限制对服务器的访问。 yXuta5Mto ?y2M

@6x }k$EJ   过滤ICMP服务,命令格式: _ bwp5J&P0P[
(E`%xDC\7{8~ bh
  ipfw add pass log icmp from $ip to any [要处理的协议] i~,D?n;fC+_

?$T(vw]R&p   icmp是使用类型规定出站的信息。
"q;z(N*a J)o-Pn&sER   0 echo-reply ping 5cs#yG.X1rOYH
  3 destination unreachable Any TCP/UDP traffic(主机不可到达)
:I;j3|o9Oc   5 redirect routing if not running routing daemon(如果未运行路由守护程序,复位向路由) $[-C q7B q ew P\kv`
  8 echo-request ping (入站信息)
(R NCcR0k5z}/Yw_   11 time-exceeded traceroute (traceroute 超时) l OTg*~3Te${E
0d@7P!P9E.b(K4r7H
  配置文件的例子: 1sc4w3p2[
  ip="你自己的IP"
S;@efFGs'u :X2o,|dR.tu u
  #强制清除所有规则
,G t.@Mdc z#Z`   ipfw -f flush
o7NVmt4G.a1H:ub0Z*k *G7{-CU/F;rnhh
  ipfw add pass log udp from $ip to any F5cZ/t1m&L)et7TJ
  ipfw add pass log icmp from $ip to any icmp 8#接受回答
M[` f0i#r7p3I o4x   ipfw add pass log icmp from not $ip to $ip icmp 0#拒绝请求
a7[(t/{I*`J   ipfw add pass log icmp from not $ip to any icmp 11# traceroute 超时
p[!ZLfklX   ipfw add pass log icmp from not $ip to any icmp 3#目标主机不可到达
Ei)xH Dr o
5S(H8S@ F B4`-EN8r   #SYN、FIN组合的包一般是nmap、queso扫描器使用,所以过滤。
Om/K;}0UF M?   ipfw add deny log tcp from any to any in tcpflags syn,fin
S8?o v7P 8_7P0\"O0l{/\/Q
  #检查通信状态
w!UK"x(FrE   ipfw add check-state
H6Gl$z$_D   ipfw add deny tcp from any to any in established
S%o*A2n@IC   ipfw add allow ip from any to any out keep-state
;gk$aR)f:@$VI
#xJ;k(K6Aph|*O   #允许ident请求 %L(gc0S.R@ ~
  ipfw add allow tcp from any to any 113 keep-state setup
NB#X.oH-B"H i8CH`G N l'o e
  5.日志管理 +M%l*W alS$a
6}1TLCTrT6s?
  (1)启动日志 _a3T{8D
  修改/etc/rc.conf文件。使用 "-s -s"标志启动syslogd,防止打开UDP 514端口;
u.Y eAv$^z.z N;TY)c PZHW
  (2)修改/etc/syslog.conf文件,配置syslogd
%z H:~Hf 8EsM L4N
  #可以将本地日志记录到其他主机loghost上: dtnFu2h5e
  *.*@loghost
%EWQCo4@"Nz*_ *[O.H#C8}o%Rp
  #为FTP增加日志条目: m.U|6qe1WMF
  ftp.* /var/log/ftpd 1I fo3\ A2j'j,X
  #相关命令:touch /var/log/ftpd "r/I/i9q[Ec5QJ

G8q1mG f$Y4\   #记录SSH连接记录
$_)wEF"B2I| ] |   security.*;auth.info /var/log/security #记录连接到SSH的日志信息 LT)nI0K B.N#m:v
  auth.* /var/log/authlog v'S$J?L5l3f

,C}`8w9txvkBW   #使ipfw能够用syslog记录 Ng+E ~.V&t8hy$NN
  !ipfw 5^3Q#h.t,m#R
  *.* /var/log/ipfw.log
vF:G G y Pm2f,b2g0Z#h"p(m
  (3)使用newsyslog压缩日志 ~a5\Aqm LF%[k
  newsyslog程序能够定时压缩日志文件并清除旧的文件是,freebsd默认安装的,它是从crontab启动的:
oY@.K)yON5H
X.?,N hdp+C"T   #grep newsyslog /etc/crontab
'N ~U Qj8s[   0 * * * * root /usr/sbin/newsyslog !t\Uk[rA
;G Kyx8\CL E7q
  可以修改/etc/newsyslog.conf以符合你的需求。通常把文件属性从664变为640,不让一般用户查看系统记录。
WlV'L{ E-I
p7d"im,t9V   /var/log/authlog root.wheel 640 7 100 * Z
/Xg;RW[M} E&@ {   /var/log/ipfw.log root.wheel 640 3 100 * Z qs hv^9l
  #这会在日志文件达到100K时将它压缩并编号,将mode改成640,chown成root.wheel,并删除旧的日志文件。
!UII z C _%v1r,s 9M0Pl\qp
  #相关操作: rJ|x U:[P-T#w\
  #cd /var/log
{H(GU@:w   #chmod g-w,o-r *;chmod a+r wtmp
X}/k]E%il tTK   #把所有文件的组属性改为wheel的。
+O:o+`W!B|mJ@ +z'e)Y,G{Jzu;sr*C
  #防止一般用户读日志配置文件 4dJ.EXR.u7[(J
  #chmod 600 /etc/syslog.conf
Kil"@$yf3Y   #chmod 600 /etc/newsyslog.conf
a.krP4h5_ :?)D&f$~n
  四、用户管理 "I^r E;t:v8pRvv)K

@.mjp|+R 2v{ J-xU!Y,LP.fKM
  1.限制登录条件
&zs9`@:G3`
(f9PJIk0njWE*H#D   (1)把个人用户放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录
@ E+i:elA&i9e _b!W:uK_
  (2)修改/etc/shells文件,增加不能用来登录的shell,如passwd或者nologin,赋予仅需要FTP功能的用户以/usr/bin/passwd的shell 阻止他们使用SHELL命令。
"[9wC5I/ALYm M5yN ;I:P&Y'SF:y
  (3)拒绝直接以root身份登录: /uo%g!nM X |

1Jho a Sk2l   在/etc/ttys文件中,将"secure"标记改为"insecure"标记,使系统在进入单用户模式时会要求root密码。但是这样以来也为恢复root密码制造了障碍——安全和易用再次形成了矛盾的两个对立面。
+Q6zKS'V
aw5\/I%l k   console none unknown off insecure
MvvW3[A D3B3V?W*A_K
  (4)使用 tcp wrapper (/etc/hosts.allow)允许/拒绝访问特定的TCP服务。 ;B0b1d)U u0dTJ b

)mG2z OvhQx   tcp_wrappers 可以在访问者要求服务前先检查/etc/hosts.allow 文件中设定的规则,符合放行规则的才会去启动服务程序,可以达到有条件开放系统服务的目的。
m2oTb0Q*d sx"S [o1o1c{jG#GD2L
  在/etc/host.allow文件中,注释掉"ALL:ALL:allow",去掉其他无关服务访问,增加如下内容:
$s&~1W@!i|!F{ Ks
g!a,~ \y)N   sshd: localhost : allow *e[5O]iBH o#t
  sshd: friendlycomputer : allow
/IN"I4AiD?   sshd: all : deny
+c5];\qv 6N J n9`I.G|[
  另外需要注意的是:
{\:MxUJ W4_8]W &Ots U |^/e/~
  注意规则的先后顺序,因为tcp_wrappers的规则有first match 的特性,最好把放行的规则写在前面,然后在后面加一条全部禁止的规则;
$z| a4h?"?%lcuI
.q/pQ*Eqpd   为避免 DNS 欺骗,规则尽量使用IP表示; 2ohL!Ps R!T-A
m)W6a Lc+a|jT([
  FreeBSD缺省的/etc/hosts.allow中第一条规则是 ALL : ALL : allow,自己的规则一定要放在他前面才有效。 d/f s n3v`?Y"o S

[QI CCE   (5)使用 allowuser/allowgroup SSH配置选项以允许特定的用户和组使用SSH连接。 !Ul+NH {R
*bb b'R;JrJ
  (6)限制登录的用户、组以及登录地方,修改/etc/login.access。 ck+V5iT yQ
p#{"Nj7W.Yl-Ab
  (7)利用login.conf对用户的登录环境和资源许可进行设置。 9@H b}V9D

x(j`&}~ C;U3d   FreeBSD系统使用/etc/login.conf中描述的数据将用户按照登录环境、强制性的资源限制以及记帐管理登分为不同的登录类别,每个用户的登录类别记录在/etc/master.passwd中该用户的设置中。
WNx~0x4JF;V&\
%eb ].T;n ux*o9da   每次修改login.conf后,都要进行更新登录数据库的操作:
:{ o K!|2W,u hl"G1?,X9Nv
  #cap_mkdb /etc/login.conf 3S k+F#aT b[4A

L-W,\3_)y   由于登录类别保存在master.passwd文件中,通常在使用adduser添加用户的时候设置用户的登录类别,如果要进行修改,必须使用vipw来修改/etc/master.passwd文件中的5个域。 q.?4g|8i _0?&e/A:sOC
3?/UCf OD~ kO

C7le ?'M|G/V9}   2.登录环境 UC {BX*nA0g4a
gAA\D)?
o&Krz](i {el7P
  (1)编辑/etc/motd文件,阻止计算机泄露系统信息 4a}}}z2b4J#Wt9M

yOWK:?E,O ~ b   (2)删除版权信息 Shz*mWCAw,^-^+lZ
  #touch /etc/COPYRIGHT
2eTl!N&_.@r
\\7Y H]qu   (3)防止系统自动加入信息,修改/etc/rc.conf d f@9G W1s%[0R
  update_motd="NO"
YN0h/x;N }juLtL{CB
  (4)修改登录提示,编辑/etc/gettytab,找到default:小节,他以下面的文字开头: (H3Tv9I.f!BLN;G2v
  :cb:ce:ck:lc :c-zd3yO!pQ

Z,Edd$mK4?~   小心的修改r:之间的文字来适应自己的需要。 T$D5S?&`)c;O!@}
!V2H`Qhru2ER
  3.crontab的问题 0JDp)Q__g

'ql4|0T/LO2G(cwT   建议 www、nobody、bind等用户不能使用crontab,建立/etc/cron/allow文件把需要使用的用户放进去,如: ,@6z`-]7o:x5K/R i)X:^&T
  #echo root>/var/cron/allow s{1]n3j*H
  #chmod 600 /var/cron/allow 7q4WC3wG [
h+k }4]y{F
  如果不使用at命令,就关闭这个服务,在/etc/crontab文件中注释掉 N*NC;Q5ill1T^l
  # */5 * * * * root /usr/libexec/atrun P^SH@9q
-E#f9Y!pd/RQ
  4.保护文件系统 %wks Fs t6r

W&nkp0yr?S"F [   (1)锁住文件系统
3KQ'oBx}&?3FL/_
"[Xm;RG t*Z;@ ^   A.修改/etc/fstab文件,设置系统启动时自动挂接的文件系统,使用nosuid参数挂接/usr 或 /(目的是/sbin)文件系统,尤其是一般用户可以写入的文件系统,应单独划分分区:
V`jnQOH~
]7lh qG   /home or /usr/home @:l X2z BjS g
  /tmp or /var/tmp
5Q Or$gT RO Lu|Io3br
  /etc/fstab文件内容: 1E&]R-P J1jFsXF
  /dev/sd0s1e /var/tmp ufs rw,nosuid 2 2
\ G$x1sg(},a/yW /E`f$Ho3c
  B.搜寻并去除不用的二进制文件的suid位,(尤其是uucp——setgid)
8qq!_k4U   C.使用chflags设置变量,例如,给日志文件设置sappnd,给系统二进制文件设置schg标志;
7d vE]Df?~[+K
z @5us+`M h   #相关命令: W7A1F:?rr.\N/s
  #找出你所有的可写入目录, [a)|}j `
  #find / -perm -0777 -type d -ls
nly gT'I
wOt(R"w!zcWaGkjS   找出那些程序是suid 或者sgid的命令: .@-Q/GJ q,?

W]nD'],P? Y*m+\   #find / -perm -2000 -ls
xy4?#[G'dZ8E;B   #find / -perm -4000 –ls dhSKX%q"H)r
PjK _Zc*J1^8z
  (2)文件保护,严格限制系统配置文件权限,只对root用户开放读写权利: 4g#e ~SLM5w&K3`EQu
lGTZ Z'fL#j6X9_
  #chflags schg /bin/* v `:A*YuG4T"A A/aI
  #chflags schg /sbin/*
&R6P2nD9f5SC~V*c)Ec
5KN C)hf"q   #chmod 600 /etc/firewall.rules }ztz{)V
  #chmod 600 /etc/crontab 0yP*QI` {/}
  #chmod 600 /etc/newsyslog.conf #@/A!c3pgu
  #chmod 600 /etc/rc.sysctl -c$L:ykp?Q0X5f d
  #chmod 600 /etc/rc.conf 1s?1p ja+k#bGj/P*J5G
  #chmod 600 /etc/syslog.conf (p?%`A%TS1WF LT
  #chmod 600 /etc/sysctl.conf #m3\ H6A@C(d
  #防止一般用户读日志文件 C _6d2x8VDtR'^
  # chmod 640 /var/log/httpd-access.log &Oz$F(PVA

iW{ |+l8mfM-v   (3)可以把不是很有用的程序 chmod 000,如uustat,uucico。如果你从来不碰uucp或是PPP和PPPD的话,你绝不会用到他们。如果不用打印机的话,把lpr lprd也chmod 000了吧。 wvD{t9s~ D

]JRF Ez   5.其他相关 C*EF*h8JA
Xu2p?LPC+Lk&F
  修改计算机相关设置,如BIOS,不允许软盘启动、CDROM启动,即在装载硬盘驱动之前不允许其他媒介启动,设置BIOS密码,保护机器物理安全。 /s,jm}h9j#Vg

D/@ r3Xu4Vb4Y   五、配置SSH &bwYMf0A

i,T"B3moeO +t2_K1T2@+]vCz5f
  修改/etc/ssh/ssh_config文件 J.\ TZa.mZc
}&oG&D7s
  (1)使用protocol 2代替protocol 1,SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol 1。注释掉protocol 2,1 改用下面语句代替:
l/L3x9_,jI};Fd)D n4hpvH b
  protocol 2 Q%F jc1aZ,|C
:D3rP F I.D(S"_
  (2)合理设置最大连接数量, 防止DOS攻击
V#}B!O$NY W+jR|i$H
  MaxStartups 5:50:10 -Qi4isj.R

,RSY8|$a,ZA   (3)禁止远程root和空密码登录,建议关闭X11forwording :Ewcoq3z
4z@%Hl]
  X11Forwarding no _2\bN+C&J
WtnS&S*\
  (4)强烈建议不使用静态密码,而使用DSA 或RSA KEY,修改如下内容可以关闭使用密码认证: .h1A} M&G d3Qc

gbX!W6{:bm   PasswordAuthentication no EcR;K0W*U

f"{:RS } k*@1{c   (5)可以限制组或光是单个用户访问shell 2_${ QV2c+}
{Ak qw'e4sE
  AllowGroups wheel 0y&O6HKbE/|(Y$_
  AllowUsers xundi
4p H-Q9P+Ke[ [ O Q$pedk*Y:o|pd8V
  (6)使用TCP wrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow",增加如下内容:
n9Y/Eyln
m{$dL#e&db0g   sshd:localhost:allow E[1\'G/o1\4DK
  sshd:friendlcomputer:allow iH'hCE3I*~ E2vQ7tD
  sshd:all : deny
P K`g,A8? td*N
z m4d:d3qZ:~h   #相关命令:
qu6s`;G'gU&\   #chsh -s /sbin/nologin user q%fz8W5YI
*j;c h7{0H f
  六、总结和补充 8F#y9F9HS"@!V
S[ G%i*J NyM
  使用最新版本的操作系统;推荐使用STABLE或者最新RELEASE分支。 (F4Q3D"_T0o
  修改系统前,首先备份系统。
5G0BOpJaI9[a   修改/etc/inetd.conf和rc.conf关闭可有可无和不必要的服务。 xC2w~JQ"fxr
  立即禁用telnet,使用SSH代替之——OpenSSH在freebsd安装时即被包括。
/|C h Z9~^k;Y(K   使用SSH2协议中内建的sftp服务代替标准的ftp
/_q"|!\]   建立SSH公钥防止口令传输。
.q+Nc(_1Y1f@   使用包过滤软件类如ipfw或者ipfilter限制服务的获取。
s$Wd3k+n8d _   禁止不需要的帐户
9pg&jFB"x(n X   应用组和用户的概念 O6J3C`#\sM%v}6l
  设置正确的文件权限
zw1ZLZ_Lc;N'a   以chroot环境运行具有潜在危险的程序,例如bind (FP-E!\"C}.o#F)Z
  使用sudo,非严格root级访问
m_Z9z e{ p   限制某些强大命令的访问 3]e2u4sk)M2h5]@6N
  如何检查你的安全性
e1qIU$Q
b:lE;Z#MNS&h   /usr/ports/security/nmap 对自己进行端口扫描,以发现异常服务 %C ~](u^ xm;c9Q
  /usr/ports/security/whisker 对WEB服务器进行审计,防止潜在破坏
X:p+C$j cP2d&w   /usr/ports/security/tripwire-
5Ch9W#\c8}E,W   /usr/ports/security/snort F.wo AUV

Ha8Q3qvM   日常操作
"P.X U*r\@ M"f-C
X7i$^0`f%U   (1)经常查看[url]http://www.freebsd.org/security/index.html[/url]的安全公告; 7r+G3Jy;l}p
  (2)订阅security bugtraq和freebsd官方安全邮件列表了解安全动态; 8`]8Mx.kS
  (3)每天查看系统日志,关于检查系统日志,你可以通过其他工具增加多信息的捕获,如snort可以比较完全的记录信息; yc'r\[ y)F/V
  (4)如果你的硬盘够大,信息处理够快,可以定时使用 netstat -an >> /.../.../netstat.log来记录信息,因为netstat能记录连接信息,所以如有些后门日志不能记录,但netstat却在一定时间里总有连接记录。
~wn-m/Q6`o%t   (5)如果你对文件系统有原始的记录,可以定时使用一些系统完整性检查工具进行检验;
Y:h:Jy d4X/@.{   (6)如果你有防火墙,经常查看防火墙信息。

我心飞翔 发表于 2006-8-25 21:23

多点这样的基础教程更好哟~

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.