记录一次被入侵

起因

从未知时刻开始,自己电脑上运行的一个小服务端出现了大量这样的输出:

1
ERROR: two many open files:

好吧,我知道我打开的chrome网页一般是不怎么关闭,也有通过工具走的服务端进行的下载,实验室内也有小伙伴在使用我这个小服务端. 所以建立起来的连接超过系统限定也是可以理解的. 虽然并不怎么想管,但是大量的该条输出占用硬盘空间淹没有用信息,不处理不行.
于是就懒懒的在运行服务器的脚本前面加上了这样一行命令

1
ulimit -n 4096

在linuxmint中,用户进程可以建立的链接最大数目是1024.可以设定的最大数目是4096.那就先变成原来的四倍,虽然人比较多,但是峰值想要超过这个还真不容易.于是搞定之后重新运行server端就闪人了.直到一切都变成没有修改之前的样子.成堆的丢包日志充满了我的硬盘.

这次只是错误输出的时间靠后了点,但是并没有从根本上解决多少问题.因此我觉得有必要来看一下,到底是哪个ip建立了这么多连接,这是要拖垮我渣渣电脑的节奏.

分析

用ps命令定位到server端的pid,使用lsof看一下打开文件的数目.确定的确是超过了上文中的最大数目,查看建立的tcp连接来源,发现有一大部分连接是来自一个我不认识的ip.也就是不是当前实验室局域网之内的ip.好吧,这就头疼了.现在只能看到从这个ip建立起来了大量的tcp连接和tcp6连接,大部分连接都是处于close_wait的状态.打电话问问信息化建设处吧,看看这个ip是哪里的.

经过和网管人员简单的交谈,这个ip是我大浙大zjg校区的。好吧,有点懵,我先改一下我主机的地址顺便在把日志记录用tee命令同时传送到终端和文件里面,看看对方是不是扫描ip和端口找到我的.如果不是通过遍历ip并扫描端口的话,对方应该不会再来拜访了。话说我服务启动之后并没有想着改个端口号啥的,因为更换配置文件的时候会麻烦很多,而且觉得我自己的小server低调点应该没人会发现, 结果留了一个大隐患。

第二次交手

貌似暂时平安无事,然而第二天来了之后发现走了我5个G的流量,每秒钟从同一个ip发起的tcp链接就有20+个。从行为来看,这已经不仅仅是其他人用一下的方式了,而是光明正大的用来下载东西了。如果下载的文件带有版权,那么我的服务端就GG了。太过分了!

被攻击时发起的TCP连接频率

被攻击时发起的TCP连接频率
正常使用时单用户TCP发起频率

正常使用时单用户TCP发起频率

随手画了两个渣图,求不嫌弃

改了本地ip还被发现,那就说明是全网暴力遍历ip查开放的端口。使用python对日志情况进行简单分析:对方不仅仅使用一个ip地址,而是使用多个ip地址。时间上没有重叠,估计是对方ip是通过DHCP获得的,这样就不能只封掉一个ip或者几个ip了.现在分析ip之后,出现了一下几个ip。

1
2
3
array(['127.0.0.1', '10.214.163.66', '10.214.163.201', '10.214.163.124',
'10.214.163.67', '10.171.33.76', '10.171.33.9', '10.171.34.37',
'10.171.34.42', '10.214.163.15'], dtype=object)

其中10.214开头的为本实验室的ip地址,127.0.0.1为本机回环地址.剩下的就是zjg的ip了.如果还是dhcp获得的ip的话,那只能很对不起的封掉ip段了。

解决

为了从根本上解决问题,准备直接费点时间把防火墙配置好。毕竟这个问题,以后可能还会出现。这也算是在使用linux中踩掉的一个坑吧。方便起见,这里配置防火墙不再直接使用iptables来进行,而是采用ufw配置命令行工具。启动防火墙之后打开常用端口。发起不进行限制,允许接入的ip限制在本实验室之内以及22等常用的端口不进行限制.

配置完成之后,使用nast工具可以看到,每秒中接受到的tcp请求并没有减少,但是因为接入的ip在防火墙的允许列表之外,所以一切正常。

尾巴

话说如果当时我没有懒着使用默认端口,而是换个端口4W多的端口,会不会就不用这么麻烦了?