7.11 网络流量与端口分析
网络端口是网络应用程序必不可少的参数。应用程序在主机上打开端口,然后通过远程主机中打开的端口实现远程通信。出于安全方面的考虑,必须留意系统中打开及关闭的端口。恶意软件和rootkits可能会利用特定的端口及服务运行在系统中,从而使攻击者可以对数据及资源进行未经授权的访问。通过获取开放端口列表以及运行在端口之上的服务,我们便可以分析并抵御rootkits的操纵,而且这些信息还有助于我们对其进行清除。开放端口列表不仅能够协助检测恶意软件,而且还能够收集开放端口的相关信息对网络应用程序进行调试。它可以用来分析某些端口连接及端口侦听功能是否正常。这则攻略讨论了各种用于端口分析的工具。
7.11.1 新手上路
很多命令可用来侦听端口以及运行在端口上的服务(例如lsof
和netstat
)。这些命令都默认包含在GNU/Linux发行版中。
7.11.2 实战演练
要列出系统中的开放端口以及运行在端口上的服务的详细信息,可以使用:
- $ lsof -i
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- firefox-b 2261 slynux 78u IPv4 63729 0t0 TCP localhost:47797-
- >localhost:42486 (ESTABLISHED)
- firefox-b 2261 slynux 80u IPv4 68270 0t0 TCP slynux-laptop.
- local:41204->192.168.0.2:3128 (CLOSE_WAIT)
- firefox-b 2261 slynux 82u IPv4 68195 0t0 TCP slynux-laptop.
- local:41197->192.168.0.2:3128 (ESTABLISHED)
- ssh 3570 slynux 3u IPv6 30025 0t0 TCP localhost:39263-
- >localhost:ssh (ESTABLISHED)
- ssh 3836 slynux 3u IPv4 43431 0t0 TCP slynux-laptop.
- local:40414->boneym.mtveurope.org:422 (ESTABLISHED)
- GoogleTal 4022 slynux 12u IPv4 55370 0t0 TCP localhost:42486
- (LISTEN)
- GoogleTal 4022 slynux 13u IPv4 55379 0t0 TCP localhost:42486-
- >localhost:32955 (ESTABLISHED)
lsof
的每一项输出都对应着一个打开了特定端口的服务。输出的最后一列类似于:
slynux-laptop.local:34395->192.168.0.2:3128 (ESTABLISHED)
输出中的slynux-laptop.local:34395
对应本地主机,192.168.0.2:3128
对应远程主机。
34395
是本地主机当前的开放端口,3128
是连接远程主机服务所需要使用的端口。
要列出本地主机当前的开放端口,可以使用:
- $ lsof -i | grep ":[0-9]\+->" -o | grep "[0-9]\+" -o | sort | uniq
其中,第一个grep
中使用的正则表达式:[0-9]\+->
用来从lsof
输出中提取主机端口部分(:34395->
);第二个grep
用来提取端口号(数字)。同一个端口可能会有多个连接,因此相同的端口也许会出现多次。为了保证每个端口只显示一次,将端口号排序并打印出不重复的部分。
7.11.3 补充内容
让我们看看另一些用来查看开放端口以及网络流量相关信息的工具。
用netstat
查看开放端口与服务
netstat
是另一个用于网络服务分析的命令。讲解netstat
的所有特性将超出这则攻略的范围。我们只看如何用它列出服务与端口号。
用netstat -tnp
列出开放端口与服务:
- $ netstat -tnp
- (Not all processes could be identified, non-owned process info
- will not be shown, you would have to be root to see it all.)
- Active Internet connections (w/o servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- PID/Program name
- tcp 0 0 192.168.0.82:38163 192.168.0.2:3128
- ESTABLISHED 2261/firefox-bin
- tcp 0 0 192.168.0.82:38164 192.168.0.2:3128 TIME_
- WAIT -
- tcp 0 0 192.168.0.82:40414 193.107.206.24:422
- ESTABLISHED 3836/ssh
- tcp 0 0 127.0.0.1:42486 127.0.0.1:32955
- ESTABLISHED 4022/GoogleTalkPlug
- tcp 0 0 192.168.0.82:38152 192.168.0.2:3128
- ESTABLISHED 2261/firefox-bin
- tcp6 0 0 ::1:22 ::1:39263
- ESTABLISHED -
- tcp6 0 0 ::1:39263 ::1:22
- ESTABLISHED 3570/ssh