linux服务器被当肉鸡过程

来源:互联网 发布:js this指向 编辑:程序博客网 时间:2024/05/01 16:26

先说明我们的服务器模型是基于:C/S的模型,服务器下面挂在了成千上万个2G/3G/Net连接的终端。

一、现象

过年回来,刚高兴没有几天,客户那边反馈,终端采集的数据好久没有更新到平台,并且愈演愈烈,越来越多的客户打电话过来询问,我当时也很纳闷,之前就没有这种情况啊。并且也不是所有终端长时间更新不了。就一步一步的查看。当我远程连接机房服务器的时候,ssh的22端口,怎么也连接不上。这下可麻烦了,查证都没有办法查证了。情急之下想到了我们在同一局域网下面还有一台windows服务器,于是我登录到远程windows服务器,使用内网的接口连接到我们的局域网linux服务器上面,使用内网连接流畅的很(特此说明一下,一般机房服务器,内外网是2个分开的网卡,网络互不影响),没有多大问题。进去服务器应用解析的日志检测看,的确是终端连接不上来,并不是服务器程序挂掉了。

二、演进

于是找到网管(机房运维人员),给他说明了情况,他说可能是遇到了DDOS攻击,还要我们公司进行流量清洗和增加软防和硬防(说这些都是要交钱的啊),于是就允许他登陆我们的服务器看一下,貌似是在iptables中增加了一些陌生的IP的地址和一些规则,但是貌似没有起多大作用,重启机器之后,就不到一会又出现这种情况了,大量终端有链接不上(在这不免吐槽一下运维,根本的原因找错了。。。)。客户逼得急,现在已经持续了3个小时了,我这边也不指望运维人员给解决了,就自己看现象啊。我就想是不是连接数过多,我的服务程序句柄数太大导致的,但是使用netstat -antp|grep task|wc -l查看了一下,现在正在通讯的也没有多少啊才1800个,这个数据不算多啊,因为最大的时候我见过做多的连接数是6000+,当时cpu才用到40%左右,因为linux的默认限制是2048,我们给他开成了65536最大了,所以才有可能到6000+的socket句柄数。

三、工具查找问题

没有发现异常后,我就觉着是不是服务器网络出现了问题,导致终端连接不上,就特意下载了iptraf(linux平台下 挺好用的)监控软件看了一下,安装之后,进入网卡选择,进行整体网络情况监控界面(这里补充一下,服务器是centOS 6.8的无界面显示,但是这个软件自带GUI,可以简单的观察),不看不知道,一看吓一跳。上行宽带达到了80Mbyte/s——110Mbyte/s,我的天哪这感情就是把整个机房的网络都占了啊,特此感谢机房没有把我们服务器停掉,因为好多机房当你的服务器影响到其机房正常运行的时候,在一定时间内会把你服务器断网的。这个网速我们的终端连接最多的时候,平常上行带宽才200Kbyte/s左右,因为我们是下行占得比较多,大概在800kbyte/s-2Mbyte/s,这样一看 我们服务器完全不正常啊 , 现在一脸懵逼,当然可以肯定也不是DDOS攻击,毕竟哪个黑客会攻击我们这么个不知名的公司,毕竟DDOS攻击都是消耗自身资源的(也就是说伤敌1000,自损800),所以说如果没有很大的利益可图,别的黑客攻击者也看不上眼)。

四、问题诊断

