Netstat 和 Access Log 之间的区别

Netstat 和 Access Log 之间的区别

当我在 SSH 终端中检查 VPS 的统计数据时,我注意到网络状态访问日志给出不同的结果。

当我使用时:

netstat -anp

我看到一名袭击者三十二端口的并发连接数80123.217.100.19IP地址。

同时,在访问日志 ( /var/www/vhosts/domain.com/statistics/logs/access_log) 中,只有以下日志条目123.217.100.199(还有一个9(末尾)IP 地址。没有特定的123.217.100.19访问日志中可以找到 IP 地址。

netstat 和 access log 中出现这种ip差异的原因是什么?

答案1

Easy.netstat是一个命令行工具,用于向您显示实时发生的实时/真实网络流量。但是当您access_log像这样说出并指向完整路径时:

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

该日志由服务器上的 Web 服务生成。我最好的猜测是 Apache 生成这些日志。您看到的日志数据access_log比 Apache 少的原因直接来自于 Apache 处理这些连接的能力。

我认为,如果连接来自同一个浏览器且位于同一个 IP 地址,Apache 中有一个选项可以保持连接有效。因此,如果您设置了 32 个连接到端口 80 的项目,则可能存在“保持连接”逻辑。

或者更有可能的是,这种攻击是典型的 DDoS 攻击,即发出大量连接请求,但在连接建立之前就被丢弃。这在 DDoS 意义上是可行的,因为 Apache 需要能够响应这些请求,但如果攻击者发出的大量连接在建立连接之前“挂断”……那么就不会记录任何连接。

因此,以您的示例数据为例,实际上有 9 个连接正在与 Apache 建立。但其余 23 个请求在 Apache 可以执行任何操作之前就被丢弃了。

答案2

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

在 netstat 上你会看到生的连接数据。无论是否执行上层协议握手,只要有 SYN 数据包经过,netstat 就会记录它。

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

运行 atail -f access_log并远程登录到您的服务器的 80 端口。建立连接后,运行 a netstat,然后关闭 telnet 连接而不发送任何内容。您将看到您的 IP 出现在 netstat 上,但不出现在 access_log 上。

相关内容