这个 netstat 输出是什么意思?

这个 netstat 输出是什么意思?

我在专用服务器上运行一个中等活跃的网站。在防御 (D)DOS 攻击的过程中,我运行了 netstat 来获取活动连接数。这产生了一个相当不寻常的结果,它显示了 1000 多个连接将服务器公网 IP 地址的 httpd 端口复制到同一 IP 地址上的许多看似随机的不同端口。也就是说,输出如下所示:

Proto   Recv-Q    Send-Q  Local Address         Foreign Address      State
tcp     0         0       [server's ip]:60284   [server's ip]:80     TIME_WAIT
tcp     0         0       [server's ip]:60267   [server's ip]:80     TIME_WAIT
... [1000+ just like this]

这些端口的状态是 TIME_WAIT,但这可能是因为我运行的防火墙不允许访问这些端口。此服务器确实与另一台计算机上的数据库进行通信,但这一切都应通过私有 IP 完成。因此,如果这是有效的通信,我想弄清楚这一点,以便我可以将其设置为使用私有 IP(端口可访问)。

有人知道为什么机器会尝试通过其公共 IP 与自身通信吗?我如何确定哪个进程正在启动此过程?我尝试通过 lsof 查看这些端口,但没有返回任何信息。

我们的服务器使用 httpd 运行的唯一不寻常的事情是相当过时的 persistent-perl 程序(用于在内存中缓存 perl 脚本)。但是,我非常肯定这不会涉及使用网络,并且没有信息表明它将如何工作。

提前感谢任何建议!

答案1

我想你会发现这些联系你的 HTTP 端口,而不是它。其他端口号(60284 等)是自动分配给连接客户端的临时端口号。

无论连接的哪一端(客户端或服务器)关闭,它关闭后都会进入TIME_WAIT状态。

因此,看起来您的机器上有一些进程正在频繁地连接到您的网络服务器,并从客户端关闭连接(我猜要么在发出 HTTP 请求之前关闭,要么发出 HTTP 1.1 保持活动请求然后关闭)

追踪此问题的一些可能方法:

  • 如果您可以在连接处于 ESTABLISHED 状态时捕获其中一个,netstat -antp(以 root 身份)将向您显示该套接字的进程 ID。

  • 查看 Web 服务器访问/错误日志,查找来自服务器 IP 的请求。这些日志可能会揭示请求来自何处。

  • 使用 tcpdump 或 wireshark 跟踪从服务器 IP 到其自身端口 80 上的数据包,并查看实际传输的内容(您还可以明确地看到连接的打开方式)。

相关内容