初步判定我们的服务器是被别人种下了病毒,当肉鸡了,可能也就是说我们的服务器被暴力破解过,导致我们的服务器被入侵了。
查看系统登录日志/var/wtmp
这个文件是个二进制文件。使用cat more less tail不好使,所以我们用专用的命令访问
who -u /var/wtmp
这里写图片描述
这个上面可以看到一些陌生的IP登录信息,这些明显就是别人使用另一个IP地址登录的,可见已经被破解了。
这时候使用top查看运行的进程,有一些进程占用cpu超过100%这明显一看也是异常的,因为这些命令正常情况下不会占用这么高的cpu,这时候kill -9 PID号杀死之后,过了不到2s的时间这个进程又启动起来了,怎么杀都杀不死,这样看来还有别的脚本在运行,导致这个命令一直启动,所以我们要找到这个根源,找到这个进程的父进程,看到父进程是一个进程脚本,可能这个父进程也是个异常的这个进程名字是httpd,乍一看这个进程是阿帕奇的服务进程啊,但是我这里明显没有阿帕奇相关的服务啊,于是肯定这个进程就是罪魁祸首,杀死之后,就正常了,最后我这边进行服务器重启,结果这个进程又起来了,看来在启动脚本里面添加了不少木马的服务进程,并且是启动就运行的。于是我们进入到rc.1 rc.2 rc.3 rc.4 rc.local里面进行查看,里面的确多出了很多不知名的脚本,并且看起来明显不是正常的信息。于是把/etc/init.d里面的异常的服务删除之后,并且再次重启,网络回复正常。

五、问题验证

到这里工作才进行了一半,现在只是把占用网络的进程给制止住了,但是rootkit病毒和特洛伊病毒植入不会这么简单就让你清除的。于是在网上搜索了一下相关的文章,发现很多人员也遇到过这种问题,只是进程名字模拟的不一样罢了,稍微其他文件夹下的有稍微不同,不过大体的原理都差不多,先是把你检测的查证的linux原生命令替换掉,例如:ps lsof netstat ss ifconfig 现在我发现的只是这几个,其余的不知道是不是还有只是我没有发现,这就不好说了。
按照前人的经验跟据他们的找到的一些东西走,也可以修复很多。例如
1、简单判断有无木马
有无下列文件
cat/etc/rc.d/init.d/selinux
cat/etc/rc.d/init.d/DbSecuritySpt
ls/usr/bin/bsd-port
ls/usr/bin/dpkgd
查看大小是否正常
ls-lh /bin/netstat
ls-lh /bin/ps
ls-lh /usr/sbin/lsof
ls-lh /usr/sbin/ss
2、上传如下命令到/root下
ps netstat ss lsof
3、删除如下目录及文件
rm-rf /usr/bin/dpkgd(ps netstat lsof ss)
rm-rf /usr/bin/bsd-port #木马程序
rm-f /usr/bin/.sshd #木马后门
rm-f /tmp/gates.lod
rm-f /tmp/moni.lod
rm-f /etc/rc.d/init.d/DbSecuritySpt(启动上述描述的那些木马变种程序)
rm-f /etc/rc.d/rc1.d/S97DbSecuritySpt
rm-f /etc/rc.d/rc2.d/S97DbSecuritySpt
rm-f /etc/rc.d/rc3.d/S97DbSecuritySpt
rm-f /etc/rc.d/rc4.d/S97DbSecuritySpt
rm-f /etc/rc.d/rc5.d/S97DbSecuritySpt
rm-f /etc/rc.d/init.d/selinux(默认是启动/usr/bin/bsd-port/getty)
rm-f /etc/rc.d/rc1.d/S99selinux
rm-f /etc/rc.d/rc2.d/S99selinux
rm-f /etc/rc.d/rc3.d/S99selinux
rm-f /etc/rc.d/rc4.d/S99selinux
rm-f /etc/rc.d/rc5.d/S99selinux
4、找出异常程序并杀死
这里写图片描述

5、删除含木马命令并重新安装(或者把上传的正常程序复制过去也行)
我自己重新安装好像不行,我是找的正常的机器复制的命令。
ps
/root/chattr-i -a /bin/ps&& rm/bin/ps-f
yum reinstall procps -y 或 cp/root/ps/bin
netstat
/root/chattr-i -a /bin/netstat&& rm/bin/netstat-f
yum reinstall net-tools -y 或 cp/root/netstat/bin
lsof
/root/chattr-i -a /bin/lsof&& rm/usr/sbin/lsof-f
yum reinstall lsof-y 或 cp/root/lsof/usr/sbin
ss
/root/chattr-i -a /usr/sbin/ss&& rm/usr/sbin/ss-f
yum -y reinstall iproute 或 cp/root/ss/usr/sbin

