电脑技术学习

连载:六脉神剑捍卫企业 Linux系统

dn001

引子

在金庸先生的《天龙八部》中,六脉神剑是古代大理王国皇家祖传神功,分别是少商剑、商阳剑、中冲剑、关冲剑、少冲剑、少泽剑。六脉神剑惺惺相依又各有千秋。运剑于无形,剑招虽少却独步武林,以指力化做剑气,有质无形,杀人与无影之中……

本文主要为Linux技术人员提供一些基本的技术指导,并非解决Linux安全的详细手册。

开篇

Linux操作系统是大多数现代企业计算环境的基础。企业级Linux发行版本,如Red Hat, SUSE, Ubuntu等,其功能、灵活性、稳定性是有口皆碑的。不幸的是,Linux的灵活性和强大功能还有另外一面:Linux系统可以支持大多数著名的网络协议和服务,如果不正确的配置和部署,这会为安全攻击提供极大的空间。

现代企业对基于Web的交互性和面向互联网应用程序的依赖性,以及运行环境对网络架构提出了越来越多的要求。大量的数据要求和新的网络服务意味着有更多的设备和数据在网络上必须时刻可用,这种持续的可用性是一个现代企业的重要基础,不幸的是,其可用性不只限于那些授权用户。同样的系统对那些联机的入侵者和恶意用户也总是可用的。

大多数现代计算机系统必定要产生日益广泛的网络档案文件,但也不过是档案文件。大多数企业Linux发行版本在发布时已将大多数网络端口和服务禁用,因此在使用时服务必须打开而不是关闭。不管怎么说,仔细的检查系统的网络和安全配置的基本方面可以大幅度地提高网络系统的安全性。

注意

不同的Linux发行版本提供了不同的管理工具,本文将着重讨论那些可在任何Linux发行版本中可用的命令行工具。

少商剑─确认打开的网络端口及相关的进程

系统中任何一个打开的网络端口指明了一个潜在的进入点。在这种情况下,一个打开的网络端口即是某个服务程序正在监听并对请求响应的端口。在进入系统的情况下,两种通用的列示某计算机的打开端口的方法是使用Isof和Netstat命令。

Lsof命令列示Linux系统中所有打开的文件。其-i选项告诉Lsof命令列示所有的与IP协议相关的文件,而-n选项禁止将建立连接的任何IP地址映射为主机名。我们可以将输出结果传递给egrep命令,而且只列示包含COMMAND、TCP(一个使用TCP协议监听的进程)、UDP(一个使用UDP协议监听的进程)的结果。下面是Lsof命令在Red Hat Enterprise Linux系统中的一个例子展示:

输出结果显示运行在本系统中的进程有portmap(RPC端口映射器)、rpc.statd(RPC状态监视器)、sshd(安全外壳)、Ntpd(网络计时协议)、sendmail(邮件服务程序)、cupsd(CUPS打印监控程序)。此外,、xinetd互联网服务监控程序正运行着auth(远程识别监控程序)、telnet(网络终端)和vnc(虚拟网络计算)等服务器程序。

当运行在相同的系统上时,Netstat 命令提供与lsof输出相似的结果。其-t选项产生所有的TCP/IP端口的输出,-u选项生成所有的UDP端口的输出,-l选项限制只输出那些正在积极地监听连接的端口。-p选项显示拥有网络连接的程序和进程的ID。下面是Netstat命令在Red Hat Enterprise Linux系统中显示输出的一个例子:

此处列示的信息稍微详细一些,但显示了与lsof命令相同的开放端口和相关服务。一台计算机所提供服务的内部视图应与外部计算机所看到的匹配。为了验证这一点,可以在另一台计算机上使用nmap(网络映射)命令。其-sT选项实施了一个TCP端口扫描,而-sU选项进行的是UDP端口的扫描。从另一台计算机上扫描相同的计算机会输出如下的结果:

虽然nmap命令不能识别与631和795端口相关的服务,但前面展示的lsof和nmap命令在本地计算机的输出却分别将其确定为打印端口监控程序和rpc.statd命令。

如果所有的输出一致的话,下一步便是分析可用的服务来决定其是否必需,如果是非必需的,应怎样处理:

首先,在netstat和lsof中输出的cupsd(打印)和sendmail(邮件服务器)这两个进程在nmap的输出中是不可见的。netstat 和 lsof的输出确认了它们只是在监听本地的回路接口,因此对于外部的计算机来说是不可见的,并且不会引安全问题。如果性能是你要分析的计算机的一个问题的话,sendmail对于本地邮件传输是有用的;但如果并没有人正在本机上打印的话,你可能会终止CUPS进程。

Ssh(安全外壳)对于远程登录提供了安全机制并支持加密通信,这是好事情。

Telnet进程代表了一个用于建立远程连接的较早的协议,它使用了非加密的通信。一些telnet的较新版本支持安全的认证和通信机制,如支持Kerberos;但不管怎么说,这是一个非必需的服务,因为已经提供了SSH,所以必须关闭这个进程。

Rpcbind (端口映射程序) and rpc.statd (795端口)进程仅在NFS环境中有用。如果我们正在分析的不是一个NFS客户端,就应该关闭它。

Auth进程对于分析网络客户端的问题是有用的,但可会为入侵者提供系统用户的信息。然而,一些FTP和其它的网络客户却必须使用它。因此我们要么禁用它,要么用-n选项启用它。-n使其只显示数字的用户ID而非用户名。

Ntp(网络时间协议)进程用于使网络上的计算机时钟同步,但在过去常被某些人用于查找漏洞等。我们可以在启动时运行ntp q命令,这样就可以查询并同步时间服务,然后再退出。

在32768端口上的omad进程可能令人困惑,但反复检查lsof 和netstat的输出,会发现32768实际上正被用于rpc.statd查询,因此应该通过关闭rpc.statd进程来终止它。这是一个被nmap错误识别的进程。

此过程的下一步就是到我们正在分析的计算机那里来决定在什么地方及什么时间这些进程被启动,因此可以终止我们确认为非必要的任何进程(cupsd, portmap,rpc.statd, telnet, vnc),并改变我们想要改变的任何进程的行为。

标签: linux