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

DD 发表于 2006-11-9 09:25

FreeBSD系统安装及安全调整 [转]

[table=98%][tr][td]FreeBSD系统安装及安全调整 B+n.x9qP-rA
'~ GqYlS?~
[size=12px]内容简介:本文将详细介绍一个网站服务器的系统安装、针对安全因素的系统调整。该服务器通过Apache+PHP4+MySQL提供动态网站服务,通过自带的FTPD提供网页上传服务,通过自带的OpenSSH提供管理维护服务。本文将不涉及Apache和MySQL的管理。 M x4i!_4~-g

9Zd NA*xb ` Q^   一、安装操作系统 g{)VUZ CU+{UY

#{/P.b cLR @x1Z$Z   1.选择发行版本 TxSZ.i&O

'_D_5O!^9RIZ   安装生产服务器,应当尽量选择最新的稳定版本。本文将采用FreeBSD 4.8 RELEASE。
mY"Dk'k E
&HBN] Ytt   4.8-RELEASE是成文时候最新的-STABLE版本。5.0-RELEASE和即将推出的5.1-RELEASE都是-CURRENT分支的发行版本,其稳定性和性能可能不如-STABLE,仅适合于开发者和发烧友。对于生产服务器来说,miniinst或disc1就足够了。请下载4.8-RELEASE-i386-mini.iso这个文件,刻录成安装光盘。 cJ!j$Jq HF(b
本文所叙述操作系统的安装就将采用光盘安装方式。 z2}`Eo4`1m

,ZV3q i8V   2.安装要点 -v3S$t4`tmW;H tl7m
-D2fH c+v7bF
  通过安装向导可以很轻松的完成系统安装,这里不加详细叙述,仅仅指出如下两点:
#tm:w1i|6l4}P,G] [ cm1A1a8j0Ie!oGl
  (1)硬盘分区的注意事项: _7{PDV? A3J6t2x:i
&Q@A@[#]L g
  分区的大小根据应用的实际情况而异,特别指出的是,网站文件、数据库文件、日志文件、临时文件应当单独分区存储,以防止攻击者滥用磁盘空间导致系统崩溃。下面是一块容量为18G SCSI硬盘的分区例子: &|d @7b0~ {/I1`
N!Z.e6EVa"SMx
分区 大小 备注 #K|Q~q"eP'`*ZI)_
/ 128M
+Y"[s\!nZ t)gb SWAP 1008M 至少是内存数量的2倍(本系统采用512M内存)
gdg} qP8g /tmp 256M *z ] d6b5LaG*R6N
/usr 3G 系统和Apache等应用软件、源码存储于这个分区 C OW q]]7xa
/usr/home 7G 网站文件存储于此
t,g Y9{4P7Gf /var 3G 数据库将使用这个分区
H9t7Z`/y9hXB /var/log 2811M 日志文件单独分区 Ik};p[2IMW

;EQH'_Jm x+D   (2)选择要安装的文件(distributions): ,C/[\!M IJA/E
U7s5TzT
  只安装必要的基本系统即可,绝对不要安装全部软件。在custom项目中,选取如下安装内容: 5x.]4\%US
A)k#I s8PQexc4L
  bin,基本的FreeBSD系统文件;
2n2o4lw"U@0Zm5w.Oi b5w   man,系统帮助文件;
y(ap])u'OWk   src—》sys,操作系统核心源码,定制内核时候将使用到。 pN"d2y4L/h

PaG!b"i6pF   接下来,安装程序询问是否安装PORTS,为了方便安装软件,我们选择安装。但在高安全要求的系统上,最好不要使用ports或者packages,尽量自己下载源代码在本地编译,手动安装。 z Q#EN3p0a!W
Hios)q.X
  提示:有时,安全和易用是相互矛盾的。
&quX6y ]C C QWzoE
E I-o0o\0X5~.A7D   然后是拷贝文件,直至安装完毕。 C1LJt R9h f
N2x%e J C
  3.安装后的初步设置
!v"Z&B_?3Uw
9J*E I7t+p   安装完之后,建议您安装cvsup-without-gui(从bento.freebsd.org可以下在最新版本),并同步代码。对系统进行初步设置:
1KX&Q c$b9_$Zq 0Mf(h6wC,}6A8e
  增加用户帐号; !U{)}Z/J
  设置网络参数,将主机连接到网络上(全部设置完成后移动到Internet); 0zb:K2c8b
  配置网络服务,打开FTP、SSH服务,后续的配置工作都将远程进行。 R@atC"_P`0dGM

nw'|'rJ"ze#L :U]/_6\8_5BG
  二、定制系统内核 ian&k*nr0waH

)Sy2Cy a:U-D#?   定制系统内核内容: 7F,VMA1rO ZD4A2c
)a;S@F7b'k8O#d7c%]t
  支持特定硬件,如SMP、RAID、大容量内存; 3CEZ~m:h:Q1w
  删除多余硬件驱动支持; +A&b U.M(n?~,t5w%N
  增强系统安全性,增加IP过滤防火墙支持。
2i xzxs:i
S r"`-LmU   编辑内核设置文件,为增强安全特性,增添或修改如下内容:
9B+lHm h2Q\ '{s jb(w\
  #启用ipfw过滤 z-by K*}'p}Y
  options IPFIREWALL #打开IPFW过滤功能 lpnf Q|+eM
  options IPFIREWALL_VERBOSE #设置过滤日志记录
