当前位置:Linux教程 - Linux - 如何安全配置用于防火墙的Solaris系统

如何安全配置用于防火墙的Solaris系统

--[ 前言 ]----------------------------

防火墙是当今在信息安全领域里技术发展最快的工具。然而,防火墙本身的安全
依赖于其操作系统。本文将教你如何一步一步将Solaris系统,包括SPARC和
x86,配置得最安全。虽然这些操作步骤可以说适用任何环境,但本文仅以
Solaris 2.6系统上的Check Point Firewall-1为例。本文最后提供了一个脚本
的下载链接,该脚本会自动执行这里所提及的大多数增强配置操作,例如包括
TCP Wrappers的配置。


--[ 安装 ]----------------------------

配置系统安全的头一步最好是在系统的开始--操作系统的安全。因为配置的是
防火墙,所以你绝对不能信任任何以前的系统安装和配置,而应该从全新安装开
始,才能真正保证系统安全的完整性。

使你的系统处于单独(或隔离)的网络中。决不要让未受保护的系统连接到其它
网络或互联网中受到可能的攻击。按我个人的经验,一个连接到互联网的新安装
系统可以在15分钟内被扫描和入侵取得完全控制权。你可能需要另一台机器从互
联网获取重要工具和安全补丁等等,然后再从这些机器将其传送到单独的“配置
网络”中。

当把将要作为未来防火墙的机器放置于隔离的网络中时,就可以开始下一步了。
第一步是选择操作系统将要安装的软件包。安装策略是在维持最大化效率时进行
“最小化”安装。我个人推荐“核心”(Core)安装。之所以选择“核心”,是
因为这是绝对的最小化安装,它创建了一个相对更安全的操作系统。对于异常重
视安全性的,我提供了三个关于如何修改核心(Core)安装的checklist。一个
是针对Solaris 2.6和FW-1 4.0,第二个是针对Solaris 2.7和FW-1 4.1,第三个
是针对Solaris 8和FW-1 4.1。第三个checklist目前只是beta版,因为本文发布
时CheckPoint尚未支持Solaris 8。如果需要GUI接口界面,或者需要附加功能,
或者是Solaris新手,“最终用户”(End User)安装或许会适合你。“最终用
户”(End User)包以外的任何其它package,例如“开发者”(Developer),
都会在系统中增加一些没有什么用但却可能存在安全漏洞的软件。此外,应确保
在安装时选择“在线手册”(On-Line Manual Pages)。虽然可能会使系统增加
一点点风险,但它们有时确实特别有用。要了解创建系统最小化安装的更多信
息,请参阅“Solaris Minimization for Security”一文。

在系统安装过程中,会被提示进行硬盘分区。我从来都不明白为什么SUN公司喜
欢创建如此多的分区。这往往会出现小分区过多而经常塞满的情况。我个人通常
喜欢使根分区尽可能地大,并且把所有东西都放在那里。然后,我们确实需要创
建几个分区以保护根分区。因为如果根分区被例如系统日志或电子邮件等数据塞
满的话,就会出现拒绝服务,甚至有可能使系统崩溃。

因此,我总是推荐为/var设置一个单独的分区。/var是用于存放系统所有日志和
电子邮件的地方,将/var分区独立出来,就能够有效地保护根分区被这些数据塞
满。对于许多网络环境,为/var分区设置不少于400MB基本上就足够了。另外还
可以为防火墙日志和/usr也设置单独的分区。如果为/usr创建单独的分区,就可
以将该分区mount为只读,以保护其中的二进制文件不被修改。对于Checkpoint
Firewall 1,缺省时所有的日志都存放在/etc/fw/log(如果是4.0,则为
/var/opt/CKPfw/log)。许多Solaris系统有两个或以上驱动器,例如Ultra 10
或一台x86机器配备两个IDE驱动器。如果第二个硬盘不用于镜像,则可以将其用
于保存防火墙日志的分区。这种设置可以在防火墙日志分区被flood时保护其它
分区。以下是一个分区实例:

/ - 其它任何东西
/var - 400 MB
swap - 256 MB(或两倍的RAM大小)
/etc/fw/log - 第二个硬盘(对于CP FW-1 v3.0x)
/var/opt/CKPfw/log - 第二个硬盘(对于CP FW-1 v4.0x)
/var/opt/CPfw1-41/log - 第二个硬盘(对于CP FW-1 v4.1x)

