记阿里云vps不明流量谜案探查经过

前段时间入手了一个阿里云的vps,主要是为了自己的blog访问速度,其实根本没人看这个blog!由于之前折腾过国外的vps,对于安全方面还是有点意识的,又想着反正有阿里云的云盾,应该没啥大问题,可是还是出事了 T-T

起因

本来租的vps就是配置很差的,想着也不是建站,就是写点个人blog装装逼吐吐槽,在选公网带宽的时候就选了按流量付费,仔细看了阿里云的手册,说得也很清楚

公网带宽:按使用流量,仅单向收取流出流量费用(0.8 元/GB),流入流量免费,按实际使用金额每小时扣费。例如您在1小时内公网流出流量为2.5GB,收取费用为2.5GB*0.8元/小时=2.0元。

想了想1G才8毛钱,我这blog又没啥访问量,再算上平时ssh连接产生的流量也花不了多少钱,于是冲了10元,没想到不到半个月就花完了!看了看流量监控,出网流量确实很高,因为我在上边开过ss客户端,当成跳板机来翻墙用,可是也只用了很短时间就关了,怎么看也觉得不太正常,也怀疑是不是有人拿我的服务器当cdn来缓冲css,js文件了,不过查了查nginx访问日志,也没发现。当时还没在意,于是再冲10元,关掉blog,关掉nginx,什么没开,2天不到又收到欠费短信了!这回我确定是有问题了!

疑点

最简单的排除法:

  1. blog关了,又查看了nginx access log确认了下,确实出问题这两天没有任何访问日志。 不知道nginx access log位置只需要:grep log /etc/nginx/nginx.conf
  2. ss客户端也是关的。ps确认了确实没有sslocal进程,另外看了下sslocal的nohup,发现这两天期间有发起连接的日志,但是没有数据传输,嗯,有点诡异。不知道sslocal日志记录的规则,所以暂时说明不了什么。
  3. 怀疑系统被黑了,最差的推断,因为阿里云的云盾显示一切都正常,这个概率很低。

后来给阿里售后提了工单,他们建议是设置个流量监控报警,充值恢复公网带宽后用iftop之类的工具监控下网络流量,看是哪个端口哪些进程在占用流量。因为发生问题的2天没有装任何监控的脚本工具之类的,虽然很不爽(感觉被当成了小白鼠),但也没有办法,找了个周六,先了解了下iftop怎么用,然后冲了5元,开搞!果然刚开了外网带宽,就发现外网网卡eth1基本上以1-3KB/s的速度有流量流出,而且看了下流出ip,根本不是我的机器,用ipcn查了下,什么韩国的法国的ip!查看端口发现全是连接1080端口产生的出网流量,再度怀疑我的ss是不是真的关了!再次确认发现真的没有开ss,但是为啥会有流量产生呢?!这个还是阿里云售后帮忙搞定的,原来真相是一支有人朝我的1080端口发tcp syn包,即使我这个端口没有listen,也会回应一个reset的拒绝连接的包,当然这个包也是有流量的,那对方是机器人(或者是肉鸡?),一直不停的发,我就傻乎乎的一直不停的回复拒绝!! 银子奏是这么流走的啊啊啊啊啊

Solution

定位到问题就好办了,先开防火墙,禁掉所有端口,只留22供ssh连接,由于公司有一条线路是拨号的ip不固定所以没法限制只公司ip可连,不过禁了其他端口,再加上一有问题这回也知道怎么监控网卡流量怎么抓包查了,也不怕了,中间折腾了半天iptables的配置,之前都是ufw的弱点开始暴露出来了! 好在iptables也并不是很复杂,google了一下发现就这篇文章说得最清楚了,看了之后基本上iptables就搞定了,debian因为没有把iptables加入到service,所以要让配置重启还在需要这样:

vim /etc/network/if-post-down.d/iptables
chmod +x /etc/network/if-post-down.d/iptables
#!/bin/bash
iptables-save > /etc/iptables.rules
vim /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules

另外既然ssh也是要耗流量花钱滴,就顺手解决了下阿里云自带的连接管理终端分辨率问题,阿里云的链接管理终端就是个网页版的console的感觉,不过弱了很多,而且分辨率极度不合理,特别小,他们售后丢给我一个改分辨率的faq链接,可是是centos的,debian的不一样,于是各种google,经过各种尝试,发现Ubuntu/Debian系应该是这篇文章说得最清楚最有效了! 我的系统是Debian Release 8.2 jessie,实测有效。另外查到一个关于grub2的还算全的中文文档

各种小工具命令:

  • 查看系统支持的分辨率方法:apt-get install v86d hwinfo,hwinfo --framebuffer
  • iftop查看流量:iftop -N -P -i eth
  • tcpdump tcp port 1080 -i eth1