vU&vRe{   options IPFIREWALL_VERBOSE_LIMIT=100 #设置日志记录限制 vNA4S1I&q BP
  options IPFIREWALL_DEFAULT_TO_ACCEPT #设置缺省行为
Ym[RfF   options NOLKM#关闭LKM
LK"C8J&@   options TCP_DROP_SYNFIN #丢弃SYNFIN包,需要在rc.conf中打开
S3d ceS*MQ.[
V"PI%y.|P~h2i   #关于虚拟终端
0}-Q}Pa0w/Y+F   #取消历史记录,在登出系统后刷新虚拟终端缓冲中的内容
0Q0p\m7a6S4T   SC_NO_HISTORY
-F3m {-a%a[{   #取消debug键 k(S7H,j_3l6H[|
  SC_DISABLE_DDBKEY
;t{6u8H!A*m"]   #取消ctl+alt+del键
p*B1]]&{o:~ BW   SC_DISABLE_REBOOT
De'kR&JO'AG.] G
*Ae!\d[]t g3i9a;I;Sq
  重新编译系统内核并使之生效。 ;|~_!Hp J4V%K

,lYq#V[:S7B&mo-Z   三、系统配置
a[6oa,jT-U 0[5XT*H(d(B
  1.修改/etc/inetd.conf文件内容,配置inetd服务 Ci9r#M4l

iIdx8ky2~O8U5\   (1)telnet服务
+Fh f\B%{7N
oWpl1x8Z   我们将使用SSH远程管理这台服务器,因此禁止telnet服务:在行前加"#"标记。
KW2C7k3O6\ s-T BH3p+LIQM+I
  (2)FTP服务
JC mrERka
m NaNx2u   使用系统自带的FTP服务,并作如下设置: s?7n;_ C\ }
[3k#k w#OAU MtF
  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -h 2\0W9]6yz,Pb.Q ke
qC;|[V&\4NQ
  -l 参数,记录每个成功或者失败的FTP登录尝试;
8ScyG^0]e   -l -l 参数,所有的下载、上传、删除更动作和文件名都会被记录下来(设置syslog.conf) GlW#VU dio#R
  -h参数,将禁止主机相关信息的输出,例如ftpd版本、主机名等;
\+lenV   -P参数,指定FTPD进程监听端口号
eAZkNV7Z C b1{ \ C-aW;x x
  FTP服务其他安全方面的设置: d4] v6`3p.\)J
5o\"T bz Z2f
  把网站编辑帐号放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录,防止浏览其他目录。 V um+ux\
  编辑/etc/hosts.allow 文件,限制对FTPD的访问。
0IdAx"Ai%VE'v   可以编辑/etc/ftpwelcome,防止泄露系统信息。 E%[Up)L y2L7V

7O W4G3YC._$t N]l*Z   2.修改/etc/rc.conf文件,配置系统初始参数
3cbLH'R2r#O5^H9O
y u,b8CAr Gx8C   #配置开机器后自动启动或关闭的守护进程
%[ j+|wlf.cIk   #可以关闭inetd,使用SSH代替了telnet服务,使用其他的FTP服务程序代替系统的ftpd。
2@3\e/]'A   inetd_enable="NO" i-o(Y?/da(`

d-?*q'Z P"ox   #如果决定使用inetd则启动inetd的日志选项,并提高一个服务每分钟启动的上限数目(默认是256,建议提高到1024),防止DoS攻击;
C8jyG{(hJ
4\hpu9d   inetd_enable="YES" Y[w)I!y`V
  inetd_flags="-l -R 1024" #Eh wLB`D
K4`g#V,m?
  #打开SSHD TO$_VT8~
  sshd_enable="YES"
*L1],L.W f'c~'oS
/SX K$\yJJ   #禁止syslogd记录其他主机日志(关闭端口514)
V u3?'x5AN-r!w   syslogd_enable="YES" .O5f2D;{:d,w,p jlH
  syslogd_flags="-s -s"
)^ Wic1ww yt(eT'jd
  #关闭不必要的服务。本服务器没有NFS、NIS登需要,可以关闭portmap (关闭端口111) $Xh4O Gfh)jY+P S.aH
  portmap_enable="NO"
2R$w#{t lsr)h   nfs_server_enable="NO" zRw,x8yf P#tM{
  nfs_client_enable="NO" )~+l z#~,rt ~1t*C v6T
'mx7qc'JE
  #使sendmail只监听localhost,允许邮件客户程序发送邮件 ~ ^6jy-mr
  sendmail_enable="NO"
\m4a6yf\C y&t d   #设置为"NONE",将彻底关闭25端口
]8Iq+v-O;Y,T #z#^@OL
  #设置内核安全级别(Securelevels) Aq:RTq!N2z
  #内核安全级别从-1到3,-1和0级别是非安全级别。 F y\:wfu9e!e^._1W
  #系统在多用户模式下,安全级别只能提升不能降低。
Bs5M oiY J$Y"n J IZ   #Securelevel -1,永久不安全模式 e \1W y.T0FK#p"L
  #Securelevel 0,不安全模式
z ~%Z,O;QD   #Securelevel 1,安全模式 yI5zuKi
  #Securelevel 2,高安全模式 g1k$vM(E%p E)F(S
  kern_securelevel_enable="YES"
5j`_h ]tC:P_]   kern_securelevel="2" 5ZiS3f9Ou-_2Yd3[r

^.?;KVk.q   #计算机启动时候发现文件系统失效,将以-y参数运行fsck
b:`'[ tS!e/|+kl
,@:O9cTkj8Wq GNJ f   fsck_y_enable="YES"
o?@d{4oG%K j;d \&["Z/~\
  #打开磁盘配额 ;wlI~1Ia z
  enable_quotas="YES"
,c ]0@l/dG aWt]   check_quotas="YES"
/vcJA$D O Z&N1dF8B yN v2D
  #在系统启动时清空/tmp 2dK2O$c)u/J+C
  clear_tmp_enable="YES" ykg%C_

v{M9N#}Z\,I   #防止系统自动加入信息到motd $iB/E8A/Sb'u
  update_motd="NO" %r&A+M&`qorx

#|&bL.W^8T(m P(X4O   #启动防火墙设置 %Cl L?\*M
  firewall_enable="YES"
&ilK$]EN   firewall_logging="YES" -fL C luZe&_\
  firewall_script="/etc/firewall.rules"
s9LeTr&GD8Ja)b Y%Y8Y+n5Z/Gn2U
  #丢弃SYNFIN信息包。缺省时设置为”NO”,当设置为”YES”的时候,系统内核将忽略同时设置了syn和fin位的TCP桢(需要内核的支持:options tcp_drop_synfin) !eO'^z;WQRbF7x
  tcp_drop_synfin="YES" C}/BG?]xu%B

(L:fqk Mp   #丢弃ICMP重定向。可以防止DOS攻击或劫持进程(hijack sessions)
1D RB#J ?+U   icmp_drop_redirect="YES" 8R,C,Y _^Lk
  icmp_log_redirect="YES" #记录ICMP重定向 t&d B*E:T
  #在CISCO路由器上关闭重定向:no ip send-redirects
5a gdFR1ZXw \
F)L-C _'`*b&l)~X   log_in_vain="YES" #记录每一个到关闭端口的连接企图。 jD[l2dxM MGq
  accounting_enable="YES" #打开系统审计功能
I7V|;Y,m
Qz)PU+AH.\'DA X}/b#|H&}xi
  3.修改/etc/sysctl.conf文件,调整IP堆栈 +B{} J6S"c.Z

&j!S&NV"u 7a Caz4_
  #关闭对广播类型的响应,过滤ICMP响应后,服务器无法ping 通,可以提高部分安全性能
^c$b"mfzMO\9g net.inet.icmp.bmcastecho=0
:e8]D)rP#l   #对UDP包的校验和进行计算,防止不正确的UDP包的攻击
B%den Fy"|5ux   net.inet.udp.checksum=1
M o{%tmY`$~ v
4q)?$S:UIk4N   #在默认情况下,操作系统在关闭的端口上接受到TCP SYN段的时候,会发送RST信息包,告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个端口,使端口扫描简单化,浪费了本机CPU时间在DOS上。我们可以使用blackhole来控制对没有socket监听的TCP或者UDP端口接受到连接请求时的行为。 ,m1qz6~(OE c
  #当设置这个选项后,系统将马上丢弃这个包而不发RST包,连接端将看到"Connection reset by peer."
w;f|ri:rc6r )Q&m&G n;R}K`
  net.inet.tcp.blackhole=2
.B^S&Yz3\   net.inet.udp.blackhole=1
sc`n-O1\{J4x%?
Q6Hz+a^7d8W   4.防火墙规则设置
VA`1e|"P
Y)bL%u%t3b   尽管按照上面的叙述已经能够形成一定的防护,但是若要实现安全程度更高的主机系统,就要借助于IPFW这样的包过滤软件,通过设置防火墙规则,严格限制对服务器的访问。 -~5UK ]E-Gj
P1s g.^Rx$j,YI
  过滤ICMP服务,命令格式:
