Netstat和访问日志之间的区别

当我在SSHterminal上查看我的VPS的统计信息时,我发现netstat访问日志给出了不同的结果。

当我使用:

netstat -anp 

我看到一个攻击者有32个并发连接到端口80 IP地址为123.217.100.19

同时在访问日志( /var/www/vhosts/domain.com/statistics/logs/access_log )中,只有123.217.100.199的日志条目(最后有9个ip地址。 访问日志中没有特定的123.217.100.19 IP地址。

netstat和访问日志之间的这种ip区别是什么原因?

简单。 netstat是一个命令行工具,用于向您显示实时发生的实时/真实networkingstream量。 但是当你说access_log并指向这样的完整path:

 /var/www/vhosts/domain.com/statistics/logs/access_log 

该日志是由服务器上的Web服务生成的。 我最好的猜测是这将是Apache生成这些日志。 而且你在access_log和Apache中看到的日志数据less的原因直接来自于Apache处理这些连接的能力。

在Apache中,如果来自相同IP地址的相同浏览器,则可以select保持连接处于活动状态。 所以,如果你设置32个连接到端口80的项目,它可能是“保持活跃”的逻辑。

或者更可能的是,这种攻击是一种经典的DDoS攻击,其中发生大量的连接请求,但是在连接发生之前它们被丢弃。 由于Apache需要能够响应这些请求,所以这种方式在DDoS意义上是有效的,但是如果攻击者在build立连接之前“挂断”连接,则不会logging连接。

所以,以您的示例数据为例,9个连接实际上是对Apache进行的。 但其余的23个请求只是在Apache可以做任何事情之前下降。

是的,有一个关键的区别。

在netstat上,您会看到原始连接数据。 不pipe是否执行上层协议握手,如果有SYN数据包,netstat会logging它。

另一方面,access_log只会logging完成HTTP握手的连接。 如果有人build立连接但不发送任何数据,access_log将永远不会看到它。

在端口80上运行一个tail -f access_log和telnet到你的服务器。连接build立后,运行一个netstat ,closurestelnet连接而不发送任何东西。 你会看到你的IP出现在netstat上,而不是在access_log上。