为Solaris服务器配置开源安全工具(上)
随着Internet的迅猛发展网络已无处不在但是它可能随时受到来自各方的攻击了解哪些人正在访问资源哪些人正在享受服务哪些人正在发送大量垃圾等对网络管理员来说是非常必要的利用Solaris中较常见的网络安全分析工具TcpdumpNmap和IP Filter etherealgftp可以使网络管理工作更加轻松Etherea和 Tcpdump主要是截获通过本机网络接口的数据用以分析Nmap是强大的端口扫描工具可扫描任何主机或网络lsof可用来检查本机当前提供的服务及状态IP Filter是开源的防火墙工具这几个者各有所长结合起来就可以比较透彻地了解网络状况
一使用Tcpdump
Tcpdump能够截获当前所有通过本机网卡的数据包它拥有灵活的过滤机制可以确保得到想要的数据由于Tcpdump只能收集通过本机的数据因此它的应用受到了一些限制大多应用在网关或服务器自我检测上
软件下载和安装
Libpcap能 独立地 通过主机协议发送和接受数据如同TCPIP这就意味着Libpcap不能阻止过滤或操纵同一机器上的其他应用程序的通讯它仅仅能简单地监视在网络上传输的数据包所以它不能提供类似网络流量控制服务质量调度和个人防火墙之类的支持
#wget solintellocalgz
#pkgadd -d libpcapsolintellocalpkg
使用Solaris pkgget 工具安装gftp
pkg_get由推出的是一个用来自动获得网站上的软件包工具 模拟了Debian linux上的aptget 工具 安装 CSW (Community SoftWare) 软件包非常方便
#wget _getpkg
#pkgadd d pkg_getpkg all
# pkg_get –i tcpdump
软件使用
例如在作为网关的主机上想知道本地网络中IP地址为的主机现在与外界通信的情况就可以使用如下命令
tcpdump i pcn src host > txt
如图
图 把tcpdump重定向到文件再进行分析
在默认情况下Tcpdump会将数据输出到屏幕如果数据量太大可能根本看不清具体的内容这时我们可以把它重定向到文件再进行分析
把txt文件打开可以就可以清楚地了解刚才用户的一举一动
首先到的SMTP服务器发送邮件
:: IP cjh > smtp: S :() win <mss nopwscale nopnopsackOK>
:: IP cjh > smtp: ack win
:: IP cjh > smtp: ack win
:: IP cjh > smtp: P :() ack win
:: IP cjh > smtp: ack win
然后访问了IT的主页
:: IP cjh > domain: + AAAA? ()
:: IP cjh > : P :() ack win
:: IP cjh > : ack win
对于普通的网络分析这些信息已经足够了这就是Tcpdump的基本功能其它高级功能都是在这一基础上的细化和增强
例如我只想知道当前正在访问哪些Web站点可以用下面这条命令
/tcpdump i pcn src host and dst port
该命令的目的是截获所有由eth进入源地址(src)为的主机(host)并且(and)目标(dst)端口(port)为的数据包显然通过and或者not这些逻辑组合就可以得到特定的数据Tcpdump还可以监听不同的数据类型(如TCPUDP)以用不同的网络范围(如Host主机Net网络)甚至用Ether直接指定物理地址
表 Tcpdump常用命令行选项
用Tcpdump在网络中获取信息如此清晰是不是有一种一览无余的感觉正是因为Tcpdump功能过于强大连个人隐私和敏感数据的保护都成了问题所以通常只有root用户能够使用这一工具
二使用Nmap
nmap简介
Nmap设计的初衷是系统管理员可以方便地了解自己的网络运行情况例如有多少台主机在运行分别提供什么样的服务因此它扫描的速度非常快尤其适合大型网络在对网络进行扫描时Nmap主要利用ICMP echo探测主机是否开启凡是了解TCP/IP协议的都知道对于一个TCP端口无论是否使用防火墙进行过滤该主机都会对该端口发出的请求做出一定响应所以即使配置了严格的防火墙规则nmap照样可以找到这些主机
软件下载安装
#pkgadd d pkg_getpkg all
# pkg_get –i nmap
软件使用
探测一台主机是否在线用Nmap探测试试看如图
图 nmap sP
探测结果好像该主机还开着呢!这里sP指定使用Ping echo 进行扫描(Scan) 利用这一特点可以很快知道目的网络究竟有多少主机处于运行状态
nmap sP / //表明目标是一个网络而非单个主机
既然已经知道了哪些主机还开着就可以进一步探测这些主机的信息如开启的端口提供的服务及操作系统类型等从上面扫描的结果可以知道这台机器正在运行想要了解该主机的详细信息可以执行
nmap
稍后会显示如图的内容
图 了解该主机的详细信息
由上可以断定这是一台运行Windows操作系统的主机因为它开启了端口还提供了IIS网络服务等这些信息如果被不怀好意的人得到就可以采用对应的攻击办法其实强大的Nmap本身就可以依据TCP/IP的指纹特征猜测对方使用的操作系统我们可以用O来开启这一选项
nmap O
得到的结果是
Starting nmap V BETA ( /nmap/ )
Interesting ports on ():
(The ports scanned but not shown below are in state: closed)
Port State Service
/tcp open http
/tcp open locsrv
/tcp open netbiosssn
/tcp open https
/tcp open iad
/tcp open mssqls
Remote operating system guess: Microsoft NT Server SP + Hotfixes
Nmap run completed IP address ( host up) scanned in seconds
它猜测的远程主机类型是Microsoft NT Server SP + Hotfixes并且相当准确和详尽 另外nmap既可在Shell下运行也可以通过一个叫nmapfe的图形界面来运行这个图形界面是基于Gtk库的运行nmapfe(要运行所有功能需要超级用户权限) #nmapfe 如图
图 nmapfe扫描程序
nmapfe支持种类繁多的扫描技术例如TCP connect()扫描是最基本的TCP扫描方式TCP SYN扫描通常称为半开扫描UDP扫描目标系统提供UDP服务的端口系统识别扫描需要超级用户权限ping扫描是隐蔽扫描还有Ident扫描(Ident Scanning)等 从扫描技术看nmap是众多端口扫描器中的极品此外它还提供了一些高级的特征例如高速秘密系统指纹特征识别诱饵扫描碎片扫描等
三使用lsof
lsof简介
使用 lsof您可以检查打开的文件并根据需要在卸载之前中止相应的进程同样地如果您发现了一个未知的文件那么可以找出到底是哪个应用程序打开了这个文件在 UNIX 环境中文件无处不在这便产生了一句格言任何事物都是文件通过文件不仅仅可以访问常规数据通常还可以访问网络连接和硬件在有些情况下当您使用 ls 请求目录清单时将出现相应的条目在其他情况下如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字不存在相应的目录清单但是在后台为该应用程序分配了一个文件描述符无论这个文件的本质如何该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口
因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息所以能够查看这个列表将是很有帮助的完成这项任务的实用程序称为 lsof它对应于list open files(列出打开的文件)几乎在每个 UNIX 版本中都有这个实用程序
lsof下载安装
#wget ftp:///pub/freeware/intel//lsofsolxlocalgz
#gunzip lsofsolxlocalgz
#pkgadd -d lsofsolxlocal
图 是安装成功界面
lsof的使用
只需输入 lsof 就可以生成大量的信息如图 所示因为 lsof 需要访问核心内存和各种文件所以必须以 root 用户的身份运行它才能够充分地发挥其功能
每行显示一个打开的文件除非另外指定否则将显示所有进程打开的所有文件CommandPID 和 User 列分别表示进程的名称进程标识符 (PID) 和所有者名称DeviceSIZE/OFFNode 和 Name 列涉及到文件本身的信息分别表示指定磁盘的名称文件的大小索引节点(文件在磁盘上的标识)和该文件的确切名称根据 UNIX 版本的不同可能将文件的大小报告为应用程序在文件中进行读取的当前位置(偏移量)图来自一台可以报告该信息的 Sun Solaris 计算机而 Linux 没有这个功能
查找网络连接
网络连接也是文件这意味着可以使用 lsof 获得关于它们的信息假设您已经知道 PID但是有时候并非如此如果您只知道相应的端口那么可以使用 i 参数利用套接字信息进行搜索
# lsof i :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh root u IPv xea t TCP *:ssh (LISTEN)
搜索活动的连接
# lsof i @
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd root u IPv xdc t TCP sun:ssh>linux:
(ESTABLISHED)
sshd root u IPv xdc t TCP sun:ssh>linux:
(ESTABLISHED)
在这个示例中sun 和 linux 之间有两个 IPv 连接对其进行更仔细的研究可以看出这些连接来自于两个不同的进程但它们却是相同的这是因为两台主机是相同的并且端口也是相同的(ssh 和 )这是由于进入主进程的连接分叉出一个处理程序并将该套接字传递给它您还可以看到名为 sun 的计算机正在使用端口 (ssh)而 linux 具有端口 这表示sun 是该连接的接收者因为它关联于该服务的已知端口 是源或临时端口并且仅对这个连接有意义
以上这些表明利用网络分析工具了解网络的状况非常简单几乎不费什么力气就可以获取很多有用的数据