六、杀毒工具扫描

1、安装杀毒工具clamav
yum -y installclamav clamav-milter
2、启动服务
service clamd restart
3、更新病毒库
由于ClamAV不是最新版本,所以有告警信息。可以忽略或升级最新版本。
[root@mobile ~]# freshclam
ClamAV update process started at Sun Jan 31 03:15:52 2016
WARNING: Can’t query current.cvd.clamav.net
WARNING: Invalid DNS reply. Falling back to HTTP mode.
Reading CVD header (main.cvd): WARNING: main.cvd not found on remote server
WARNING: Can’t readmain.cvd header from db.cn.clamav.net (IP: 185.100.64.62)
Trying again in5 secs…
ClamAV update process started at Sun Jan 31 03:16:25 2016
WARNING: Can’t query current.cvd.clamav.net
WARNING: Invalid DNS reply. Falling back to HTTP mode.
Reading CVD header (main.cvd): Trying host db.cn.clamav.net (200.236.31.1)…
OK
main.cvd is up to date(version: 55, sigs: 2424225, f-level: 60, builder: neo)
Reading CVD header (daily.cvd): OK (IMS)
daily.cvd is up to date(version: 21325, sigs: 1824133, f-level: 63, builder: neo)
Reading CVD header (bytecode.cvd): OK (IMS)
bytecode.cvd is up to date(version: 271, sigs: 47, f-level: 63, builder: anvilleg)
4、扫描方法
可以使用clamscan -h查看相应的帮助信息
clamscan -r /etc–max-dir-recursion=5 -l /root/etcclamav.log
clamscan -r /bin–max-dir-recursion=5 -l /root/binclamav.log
clamscan -r /usr–max-dir-recursion=5 -l /root/usrclamav.log
clamscan -r –remove /usr/bin/bsd-port
clamscan -r –remove /usr/bin/
5、查看日志发现
把发现的命令删掉替换正常的
这里写图片描述

7、后续

虽然重启之后,大概运行了3–4个月没有出现这个问题,但是还是有点小担心,毕竟系统文件那么多,真是种下一个小木马或者什么的,我们真的很难发现。最好的情况还是如果有可能尽可能把系统重装一遍,这样可以保证系统是真的“干净”。重装完之后一定安全方面加大防护。经过这件事情之后,对安全方面着重很多。

8、系统安全优化

起因是因为远程暴力破解,导致病毒植入。所以我们第一步要防止远程暴力破解。
1、ssh远程连接是默认端口22(这个是个程序员都应该知道),默认的root用户是可以登录的,所以就这两个方面就会导致系统及其不安全。
2、我们要修改ssh连接的配置文件
vi /etc/ssh/sshd_config
找到#Port 22一段,这里是标识默认使用22端口,修改为如下:
Port 22
Port xxxx(要填具体port口号) (直接在后面添加即可,防止因为其他情况导致 不可用,所以先保留22端口)然后保存退出。
执行/etc/init.d/sshd restart
这样SSH端口将同时工作与22和xxxx上。
现在编辑防火墙配置:vi /etc/sysconfig/iptables
启用xxxx端口。
service iptables save
service iptables restart
现在只能使用ssh工具连接xxxx端口,来测试是否成功。如果连接成功了,则再次编辑sshd_config的设置,将里边的Port22删除,即可。
之所以先设置成两个端口,测试成功后再关闭一个端口,是为了方式在修改conf的过程中,万一出现掉线、断网、误操作等未知情况时候,还能通过另外一个端口连接上去调试以免发生连接不上必须派人去机房,导致问题更加复杂麻烦。
以上就是Linux SSH默认22端口的修改方法。
3、root远程登录禁止
PermitRootLogin yes
改成
PermitRootLogin no即可
4、只允许的用户登录设置
AllowUser 用户名
保存重启即可。

原创粉丝点击