b3U;p+g:d
k^&_%X"JE   ipfw add pass log icmp from $ip to any [要处理的协议]
s'T'D0|1g J+OR 9uf N;G3?rm
  icmp是使用类型规定出站的信息。 &G+X)y&Kd
  0 echo-reply ping .Z9ssg(]d
  3 destination unreachable Any TCP/UDP traffic(主机不可到达)
j%`J#l%f|/[   5 redirect routing if not running routing daemon(如果未运行路由守护程序,复位向路由) s1v PR[}+G
  8 echo-request ping (入站信息) 8J(Vpb*G P}x7mKI
  11 time-exceeded traceroute (traceroute 超时) %F4zf[ ]|pUk:}
)b^5\'_,\PY6o/Ic5A
  配置文件的例子:
"N2O&Whk   ip="你自己的IP" 4~OlRO @'_
iX,O$w!j-ZN
  #强制清除所有规则
_iy$c.f#f   ipfw -f flush
({|9S/hL4? b
(yK uLI~?   ipfw add pass log udp from $ip to any
nG3zo|!`1{   ipfw add pass log icmp from $ip to any icmp 8#接受回答
6C7B z+Fd"nZ   ipfw add pass log icmp from not $ip to $ip icmp 0#拒绝请求
W&v)f~Zn   ipfw add pass log icmp from not $ip to any icmp 11# traceroute 超时
!O5Fn |+]   ipfw add pass log icmp from not $ip to any icmp 3#目标主机不可到达 *?9qe:ow)?-N$r
z |#I(i6c5K4B
  #SYN、FIN组合的包一般是nmap、queso扫描器使用,所以过滤。
