Solaris 9的安全加固,说难不难,说简单也不简单。很多人拿到一台新系统,装完就扔在那儿了,结果漏洞百出。其实只要按着下面这些步骤走一遍,系统安全性就能上一个台阶。这里整理了一套实操流程,从安装到内核调整,再到工具部署,基本覆盖了主要的安全面。
1. 选择合适的安装
这一步看似简单,但很多人却走错了。原则只有一个:只装你真正需要的软件包。多一个包就多一个攻击面,不必要的组件完全没必要安装。比如本例基于Solaris 9,那么在定制安装时就尽量精简。
2. 安装系统补丁
系统装好后第一件事,就是去 sunsolve.sun.com 下载最新补丁。把 9_Recommended.zip 解压后,执行 ./install_cluster 即可完成补丁安装。这一步没什么可偷懒的,补丁就是系统安全的基础。
3. 最小化启动服务
这是很多管理员容易忽略的一步。系统默认会启动一堆你用不上的服务,这些服务就是潜在的安全风险。需要通过调整 /etc/rc*.d 目录下的启动脚本来关闭不必要的服务。基本思路是:把不需要的服务对应的脚本名前加一个下划线,比如 mv S47pppd _S47pppd,这样系统启动时就不会运行这个脚本了。
为了方便查阅,这里把Solaris 9的主要启动脚本及其“留”或“禁”的理由整理了一下,按照 /etc/rc2.d 和 /etc/rc3.d 两条线来走。
/etc/rc2.d 下的服务
- S01MOUNTFSYS:挂载本地文件系统,绝对不能禁用。
- S05RMTMPFILES:清理临时文件,需要启动。
- S20sysetup:系统设置,需要启动。
- S21perf:全部被注释掉了(...),不需要动。
- S30sysid.net:网络设置,需要启动。
- S40llc2:LLC2协议支持,需要启动。
- S42ncakmod:网络缓存加速内核模块,需要启动。
- S47pppd:ppp支持。一般不需要,执行
mv S47pppd _S47pppd禁用。 - S69inet:TCP/IP配置,需要启动。
- S70sckm:Sun Fire 15000的密钥管理守护进程,一般不需要,禁用。
- S70uucp:Unix对Unix复制,不需要,禁用。
- S71ldap.client:启动LDAP客户端,不需要,禁用。
- S71rpc:启动rpcbind服务(RPC Portmap服务)。如果需要CDE,这个进程是必需的,需要启动。
- S71sysid.sys:配置系统参数,需要启动。
- S72autoinstall:自动安装脚本,不需要,禁用。
- S72directory:目录服务,不需要,禁用。
- S72inetsvc:启动inet server,包含named/nis。如果不需要命名和NIS服务,可以禁用。
- S72slpd:打印服务,不需要,禁用。
- S73cachefs.daemon:NFS缓存服务,不需要,禁用。
- S73mpsadm:集群服务管理进程?不需要,禁用。
- S73nfs.client:NFS客户端,不需要,禁用。
- S74autofs:自动挂载/卸载文件系统。没有使用NFS时,这个进程反而会对管理造成负面影响,不需要,禁用。
- S74syslog:系统日志服务,必须启动。
- S74xntpd:网络时间同步服务,不需要,禁用。
- S75cron:自动执行脚本服务,必须启动。
- S75flashprom:Flash更新脚本,需要启动。
- S75sa vecore:核心内存转储脚本,需要启动。
- S76nscd:DNS名字缓存服务,不需要,禁用。
- S77sf880dr:针对V880的一个脚本,不需要,禁用。
- S80lp:打印服务,不需要,禁用。
- S80spc:还是打印服务,不需要,禁用。
- S85power:电源管理,需要启动。
- S88sendmail:邮件服务,不需要,禁用。
- S88utmpd:监控utmp文件,与账号信息控制有关,需要启动。
- S89PRESERVE:虽然不知所云,但留着吧,需要启动。
- S90loc.ja.cssd:看了脚本也不知道干什么,还是需要启动吧。
- S90wbem:WBEM管理界面服务器,不需要,禁用。
- S91afbinit / S91gfbinit / S91ifbinit / S91jfbinit:针对Elite3D显卡的初始化脚本。没有显卡的机器就不需要,禁用。
- S91zuluinit:针对Zulu卡的初始化脚本,不需要,禁用。
- S93cacheos.finish:cache文件系统,不需要,禁用。
- S94Wnn6:日文输入系统,不需要,禁用。
- S94ncalogd:NCA进程日志,不需要,禁用。
- S95IIim:输入法守护进程,Solaris国际化支持的一部分,需要启动。
- S95svm.sync:devfs同步进程,监控系统硬件,需要启动。
- S98efcode:嵌入式FCode解释器守护进程,虽然不知道具体作用,但只好让它运行着。
- S99atsv:可能是支持日文的,不需要,禁用。
- S99audit:审计进程,需要启动。
- S99dtlogin:启动CDE登录进程,需要启动。
- S99rcapd:跟资源回收有关的,需要启动。
/etc/rc3.d 下的服务
- S13kdc.master / S14kdc:KDC服务,不需要,禁用。
- S15nfs.server:NFS服务,不需要,禁用。
- S16boot.server:远程启动服务,不需要,禁用。
- S34dhcp:DHCP服务,不需要,禁用。
- S50apache:HTTP服务,不需要,禁用。
- S50san_driverchk:SAN驱动检查?机器上没装,不需要,禁用。
- S76snmpdx:SNMP服务,不需要,禁用。
- S77dmi:SNMP的子服务,不需要,禁用。
- S80mipagent:启动Mobile IP,不需要,禁用。
- S81volmgt:软盘光驱的卷管理,需要启动。
- S84appserv:Sun ONE Server的组件,不需要,禁用。
- S89sshd:SSH服务,需要启动。
- S90samba:需要挂载Windows文件系统才需要,不需要,禁用。
- S86directorysnmp:与Sun Directory目录服务有关,不需要,禁用。
- S99JESsplash:不知道干什么,不需要,禁用。
另外,与这些服务相关的配置文件也可以一并清理,让系统更加简洁,便于审计。
4. 关闭inetd服务
现在SSH已经非常普及了,完全可以用SSH替代Telnet和FTP,实现更安全的远程访问。
- 完全关闭方案:如果已经把SSH作为启动服务一直运行,那么完全可以彻底关闭 inetd 服务。这样系统中的绝大多数网络服务入口就被堵住了。
- 必须运行inetd时:如果有些老服务必须依赖 inetd,那就需要精简化配置。在
/etc/inetd.conf里只保留真正需要的表项,然后对保留下来的表项使用 tcp wrappers(通过tcpd进程),最后别忘了用inetd -t参数记录扩展的日志信息。
5. 调整内核参数
内核参数是系统安全的重要防线,合理的设置能有效抵御许多常见攻击。
5.1 减少ARP过期时间
缩短ARP缓存的刷新间隔,可以减少ARP欺骗攻击的窗口时间。执行以下命令:
ndd -set /dev/arp arp_cleanup_interval 60000
# ndd -set /dev/ip ip_ire_flush_interval 60000 (Solaris 9 已经没有这个参数)
5.2 关闭IP转发
多宿主主机如果不承担路由功能,一定要关闭IP转发。
- 关闭IP转发:
ndd -set /dev/ip ip_forwarding 0 - 严格限定多宿主主机:如果是多宿主主机,可以加上更严格的限定防止IP欺骗攻击:
ndd -set /dev/ip ip_strict_dst_multihoming 1 - 关闭转发广播包:为了防止被用来实施Smurf攻击,需要关闭转发广播特性:
ndd -set /dev/ip ip_forward_directed_broadcasts 0
5.3 关闭转发源路由包
源路由包可以被攻击者用来绕过网络路径限制,必须关闭。
ndd -set /dev/ip ip_forward_src_routed 0
5.4 禁止响应ICMP广播
这几项都是为了防止系统被用作网络放大攻击的跳板。
- 禁止响应Echo广播:
ndd -set /dev/ip ip_respond_to_echo_broadcast 0 - 禁止响应时间戳广播:
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0 - 禁止响应地址掩码广播:
ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
5.5 处理重定向错误
恶意路由器可以发送虚假的重定向报文来劫持流量。
- 禁止接受重定向错误:
ndd -set /dev/ip ip_ignore_redirect 1 - 禁止发送重定向错误报文:
ndd -set /dev/ip ip_send_redirects 0 - 禁止时间戳响应:
ndd -set /dev/ip ip_respond_to_timestamp 0
5.6 防御SYN Flood攻击
将TCP连接请求队列的默认值从1024提高到4096,可以降低半开连接攻击的影响。
ndd -set /dev/tcp tcp_conn_req_max_q0 4096
5.7 防御连接耗尽攻击
将完全建立的连接队列参数从默认的128增大到1024,可以预防连接耗尽攻击。
ndd -set /dev/tcp tcp_conn_req_max_q 1024
5.8 防止IP欺骗
Solaris系统对TCP协议初始序列号(ISN)的生成有三种方式:0(可预测)、1(增强随机生成)、2(RFC 1948方式)。默认是方式1。为了提高安全性,建议修改 /etc/default/inetinit 文件,将 TCP_STRONG_ISS=1 改为 TCP_STRONG_ISS=2,重启后生效。这样生成的ISN更难被预测,大大增加了IP欺骗的难度。
5.9 增加私有端口
一般来说,1-1024端口被称为私有端口,只允许根权限的进程连接。但有些服务(如NFS的端口2049)运行在更高的端口上。可以通过以下命令灵活管理私有端口范围。
- 自定义最小非私有端口:
ndd -set /dev/tcp tcp_smallest_nonpriv_port 2050,这样0-2049都被定义为私有端口。 - 查看已定义的扩展私有端口:
ndd /dev/tcp tcp_extra_priv_ports - 单独增加一个私有端口:
ndd -set /dev/tcp tcp_extra_priv_ports_add 6112 - 删除私有端口定义:
ndd -set /dev/tcp tcp_extra_priv_ports_del 6112
不过这里需要特别提醒:不要随意定义私有端口。改变最小非私有端口这个参数经常会引发问题,建议先仔细分析需求,再用扩展私有端口的方式单独增加。举个例子,某系统的执行结果显示了三个私有端口:2049、4045、9010。
5.10 其他内核参数调整
- 启用堆栈保护:在
/etc/system文件中添加以下两行,可以有效防止缓冲区溢出攻击:set noexec_user_stack = 1和set noexec_user_stack_log = 1。 - 禁止核心转储:执行
coreadm -d process,避免核心内存信息泄露。 - 设置进程限制:根据系统资源情况合理设置。
6. 增强日志记录
日志是事后审计和入侵检测的重要依据。务必调整 syslog.conf,捕获 auth.info 和 daemon.notice 消息。创建 /var/adm/loginlog 文件以记录登录信息。还可以考虑启用系统审计(sar)、进程审计以及内核级别的BSM审计。
7. 保护文件系统
挂载文件系统时,对于不需要执行程序或写入的目录,应挂载为 nosuid 或 ro(只读)模式。如果Solaris版本在8及以上,可以在根文件系统上设置 logging 选项。可移动介质设备也要注意:如果可能,关闭 vold 服务,并确保 rmmount.conf 设置了 nosuid 选项。
8. 设置警告信息
通过修改 /etc/motd 和 /etc/issue 文件,可以设置登录前的警告信息,告知用户系统受法律保护,非授权访问将被记录。这些信息还能在 /etc/default/{telnetd,ftpd}、EEPROM以及GUI登录界面中配置。
9. 加强系统的访问控制
访问控制是安全防御的最后一道闸门。
- 限制root登录:在
/etc/default/login中设置CONSOLE=/dev/console,同时在sshd_config中设置PermitRootLogin no,禁止root通过SSH登录。 - 禁用不用的账号:对不需要登录的用户账号,在
/etc/passwd文件中将shell改为/bin/false或/dev/null。 - 创建 /etc/ftpusers:只有该文件中指定的用户才能使用ftp服务。
- 禁止 .rhosts 支持:删除系统中的
.rhosts文件;使用SSH时确保sshd_config中IgnoreRhosts yes;检查/etc/pam_conf,移除包含rhosts_auth的条目。 - 限制对cron和at的访问:创建
cron.allow和at.allow文件,只允许列出的用户提交或修改定时任务。 - 设置EEPROM安全模式:将eeprom设置为
security-mode=command,这样在系统启动前会要求输入密码,防止攻击者通过物理方式从光盘启动绕过系统安全。 - 限制XDMCP和屏幕保护:如果运行了X Windows,需要在
/etc/dt/config/Xaccess中禁用远程XDMCP访问。还可以在/etc/dt/config/*/sys.resources中为用户设置默认的带锁屏的屏幕保护超时时间。
10. 安装安全工具
最后,安装一些安全工具来巩固整个防御体系。
- 基本必备:SSH(已安装)、TCP Wrappers(用于inetd下的服务保护)、NTP(保持时间同步,利于日志审计)、fix-modes(修复系统文件和目录权限)。
- 增强工具:Tripwire或AIDE(文件完整性检查)、Logsentry或Swatch(日志监控和告警)、基于主机的防火墙或Portsentry(端口扫描检测工具)。
按照这个流程一步步走下来,Solaris 9系统基本上就有了一个比较稳固的安全基础。当然,安全是动态的,还需要根据实际运营环境不断调整和加固。但这套“从系统安装到内核调优,再到工具辅助”的打法,是任何时候都过时的基本功。
