如何安全配置用于防火墙的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客户端和服务器端源代码,请访问网站。建议使用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)以进行正确的修改。建议此脚本仅用于新安装的系统。当你能飞的时候就不要放弃飞

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

相关文章:

你感兴趣的文章:

标签云: