7.11 网络流量与端口分析

网络端口是网络应用程序必不可少的参数。应用程序在主机上打开端口,然后通过远程主机中打开的端口实现远程通信。出于安全方面的考虑,必须留意系统中打开及关闭的端口。恶意软件和rootkits可能会利用特定的端口及服务运行在系统中,从而使攻击者可以对数据及资源进行未经授权的访问。通过获取开放端口列表以及运行在端口之上的服务,我们便可以分析并抵御rootkits的操纵,而且这些信息还有助于我们对其进行清除。开放端口列表不仅能够协助检测恶意软件,而且还能够收集开放端口的相关信息对网络应用程序进行调试。它可以用来分析某些端口连接及端口侦听功能是否正常。这则攻略讨论了各种用于端口分析的工具。

7.11.1 新手上路

很多命令可用来侦听端口以及运行在端口上的服务(例如lsofnetstat)。这些命令都默认包含在GNU/Linux发行版中。

7.11.2 实战演练

要列出系统中的开放端口以及运行在端口上的服务的详细信息,可以使用:

  1. $ lsof -i
  2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  3. firefox-b 2261 slynux 78u IPv4 63729 0t0 TCP localhost:47797-
  4. >localhost:42486 (ESTABLISHED)
  5. firefox-b 2261 slynux 80u IPv4 68270 0t0 TCP slynux-laptop.
  6. local:41204->192.168.0.2:3128 (CLOSE_WAIT)
  7. firefox-b 2261 slynux 82u IPv4 68195 0t0 TCP slynux-laptop.
  8. local:41197->192.168.0.2:3128 (ESTABLISHED)
  9. ssh 3570 slynux 3u IPv6 30025 0t0 TCP localhost:39263-
  10. >localhost:ssh (ESTABLISHED)
  11. ssh 3836 slynux 3u IPv4 43431 0t0 TCP slynux-laptop.
  12. local:40414->boneym.mtveurope.org:422 (ESTABLISHED)
  13. GoogleTal 4022 slynux 12u IPv4 55370 0t0 TCP localhost:42486
  14. (LISTEN)
  15. GoogleTal 4022 slynux 13u IPv4 55379 0t0 TCP localhost:42486-
  16. >localhost:32955 (ESTABLISHED)

lsof的每一项输出都对应着一个打开了特定端口的服务。输出的最后一列类似于:

  1. slynux-laptop.local:34395->192.168.0.2:3128 (ESTABLISHED)

输出中的slynux-laptop.local:34395对应本地主机,192.168.0.2:3128对应远程主机。

34395是本地主机当前的开放端口,3128是连接远程主机服务所需要使用的端口。

要列出本地主机当前的开放端口,可以使用:

  1. $ 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列出开放端口与服务:

  1. $ netstat -tnp
  2. (Not all processes could be identified, non-owned process info
  3. will not be shown, you would have to be root to see it all.)
  4. Active Internet connections (w/o servers)
  5. Proto Recv-Q Send-Q Local Address Foreign Address State
  6. PID/Program name
  7. tcp 0 0 192.168.0.82:38163 192.168.0.2:3128
  8. ESTABLISHED 2261/firefox-bin
  9. tcp 0 0 192.168.0.82:38164 192.168.0.2:3128 TIME_
  10. WAIT -
  11. tcp 0 0 192.168.0.82:40414 193.107.206.24:422
  12. ESTABLISHED 3836/ssh
  13. tcp 0 0 127.0.0.1:42486 127.0.0.1:32955
  14. ESTABLISHED 4022/GoogleTalkPlug
  15. tcp 0 0 192.168.0.82:38152 192.168.0.2:3128
  16. ESTABLISHED 2261/firefox-bin
  17. tcp6 0 0 ::1:22 ::1:39263
  18. ESTABLISHED -
  19. tcp6 0 0 ::1:39263 ::1:22
  20. ESTABLISHED 3570/ssh