开发者社区> 科技小能手> 正文

在百花之中干掉一个杂草连接...

简介:
+关注继续查看

早上接到阿里云的服务器报警,说有一台服务器的流量超标,这个服务器的外网带宽是5M,但是登陆进去使用#iftop -i eth1发现里面的流量已经几乎跑满,如图:

wKioL1j1huahS67iAAF_zOlJVeo445.png


我这个服务器的名称叫online-mts-001,为啥会有一个mail25.u.tsender.com,这个是什么鬼?莫非是通过我的服务器去连接这个“邮箱”域名?于是我就ping了一下这个mail25.u.tsender.com,结果如图:

wKioL1j1h2eSzPTTAACG1Mg43pk828.png


看到这个域名对应的ip地址是115.29.177.8,嗯,115.29.177.8,哎?这个ip地址好熟悉啊,卧槽,这特么不是这个online-mts-001的外网ip么?

wKiom1j1h8WTYI_-AAFekKgrysw748.png


也就是说我这个机器在我不知道的情况下被人绑定了一个域名!但是我这个服务器不是网页服务器,上面那个tsender.com的域名打不开,我检查了服务器一番,发现这个机器没有被人入侵的痕迹,只能说是被人有意/无意(无意的可能性更大,比如看错了阿拉伯数字)绑定了域名。


被人绑定了域名就好比被人起了外号一样,一旦非本人操作就不太好往下摘了,查了很多资料都没有办法,毕竟主动权不在我这里了。


但是回头过来,我们的重心是要解决那个占据了3M带宽的连接,#netstat 看了一下,发现这个连接的具体信息如下:

wKioL1j1iS3CEKFoAAAps18eNgc369.png


仅仅是干掉连接的话,方法有很多,关闭网卡再重开或者关闭相应的服务都可以,但是现在的问题是这台服务器是生产环境的服务器,它主要是给用户提供视频拉流,通过抓包分析得知,这位183.228.128.188的用户合法通过外网连接到了这台视频服务器,而且拉取的是高清视频,所以才占据了这么大的带宽。不过我们还是决定先断开这位用户的连接同时不动其他用户的连接,这位183.228.128.188的用户在客户端虽然会发觉视频断开,但是有缓存和人为刷新的客观因素,实际的体验不会差太多,至少不会投诉400...


那么如何干掉一个established连接同时保证其他连接呢?请使用tcpkill。


tcpkill的下载比较有说法,下面是安装步骤:

1)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/libnids-1.24-1.el6.x86_64.rpm

2)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/libnet-1.1.5-1.el6.x86_64.rpm

3)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/dsniff-2.4-0.14.b1.el6.x86_64.rpm

4)yum install libICE libSM libXmu -y

5)rpm -ivh libnet-1.1.5-1.el6.x86_64.rpm

6)rpm -ivh libnids-1.24-1.el6.x86_64.rpm 

7)rpm -ivh  dsniff-2.4-0.14.b1.el6.x86_64.rpm

请按顺序操作,不然的话dsniff就会报错:

1
2
3
4
warning: dsniff-2.4-0.14.b1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
error: Failed dependencies:
libnet.so.1()(64bit) is needed by dsniff-2.4-0.14.b1.el6.x86_64
libnids.so.1.24()(64bit) is needed by dsniff-2.4-0.14.b1.el6.x86_64

安装完毕之后,就会生成tcpkill命令,如图:

wKiom1j1sruBMzU2AACxKEY_jf8710.png


然后断开上面那个大带宽连接的命令是:#./tcpkill -i eth0 src port 9132 and dst port 9595 and src host 115.29.177.8 dst host 183.228.128.188 或者#./tcpkill -s 115.29.177.8:9132 -d 183.228.128.188:9595


但是要注意一下!tcpkill 一定要运行在能接收到应答包的主机上在,最好运行在连接或半连接存在的一端主机上,因为tcpkill会发现这个连接里有数据传输进而感知并且干掉。而且tcpkill默认情况下是只能干掉established状态的连接,对于假死连接(连接在,但是数据不传输)或者半连接由于tcp keeplive没打开而又没有数据向对端发送,导致一直无法感知次连接其实已经断开)是无法断开的。


如果遇到上述所说的假死连接和半连接就需要手动更改tcpkill的源码,更改原理在https://yq.aliyun.com/articles/59308


如果使用的系统是ubuntu or  debian,还可以使用cutter命令,#apt-get install cutter下载即可。使用方法:http://www.cyberciti.biz/tips/cutting-the-tcpip-network-connection-with-cutter.html


至于第一个问题,怎么把这台服务器上的域名撤除,我倒要好好想想了...





参考资料:

http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php


http://www.gnutoolbox.com/tcpkill-command/



本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1917007



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
代码优雅之道——如何干掉过多的if else
代码优雅之道——如何干掉过多的if else
11 0
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
10 0
干掉 “重复代码”,这三种方式绝了!
干掉 “重复代码”,这三种方式绝了!
36627 0
还在为线程间上下文传递而烦恼,用TransmittableThreadLocal试试
还在为线程间上下文传递而烦恼,用TransmittableThreadLocal试试
142 0
代码越写越乱?那是因为你没用责任链
代码越写越乱?那是因为你没用责任链
95 0
对共享可变数据不加同步,虚拟机可能会搞死你
大家都知道,在Java中,除非变量的类型是 long 或 double,否则对于变量的读取和写入操作都是原子性的。也就是说,即使多个线程同时访问并修改变量,也不会有线程安全的问题。
56 0
令人头秃的:你的主机中的软件中止了一个已建立的连接
令人头秃的:你的主机中的软件中止了一个已建立的连接
479 0
避免掉进“重造轮子”的坑: 从审核系统说起
别重造轮子了,大把时光可以去快活呀
579 0
+关注
科技小能手
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
从Uber切换Potgres说起
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载