fg}kUv   ipfw add deny log tcp from any to any in tcpflags syn,fin
f'd\2D#V.a:L"U
!S4pw]!Z'O_)_ |l   #检查通信状态 -R&T l x7ad Zu
  ipfw add check-state
)p&G.Li[${   ipfw add deny tcp from any to any in established %e'[yr.K/]'Ik
  ipfw add allow ip from any to any out keep-state 6F:q0q Pm!V,[I

K0J5VxW(JT5h   #允许ident请求
vgQV^2Bk   ipfw add allow tcp from any to any 113 keep-state setup
&b vbJ;yr4dc
:o)_KR0iq~!K   5.日志管理
e gai3@7k9[3ur
(tGGGp   (1)启动日志
t,D-|K;mv(u6d   修改/etc/rc.conf文件。使用 "-s -s"标志启动syslogd,防止打开UDP 514端口; 4txu"G5a3o&N
v m6?|Xx-FK
  (2)修改/etc/syslog.conf文件,配置syslogd
btoR(I_ N H7?jO"nOS
  #可以将本地日志记录到其他主机loghost上:
$V,d,Y&i8X [   *.*@loghost `1R"J d:H?%laA

(Uk#^'Vz5b(m   #为FTP增加日志条目:
i]&U-h1X+H I   ftp.* /var/log/ftpd (d*@h"h#qS!U
  #相关命令:touch /var/log/ftpd E9d#a#C!r
wC(LC;vZ(]+Z#g
  #记录SSH连接记录 &vk(k#X }$n(C M d
  security.*;auth.info /var/log/security #记录连接到SSH的日志信息 W kT^f*BZ
  auth.* /var/log/authlog Q0J;`x@

5VK@{Ee,Q,w7e   #使ipfw能够用syslog记录 c'l5Q$^)f!q
  !ipfw
"X'I4C {X$dj   *.* /var/log/ipfw.log @%d(`!L ~#U m9M

:OG+y4tWCr   (3)使用newsyslog压缩日志
wfhy]   newsyslog程序能够定时压缩日志文件并清除旧的文件是,freebsd默认安装的,它是从crontab启动的: -cw$_HZ#v9J/\

t&rnoD!^!zR   #grep newsyslog /etc/crontab
%Dmp,_W   0 * * * * root /usr/sbin/newsyslog
\pm1a&ZK'X#]0pU)l c`3|K G
  可以修改/etc/newsyslog.conf以符合你的需求。通常把文件属性从664变为640,不让一般用户查看系统记录。
5]3^+zT/_qk!Q7IL %a5hv0tx?b
  /var/log/authlog root.wheel 640 7 100 * Z
Y.iA&yQj5D*@,F4n9o   /var/log/ipfw.log root.wheel 640 3 100 * Z
6KF V1bF4G   #这会在日志文件达到100K时将它压缩并编号,将mode改成640,chown成root.wheel,并删除旧的日志文件。
AC lD9p`Lj
;w3[\%A'R;R:P;l;M   #相关操作:
ykp9u SFe/A   #cd /var/log %t-la%pQ:K$sl
  #chmod g-w,o-r *;chmod a+r wtmp
up.p J)i'[u   #把所有文件的组属性改为wheel的。 ;G N"V v];A @D b

A Q3Erda S   #防止一般用户读日志配置文件 d}l R:I&vWP3U
  #chmod 600 /etc/syslog.conf
AgW}b   #chmod 600 /etc/newsyslog.conf 8Tj}cB ^
|g:I;ZX
  四、用户管理 'r tcKJ$Vn
W6q9V};~

"U^ Zfg   1.限制登录条件
(S;N(S/Z&E )DS&C3Z7} fY
  (1)把个人用户放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录
0E7c7X5s^R:F6y3L4X ;Q%P+T.b |z mS_`fW
  (2)修改/etc/shells文件,增加不能用来登录的shell,如passwd或者nologin,赋予仅需要FTP功能的用户以/usr/bin/passwd的shell 阻止他们使用SHELL命令。
0p-x9gev`gL8C
5QsI1U+o   (3)拒绝直接以root身份登录:
2q `oc ot
i?9QZG1r/~   在/etc/ttys文件中,将"secure"标记改为"insecure"标记,使系统在进入单用户模式时会要求root密码。但是这样以来也为恢复root密码制造了障碍——安全和易用再次形成了矛盾的两个对立面。
9lk ?0\x3Qf#b F0o9l7LZs3f
  console none unknown off insecure j@/_b m,eloV
0cF ja"s ?7f`
  (4)使用 tcp wrapper (/etc/hosts.allow)允许/拒绝访问特定的TCP服务。 Y s!x d;dh

/I0n m'D Lj-YU   tcp_wrappers 可以在访问者要求服务前先检查/etc/hosts.allow 文件中设定的规则,符合放行规则的才会去启动服务程序,可以达到有条件开放系统服务的目的。
7f*D9J.FkI
h0Z ~KZ|.A   在/etc/host.allow文件中,注释掉"ALL:ALL:allow",去掉其他无关服务访问,增加如下内容: :k4w`vq RG4Ht

G%eag ] C   sshd: localhost : allow /KG#qyJM%i/}6D
  sshd: friendlycomputer : allow
5g/Zu.^e!h,r t   sshd: all : deny
:T g%f9h$]5P$NB 2?(@f)|#ow K1Yp
  另外需要注意的是: g |g6?^5a

@)rm3\O[AKwJ   注意规则的先后顺序,因为tcp_wrappers的规则有first match 的特性,最好把放行的规则写在前面,然后在后面加一条全部禁止的规则;
W&X@&J4i-q5n Ttd^/pl8G-\C'I-D
  为避免 DNS 欺骗,规则尽量使用IP表示; 9bp7Vc/?-g:\_j
|4]*o4?Ya
  FreeBSD缺省的/etc/hosts.allow中第一条规则是 ALL : ALL : allow,自己的规则一定要放在他前面才有效。 rvL2z?8}*k

`S!{eO,u   (5)使用 allowuser/allowgroup SSH配置选项以允许特定的用户和组使用SSH连接。 !Az0fa7nq!h#vEs[
?!NGU+{$S*o
  (6)限制登录的用户、组以及登录地方,修改/etc/login.access。 ~*f9adwm8C1A$Fo
"sm[{&Jjp d
  (7)利用login.conf对用户的登录环境和资源许可进行设置。 O4IS*]4G5b;D,K-{.n

}3W,LB#k.uQ   FreeBSD系统使用/etc/login.conf中描述的数据将用户按照登录环境、强制性的资源限制以及记帐管理登分为不同的登录类别,每个用户的登录类别记录在/etc/master.passwd中该用户的设置中。 Z4j;E*cOv%\mo

oU^ayb9X6h   每次修改login.conf后,都要进行更新登录数据库的操作: #J/QJ&q;A%ts!g8Q

3HF.i3F{Vo   #cap_mkdb /etc/login.conf
!H ^_RG.R'w E
E+A;c+\Vb   由于登录类别保存在master.passwd文件中,通常在使用adduser添加用户的时候设置用户的登录类别,如果要进行修改,必须使用vipw来修改/etc/master.passwd文件中的5个域。 ^ e].[S k

M xO3j#YC5g8G.U
&fGE z q g1KCKpA   2.登录环境
k C'[7c,y?KJ }%M%O7or$N0B h

R ].|e^:M$R8~   (1)编辑/etc/motd文件,阻止计算机泄露系统信息 g}Z:[ruV
*m&I/dzwvF&Y
  (2)删除版权信息
o al6`,Y   #touch /etc/COPYRIGHT
0?0o jBRpn3n
%HWWUK*a;Z]q0VJ,_   (3)防止系统自动加入信息,修改/etc/rc.conf H V'| d!u7n+^
  update_motd="NO"
_jY;n:w5@7O)T
d[ l zPCW*M   (4)修改登录提示,编辑/etc/gettytab,找到default:小节,他以下面的文字开头: }6U,qy}
  :cb:ce:ck:lc
5lgh$i/QJ6W (R8~%Tj?&z&V3E
  小心的修改r:之间的文字来适应自己的需要。 p2~+Xs9x|P)n
5jC]s'S,[0n'i
  3.crontab的问题
&TsVNQ1b }6J7NPg'^s`N
  建议 www、nobody、bind等用户不能使用crontab,建立/etc/cron/allow文件把需要使用的用户放进去,如: i U Q-b`:Y6c0V
  #echo root>/var/cron/allow @k6K"Xw!g;Tk4v1C
  #chmod 600 /var/cron/allow CRply
9POqY;IAt!s\;O
  如果不使用at命令,就关闭这个服务,在/etc/crontab文件中注释掉 ~l+` BLlA
  # */5 * * * * root /usr/libexec/atrun
.YDZI-P
HME5IZ{)r*B^   4.保护文件系统
}xcC2{(X rvF9I(\C
  (1)锁住文件系统
+|k6u1g:u)jtG4w YP
2Z1IIc6E']l   A.修改/etc/fstab文件,设置系统启动时自动挂接的文件系统,使用nosuid参数挂接/usr 或 /(目的是/sbin)文件系统,尤其是一般用户可以写入的文件系统,应单独划分分区:
"Qdm'O\i4g$OJ2O:s
1aw4P#WBPC4a   /home or /usr/home )A/z4FD4N!L){
  /tmp or /var/tmp
y5ccU+e #R_iWG
  /etc/fstab文件内容:
+@'B r4ly$ZRsO   /dev/sd0s1e /var/tmp ufs rw,nosuid 2 2
t(zc2_Pd3h6Je+u
dB"~F iJ   B.搜寻并去除不用的二进制文件的suid位,(尤其是uucp——setgid) 5VH p S6G
  C.使用chflags设置变量,例如,给日志文件设置sappnd,给系统二进制文件设置schg标志;
]+oW^(_E/b ?@1P*J:dyA/S(Y WZ&g
  #相关命令:
;?.VX0I LH D+K   #找出你所有的可写入目录, j+O!^/?xOOI
  #find / -perm -0777 -type d -ls
(w@-?;DQgo 7` `$]3dM
  找出那些程序是suid 或者sgid的命令: :CaU!u,v#k&R8D%u

+xQ0b]?+M-p1M:A   #find / -perm -2000 -ls /jz/r4YH.cj_'P
  #find / -perm -4000 –ls :d+r$hg$~kL;h

UB s{W.Za[P F   (2)文件保护,严格限制系统配置文件权限,只对root用户开放读写权利:
&p6yR'W?3p {]#K#RQ
U\!w!L%}0r B Z4|   #chflags schg /bin/*
Pj2XC+HE Y \   #chflags schg /sbin/*
c,pMv5V(Q G/|n/h3DE5S
  #chmod 600 /etc/firewall.rules cqncW/w
  #chmod 600 /etc/crontab
8g9W0kMP;pi   #chmod 600 /etc/newsyslog.conf
nn2iRzVtE8Ll   #chmod 600 /etc/rc.sysctl v"L&CY f)n+c3|+z
  #chmod 600 /etc/rc.conf
+j*\Oa c'yu;I zn6iB   #chmod 600 /etc/syslog.conf
fhJ8^1y\)KGr+s W   #chmod 600 /etc/sysctl.conf 3f|?B&Y"_
  #防止一般用户读日志文件 5bMj MY,T
  # chmod 640 /var/log/httpd-access.log n|TEHe0]

rK2yCQ3p{%S   (3)可以把不是很有用的程序 chmod 000,如uustat,uucico。如果你从来不碰uucp或是PPP和PPPD的话,你绝不会用到他们。如果不用打印机的话,把lpr lprd也chmod 000了吧。 %VJ0mc)[0u#O

)o-w6MVV9Ro-Q!o E   5.其他相关 !]UE.R6r-y v@5ZR#T

s T^#T?i}   修改计算机相关设置,如BIOS,不允许软盘启动、CDROM启动,即在装载硬盘驱动之前不允许其他媒介启动,设置BIOS密码,保护机器物理安全。 0u(c&nJN m'Q

,qK#Bd w8O   五、配置SSH
4B+w]-@D
#E!m xcmz PF"b@*C !x)A&h qg#S sCCi
  修改/etc/ssh/ssh_config文件
e{ O2B.X-q5t@ Gr
7YzwKVb#z L-E-n   (1)使用protocol 2代替protocol 1,SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol 1。注释掉protocol 2,1 改用下面语句代替: xh5WET3D5S
:p${`#\k1m6e
  protocol 2 Z T0m1j4m}&j4l
#I ?)Z)Xah
  (2)合理设置最大连接数量, 防止DOS攻击
.R'Zk5lJ8] xb.W1BF-BMl
  MaxStartups 5:50:10 _a mxNe S H!O

;p%{lZu5~x(i n%]4X'_   (3)禁止远程root和空密码登录,建议关闭X11forwording "JkMI p$w(?z
C5f!r3D!i
  X11Forwarding no
AI f8e0wf/\ X7D @l;QK R&Eh!u3i2O+D`%~
  (4)强烈建议不使用静态密码,而使用DSA 或RSA KEY,修改如下内容可以关闭使用密码认证:
1?7e.j"e5|0E z
!_6p.]J(T'L/zs   PasswordAuthentication no
$vU4^fy9g N XZ ?EEhu"l'S6N,m
  (5)可以限制组或光是单个用户访问shell (]4z(w&?gu[*oh
6oF |lJ
  AllowGroups wheel
A|7E.z)M1k]4A   AllowUsers xundi !C&UClI

L/R4j'|DzbtZTP   (6)使用TCP wrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow",增加如下内容: k`C Zo,^Y
S:M Z9K ?wt$Q%Ko
  sshd:localhost:allow [*CQ }.ia
  sshd:friendlcomputer:allow
+^!ZDyX,j m   sshd:all : deny
2i+?t3~-Q t8^#|GPV w !joM]~
  #相关命令:
t[nJ.p\]N   #chsh -s /sbin/nologin user
VA%?@$~L*a1o j4Pd0a
nL~8BB^   六、总结和补充
D1jUk;zcT+f!A[,m
xb)ff4c-u   使用最新版本的操作系统;推荐使用STABLE或者最新RELEASE分支。
qP!\-Y S:d3P   修改系统前,首先备份系统。
#w6}@tw0YXl   修改/etc/inetd.conf和rc.conf关闭可有可无和不必要的服务。
[:XY4\z-M|   立即禁用telnet,使用SSH代替之——OpenSSH在freebsd安装时即被包括。 U?Z([!s;Ef
  使用SSH2协议中内建的sftp服务代替标准的ftp 7EQbXE!o!U
  建立SSH公钥防止口令传输。
Rw.A u9GMY"e3W)N   使用包过滤软件类如ipfw或者ipfilter限制服务的获取。
.uu8x0o_-mN D   禁止不需要的帐户 @4T`Y$Y8_Z3I
  应用组和用户的概念
ah(RC;yyV/K!e   设置正确的文件权限 :p6zn b(z#h a-N(@
  以chroot环境运行具有潜在危险的程序,例如bind
1PRW:[jZ(E   使用sudo,非严格root级访问
+j)jR1G n-y]sF   限制某些强大命令的访问
9L0Nrt+jA   如何检查你的安全性
s"g#I ^B#kR ENTZ)y!_C~2c&z
  /usr/ports/security/nmap 对自己进行端口扫描,以发现异常服务 &N IBnd gM
  /usr/ports/security/whisker 对WEB服务器进行审计,防止潜在破坏 |4@8AQQ
  /usr/ports/security/tripwire- p/tWm8j)O
  /usr/ports/security/snort ,~%x(P:av;dr

![hQK]   日常操作
/g#?r2GN8l!G+XW
LE+ZUH `%?+]m   (1)经常查看[url=http://www.freebsd.org/security/index.html][color=#003366]http://www.freebsd.org/security/index.html[/color][/url]的安全公告; !g5j6XTAV
  (2)订阅security bugtraq和freebsd官方安全邮件列表了解安全动态;
5eE5n"t;LbU%L   (3)每天查看系统日志,关于检查系统日志,你可以通过其他工具增加多信息的捕获,如snort可以比较完全的记录信息;
r DY'l8p M&ws   (4)如果你的硬盘够大,信息处理够快,可以定时使用 netstat -an >> /.../.../netstat.log来记录信息,因为netstat能记录连接信息,所以如有些后门日志不能记录,但netstat却在一定时间里总有连接记录。
9jw.Qm5`2U$k   (5)如果你对文件系统有原始的记录,可以定时使用一些系统完整性检查工具进行检验;
6W4Tf$b5VeI   (6)如果你有防火墙,经常查看防火墙信息。[/size][/td][/tr][/table]

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.