我是不是受到了攻击,还是只是愚蠢?

我是不是受到了攻击,还是只是愚蠢?

我运行一个使用 Debian Squeeze 和几个 OpenVZ 容器的服务器。容器主要运行 Squeeze,一些运行 Lenny,一些已经更新到 Wheezy。主机除了 iptables 和 DHCP 之外没有做太多事情。文件服务器、代理、邮件服务器、kerberos、LDAP 等都放入容器中。该系统运行多年,除了一些防火墙规则外,没有发生重大变化,持续了一年多。

2 天前,系统突然崩溃了。我重启系统时遇到了很多问题。起初,它不允许我通过 ssh 登录。root 登录被拒绝,提示“您不存在。走开!”本地登录没问题。一段时间后,ssh 又能正常工作了。巧合的是,我没有重复使用 bash 历史记录中的那行,而是输入了一个新命令,经过三重检查,该命令与之前不起作用但在崩溃前起作用的那行相同。

然后系统运行起来,但大多数协议上的网络流量在 SYN ACK 之后被阻止。DNS、Telnet 和 SSH 都很好,但其余的都一团糟。经过几个小时的摸索和多次重新加载防火墙后,一切突然又恢复正常了。我在日志中找不到任何可疑的东西——但我不是取证专家。

今天,由于容器配额问题,文件服务器的 nscd 失去了与 LDAP 通信的套接字。这是以前从未发生过的事情。我还看到 smbd 声明了大量 (> 30) 套接字。

/var/log/messages 看起来与系统日志。/var/log/kern.log 包含有关崩溃原因的附加信息:

/var/log/kern.log:2950:Sep 19 10:46:57 asgard kernel: [6529441.320086] INFO: task sendmail:32181 blocked for more than 120 seconds.
/var/log/kern.log:2982:Sep 19 10:48:57 asgard kernel: [6529561.324525] INFO: task kdmflush:1932 blocked for more than 120 seconds.
/var/log/kern.log:3005:Sep 19 10:48:57 asgard kernel: [6529561.324694] INFO: task xfssyncd:10162 blocked for more than 120 seconds.
/var/log/kern.log:3027:Sep 19 10:48:57 asgard kernel: [6529561.324934] INFO: task postgres:16827 blocked for more than 120 seconds.
/var/log/kern.log:3060:Sep 19 10:49:51 asgard kernel: [6529561.325129] INFO: task imapd:31749 blocked for more than 120 seconds.
/var/log/kern.log:3084:Sep 19 10:49:51 asgard kernel: [6529561.325248] INFO: task cleanup:32194 blocked for more than 120 seconds.
/var/log/kern.log:3106:Sep 19 10:50:57 asgard kernel: [6529681.324028] INFO: task flush-253:3:3216 blocked for more than 120 seconds.
/var/log/kern.log:3142:Sep 19 10:50:57 asgard kernel: [6529681.324224] INFO: task kjournald:6859 blocked for more than 120 seconds.
/var/log/kern.log:3166:Sep 19 10:50:57 asgard kernel: [6529681.324366] INFO: task syslogd:11720 blocked for more than 120 seconds.
/var/log/kern.log:3198:Sep 19 10:50:57 asgard kernel: [6529681.324574] INFO: task postgres:16827 blocked for more than 120 seconds.
/var/log/kern.log:7152:Sep 19 19:29:41 asgard kernel: [ 1440.617090] INFO: task sendmail:11892 blocked for more than 120 seconds.

最后一次“sendmail”崩溃是在重启机器之后。从那时起,再也没有发生过这样的事件。“imapd”和“postgres”肯定在不同的容器中运行。

好吧,我没看到任何确凿的证据,但我可能只是瞎子。如果没有很好的理由,用已知/假定的良好备份来设置系统对我来说太难了。

我将非常感激您对下一步检查的建议。

感谢您的帮助。

更新:我花了更多精力寻找崩溃的前兆,在系统日志中发现了以下内容:

Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (10490->8232)
Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:09:56 asgard ntop[7965]:   **WARNING** packet truncated (17442->8232)
Sep 19 10:11:02 asgard ntop[7965]:   **WARNING** packet truncated (11650->8232)
Sep 19 10:11:02 asgard ntop[7965]:   **WARNING** packet truncated (10202->8232)
Sep 19 10:11:29 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:13:27 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)
Sep 19 10:20:33 asgard ntop[7965]:   **WARNING** packet truncated (8754->8232)

我知道这被认为无关紧要,但这似乎是罕见事件。数据包截断只存在于第二次崩溃当天。在所有可用的日志文件中没有其他地方出现。

答案1

这看起来像是 DoS,很可能源自网络或受感染容器内部。

我会研究 vmstat,每 5 秒连续运行一次:vmstat 5,并记录资源消耗的位置。您还可以使用 screen 并在单独的窗口中运行 vmstat 60(每分钟)——这样,当峰值在较长时间内出现时,您就可以注意到它们。

在这种情况下,高/峰值系统 CPU(sy)、高上下文切换率(cs)和高 IO(显示网络和磁盘)将指示 DoS:

$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0   9584   6820 132432  23256    1    1   136    12    1    1 83  1 15  0  0
 0  0   9584   6696 132432  23256    0    0     0     0   20   32  0  0 99  0  1

同时监控主机上的网络流量,我推荐使用ntop,即:

$ nload -t 10000 -u H eth0

答案2

这看起来像是磁盘 I/O 错误。运行 fsck 并检查错误。

答案3

也许您没有任何文件系统错误,但我确信您在日志中看到了警告,因为您有许多进程处于 D 状态(等待 I/O)并且内核正在通知您长时间等待。

答案4

该错误表明您的进程等待的时间太长(120 秒)才能访问磁盘;这种情况发生在磁盘太忙而无法响应进程的高度拥挤的服务器上。

您可以通过检查 vmstat 下的“等待”来确定。

相关内容