当系统安装完成并重启后,务必要用SUN的相关网站上下载和安装安全补丁包。
记住,从上面提及的另一台机器获取这些补丁,防火墙机器应该仍处于隔离网络
中。安全补丁对于维持一个安全的防火墙是至关重要的,每星期至少检查一次更
新。BUGTRAQ邮件列表是获取最新安全漏洞信息的来源。


--[ 关闭服务 ]----------------------------

一旦安装完系统的安装包、补丁,重启后,我们现在就可以开始对操作系统进行
安全增强配置了。安全增强配置主要包括关闭服务、增加日志、调整几个文件和
配置TCP Wrappers。首先从关闭服务开始。

缺省情况下,Solaris是一个提供许多有用服务的高性能操作系统。然而,对于
防火墙来说,其中的大多数服务是不需要,且可能是安全风险。首先需要修改
/etc/inetd.conf文件。这个文件定义了由/usr/sbin/inetd超级守护进程需要监
听的服务。缺省情况下,/etc/inetd.conf会启动35个服务,然而最多仅需要两
项:ftp和telnet。其余服务都不是必需的,可以将它们注释(关闭)。这是很
重要的,因为inetd监听的许多服务存在严重的安全威胁,例如rexd。以下命令
列出inetd守护进程会监听的服务,请确认将其中不必要的服务的所在行注释
(行首加""#""号):

#grep -v ""^#"" /etc/inetd.conf

下一步要修改的是/etc/rc2.d和/etc/rc3.d目录下的文件。在这里你能够找到被
init进程执行的启动脚本。其中也有许多是不需要的。要取消在启动过程中执行
一个脚本,只需将对应文件名的起始大写S改为小写s即可。以下脚本是不需要且
对系统会造成安全威胁的:

/etc/rc2.d
S73nfs.client - 用于安装NFS文件系统。
S74autofs - 用于自动安装其它文件系统。
S80lp - 用于提供打印服务
S88sendmail - 电子邮件的SMTP入站服务。取消后系统仍然可以发送邮件(例
如报警)。
S71rpc - portmapper进程,一个非常不安全的服务(如果需要运行CDE,
则此服务必须启动!)
S99dtlogin - CDE守护进程,缺省时启动CDE界面。

/etc/rc3.d
S15nfs.server - 用于共享文件系统。
S76snmpdx - SNMP守护进程

运行任何GUI(CDE或OpenWindows)都不是一个好主意。仅在必须时才运行GUI!
Solaris 2.6缺省时通过S99dtlogin启动脚本启动CDE,在防火墙上应该取消运行
CDE(只要将大写S改为小写s即可)。如果想知道CDE需要多少服务,可以在CDE
运行时输入以下命令:

ps -aef | wc - l

然后关闭S99dtlogin和S71rpc的自动执行后,重启系统,再次输入上面的命令,
就可计算出减少了多少项服务。越少服务在运行,安全性就越好。如果在安装时
选择的是“核心”(Core),就不需要担心什么了,因为GUI不会被安装。


--[ 日志和系统调整 ]----------------------------

在尽可能多地取消服务后,下一步就是配置系统日志了。大多数系统日志存放在
/var/adm下。这里我们需要增加两个附加的日志文件--sulog和loginlog。
/var/adm/sulog记录所有的成功和失败的su命令执行。这样我们就能监视谁曾经
或正在试图获取root根用户权限。/var/adm/loginlog记录连续的失败登录企
图。当一个用户尝试登录系统五次均失败时,将被记录到该文件中。要激活这些
日志功能,只需创建/var/adm/loginlog和/var/adm/sulog文件即可。注意,确
保这两个文件的访问权限为640,因为它们会包含敏感的信息。

下一步配置是系统调整。这包括了多个文件的管理。首先要做的是创建
/etc/issue文件。该ASCII文本文件用于在所有telnet登录时显示的信息。当试
图登录到系统中时,该文件中的警告信息将被显示。

此外还要创建/etc/ftpusers文件。任何被列入该文件的帐号将不能ftp到本系
统。通常用于限制系统帐号,例如root和bin等,禁止这些帐号的FTP会话。创建
该文件的最快捷方法是以下命令:

cat /etc/passwd | cut -f1 -d: > /etc/ftpusers

然后检查并确认需要FTP到该防火墙的所有帐号**不**在/etc/ftpusers文件中。

另外,确保根用户root不能telnet到系统。这强迫用户用其普通帐号登录到系
统,然后再su成为root。这个是系统的缺省设置,但总是要确认在
/etc/default/login文件中console所在行不被注释。

最后,我建议取消掉telnet时的操作系统提示(OS banner),和创建单独的
FTP登录提示。对于telnet,创建/etc/default/telnetd文件并添加以下内容:

BANNER="""" # Eliminates the ""SunOS 5.6"" banner for Telnet

对于ftp,创建/etc/default/ftpd文件并添加以下内容:

BANNER=""WARNING:Authorized use only"" # Warning banner for ftp.


--[ 连接到防火墙 ]----------------------------

通过安全可控的途径连接到防火墙也是非常重要的。通常,我们需要远程访问防
火墙以进行管理或上载文件。这些通讯需要考虑安全性。在这里我们主要讨论两
种方式:ssh和TCP Wrappers。

我个人推荐ssh,因为它使在我们和防火墙之间的通讯都是经过加密的。TCP
Wrappers不能保证网络通讯不被窃听,使用户仍然有可能捕获通过网络传送的明
文口令。如果你担心被其它用户窃听你和防火墙之间的通讯,推荐用ssh替代
telnet/ftp。ssh会话对其所有网络通讯进行加密,使在防火墙上的管理和文件
上载变得更安全。ssh和TCP Wrappers的相似之处是有自己的日志文件功能,并
能限制哪些系统可以创建网络连接。要获取更多关于ssh的信息和下载ssh客户端
和服务器端源代码,请访问http://www.ssh.org网站。建议使用1.2.x版本的
ssh,因为2.x版本有版权限制。对于Windows 95/NT用户,推荐用SecureCRT作为
ssh客户端。

TCP Wrappers,虽然不支持加密,但它提供日志功能和控制何人能访问系统。它
通常用于为inetd中的服务,例如telnet或ftp,添加一层限制。当使用TCP
Wrappers时,系统通过它来监视inetd进程创建的连接,记录所有连接请求,然
后对照一个访问控制列表(ACL)检验该请求。如果该连接是允许的,TCP
Wrappers将此连接请求传递给相应的真正守护进程,例如telnet。如果该连接是
禁止的,则TCP Wrappers会丢弃此连接请求。

大多数人也许会提出为什么防火墙还需要TCP Wrappers的疑问。答案很简单。首
先,当防火墙本向被入侵或崩溃时,TCP Wrappers能够提供第二层的防护。其次
更重要的是,TCP Wrappers能防止防火墙错误配置引起的安全问题。第三,TCP
Wrappers增加了另一层的日志功能,可以用于和其它系统日志对比。

TCP Wrappers可从Wietse Venma的网站得到。再一次重申,不要在防火墙系统上
直接下载和编译TCP Wrappers。我们不推荐在防火墙上安装任何编译器,并且在
完全配置完成前使防火墙始终处于隔离的网络中。下载源代码包后,请先阅读
README文件,以获取关于TCP Wrappers的介绍资料。编译时我个人推荐两个选
项。首先是paranoid参数,它使所有连接都需要进行域名反向查询。其次是非常
简单的高级配置,它使所有的二进制文件均存放在初始位置,这样可方便将来的
补丁程序。

执行TCP Wrappers需要编辑几个文件。首先,编译后的tcpd程序缺省时被安装到
/usr/local/bin目录下。其次,必须配置/etc/inetd.conf文件以对其中的服务
进行限制。第三,必须编辑/etc/syslog.conf文件以记录tcpd的日志(创建
/var/adm/tcpdlog文件)。最后,必须创建访问控制列表文件/etc/hosts.allow
和/etc/hosts.deny。

一旦完成以上几个操作,用kill -HUP重启/usr/bin/inetd进程即可激活TCP
Wrappers。注意要反复检查确保访问控制列表和日志记录配置正确。


--[ 更严格的安全配置 ]----------------------------

以上讨论的内容包括了所有的要点。通过执行以上操作,你就可以显著增强系统
的安全性。然后不幸的是,你的系统并不是100%安全,而且永远也不会是。因
此,这里提供几个更严格的安全配置方法和步骤。

首先是创建whell用户组。wheel用户组包含了允许执行一些功能强大命令(例如
/usr/bin/su)的用户帐号列表。通过限制有权限访问这些命令的用户帐号,就
能够增强系统的安全性。要创建wheel组,用vi编辑文件/etc/group,创建wheel
组并为其增加系统管理员帐号。然后确定重要的系统程序,例如/usr/bin/su。
把这些程序文件的组用户设置为wheel,并只允许程序的属主和组用户执行(注
意要保留必需的suid或guid位)。例如对于/usr/bin/su,使用如下命令:

/usr/bin/chgrp wheel /usr/bin/su
/usr/bin/chmod 4750 /usr/bin/su

* 注释:不要忘记,对于su来说还有一个程序在/sbin目录里。对于2.6,该程序
名为/sbin/su.static,和/usr/bin/su是一样的,只不过是静态编译的(所以文
件较大)。因此还要修改该文件的属性。

然后,我们需要限制.rhosts、.netrc和/etc/hosts.equiv文件的使用。r系列命
令使用这些文件来访问系统。要为这些文件加锁,先创建它们,然后修改其属性
为零即可。这样除了root用户就没有其它用户能创建或修改它们了。
例如:

/usr/bin/touch /.rhosts /.netrc /etc/hosts.equiv
/usr/bin/chmod 0 /.rhosts /.netrc /etc/hosts.equiv

同时,我们还需要设置TCP初始化序列号的生成参数。通过使所有TCP连接的初始
化序列号生成完全随机化,就能够保护系统免遭会话劫持和IP欺骗。设置方法为
在/etc/default/inetinit文件中增加TCP_STRONG_ISS=2一行。缺省情况下,系
统安装时该值为1。

要保护系统免遭可能的缓冲区(或堆栈)溢出攻击,在/etc/system文件中增加
以下内容:

set noexec_user_stack=1
set noexec_user_stack_log=1

下一步,我们对IP模块进行一些修改。增强以下命令到启动脚本中。要了解如何
使用ndd命令对IP模块的安全性调整,请参阅“Network Settings for
Security”一文。

### Set kernel parameters for /dev/ip
ndd -set /dev/ip ip_respond_to_echo_broadcast 0
ndd -set /dev/ip ip_forward_directed_broadcasts 0
ndd -set /dev/ip ip_respond_to_timestamp 0
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
ndd -set /dev/ip ip_forward_src_routed 0
ndd -set /dev/ip ip_ignore_redirect 1

最后一件事情是取消尽可能多的suid root程序。suid root程序通常被攻击,以
获取root权限。由于防火墙系统是仅少数几个帐号专用的,绝大多数的suid程序
可以被删除或取消其suid属性的。要找到所有的suid root程序,执行以下命令:

find / -type f -perm -4000 -exec ls -lL {} ; | tee -a /var/tmp/suid.txt

一旦确定了所有的suid root程序,就可以将其中大多数程序的属性修改设置为
''555'',或者完全地删除它。例如,对于Solaris 2.7系统,我通常取消或删除以
下可执行程序的suid位:


--[ 结论 ]----------------------------

我们在本文中讨论了如何安全配置一台Solaris系统的一些主要步骤。使一个系
统安全的关键是最小化安装,使用TCP Wrappers等软件增加安全防护。此外还有
一些附加步骤,例如sudo(允许系统管理员赋予用户受限制的root特权,同时记
录其操作),tripwire(监视系统文件的改动)和swatch(日志监视和报警工
具)。记住,没有系统是真正100%安全的。然而,通过以上列出的操作步骤,可
以较大幅度地减少安全风险。

要获取更多的关于如何更好保护Solaris系统的资料,请到Sun Micrososystems
公司网站查询。

为了达到更高的安全性要求,我强烈推荐Brad Powell的安全配置脚本Titan。此
外,还有YASSP(Yet Another Security Solaris Package)等。


为了节省时间和避免错误,我编写了一个能进行本文所讨论的所有操作步骤的脚
本程序。该脚本文件将检查Solaris系统和执行以上所有操作,对于所有被修改
的文件都会先进行备份。脚本还会自动配置TCP Wrappers。它检测系统的硬件平
台(Sparc和x86)和版本号(2.5.1、2.6、2.7和2.8)以进行正确的修改。建议
此脚本仅用于新安装的系统。