阿里云的ECS访问量莫名暴增的处理过程
2023-11-20
前端时间把域名切到了另一个机器中, 并把控制流量的定时脚本关掉了, 然后!! 上周五发现这台机器(aliyunos 3)还有流量在偷跑, 扣了我不少费用, 无语..... 果断把这台机器停了...cao....
2023-10-20
Linux中有个工具叫 tc (traffic control), 使用来控制计算机往外流出流量的
数据先从内核, 流入到网卡, 再从网卡流出到外部网络中, tc 可以控制流入到网卡(ingress)的数据, 也可以控制从网卡流出(egress)的数据
它通过丢包, 来让tcp协议调整数据流出速度
它通过建立 随机公平队列(SFQ)来控制流量/带宽不被某个连接全部占用
2023-10-11
准备摆烂了, 写了个脚本, 当连续几次流量超过1m时, 直接关闭网络服务, 每10分钟重启一次网络服务, 看看情况
获取累计流量(流入/流出)的有几种方法:
1 cat /sys/class/net/eth0/statistics/tx_bytes 2 3 cat /proc/net/dev | grep eth0 | awk '{print $10}' 4 5 ifconfig eth0 | grep TX | grep bytes | awk '{print $5}'
网络启动 /usr/sbin/ifup 关闭: /usr/sbin/ifdown
效果:
2023-10-10
使用netstat命令统计外部ip的访问数量, 通过正常访问来攻击网站, 而不是通过协议层的一些办法
netstat -ntup | awk '{print $5}' | awk '!/servers/' | awk '!/Address/' | awk '!/100.100/' | cut -d: -f1 | sort | uniq -c | sort -n
输出:
1 172.16.15.253 2 15.204.18.201 2 180.169.131.242
今天发现把nginx关掉后, 仍然有大量流量流出,
通过iftop命令查出有很多发往香港的数据, 流入的数据量基本没有, 接收流量的也不是阿里云插件的IP, 但是死活找不到是哪个进程发起的,
咨询了阿里云客服, 说让我安装 atop netatop 工具去查看, 但还没看
2023-10-7
nginx 限流方案
请求限制: Module ngx_http_limit_req_module (nginx.org) 请求限制, 可以自定义, 以ip或server_name为key进行限流, 但是如果ip过多, 就要考虑用地址段来限流了
链接限制: Module ngx_http_limit_conn_module (nginx.org)
用法说明: 如何使用 Nginx 优雅的限流 - 知乎 (zhihu.com)
2023-9-8
最近一段时间, 我的ecs流量访问异常(1M带宽, 已被打满), 就是每隔几分钟就要扣我几毛钱, 我的小网站平常基本上没有流量, 都是我自己在玩,
今天还给我整的欠费停机了, 这下给我整不开心了, 就去找了阿里售后客服.
客服也没说啥有价值的, 给了我一篇文章, 让我自己找异常IP:
如何查看Linux系统网络流量负载情况_云服务器 ECS-阿里云帮助中心 (aliyun.com)
恶意IP列表: 威胁情报 (bjos.cn)
第一步: 加IP黑名单
下图: 左1:扣费历史 左2:近一小时公网流出(很平均) 左3: 欠费后停机 左4: 加了ip段黑名单后
操作过程:
(土办法)
1. 用 nethogs 查看访问量最大的几个IP地址
2. 复制出来, 用正则匹配出网址
3. 挨个看看IP归属地, 发现很多阿里内网的请求, 以及 美国/荷兰等海外的外网请求
4, 更新nginx的黑名单(主要是把海外的IP禁掉, 期间用正则处理了一下), 重启nginx后就暂时好了, 后续再观察观察
(上点科技)
1. 解析nginx access.log, 得到 ip 地址 (PHP解析Nginx访问日志并生成SQL-CSDN博客)
2. 购买一个ip地址库的api (百度智能云, api商城, 有0元20万次一年的)
3. 循环查询ip归属地, 海外的ip自动生成 ip.black 文件 (记得去重, 避免重复的ip地址查询)
4. 更新nginx的ip.black 文件, 重启nginx
5. tail -f 查看nginx的access.log文件, 看看返回状态是不是403多了起来
nginx IP黑名单文件(部分):
deny 205.210.0.0/16; deny 194.50.0.0/16; deny 198.199.0.0/16; deny 172.176.0.0/16; deny 35.90.0.0/16; deny 65.49.0.0/16; deny 107.170.0.0/16; deny 65.154.0.0/16; deny 192.241.0.0/16; deny 66.175.0.0/16; deny 54.215.0.0/16; deny 198.235.0.0/16; deny 151.235.0.0/16; deny 179.43.0.0/16; deny 66.249.0.0/16; deny 54.176.0.0/16; deny 45.128.0.0/16; deny 45.66.0.0/16; deny 159.203.0.0/16; deny 162.216.0.0/16; deny 103.144.0.0/16; deny 138.197.0.0/16; deny 35.233.0.0/16; deny 194.180.0.0/16; deny 45.79.0.0/16; deny 34.76.0.0/16; deny 52.167.0.0/16; deny 194.87.0.0/16; deny 80.187.0.0/16; deny 35.203.0.0/16; deny 90.151.0.0/16;
第二步: 关闭 rpcbind进程
周一来看看访问量有没有下降, 发现还有, 心想这么加黑名单也不是办法, 于是就用 netsta 命令查看到底哪些端口一直再被访问, 结果发现了大量的 rpcbind 进程:
# netstat -tunp Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 172.16.10.159:111 205.210.31.136:53836 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 209.17.97.90:64137 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 198.74.56.46:52430 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 45.33.87.154:38059 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 192.3.251.169:40253 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.149:54176 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 45.33.87.154:38976 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:20048 172.104.210.105:56798 ESTABLISHED 1030/rpc.mountd tcp 0 0 172.16.10.159:111 46.148.20.13:60000 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.151:50118 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 209.17.96.250:63905 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 107.173.180.231:41884 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 209.17.97.34:52730 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 89.248.165.7:61270 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 107.174.176.6:46094 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.130:53521 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.170:51097 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 198.235.24.161:53406 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 89.248.165.7:62104 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 45.33.87.154:42517 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 172.104.210.105:56753 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 45.33.87.154:38978 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 92.63.196.97:44654 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 45.33.87.154:38972 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.33:53912 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:20048 69.164.217.74:50026 ESTABLISHED 1030/rpc.mountd tcp 0 0 172.16.10.159:20048 192.155.88.231:35787 ESTABLISHED 1030/rpc.mountd tcp 0 0 172.16.10.159:111 218.16.138.122:61001 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 204.15.78.236:45561 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 205.210.31.6:57306 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 77.83.36.44:47935 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 107.174.176.6:49038 ESTABLISHED 481/rpcbind tcp 0 0 172.16.10.159:111 198.235.24.24:50266 ESTABLISHED 481/rpcbind ......
网上查了查, 这个是用于 NFS 服务的, 阿里云报警过有黑客利用这个端口来进行DDOS攻击(low货的攻击方法):
【风险预警】RPCBind服务UDP反射DDoS攻击预警 (aliyun.com)
然后关闭了rpcbind服务:
1 1、关闭 rpcbind 服务 2 sudo systemctl stop rpcbind 3 4 2、关闭开机自启动 5 sudo systemctl disable rpcbind 6 7 3、立即执行关闭 8 systemctl stop rpcbind.socket 9 10 4、 验证是否监听 11 netstat -ap | grep rpc
删除pid
cd /run rm -rf rpcbind rm -rf rpcbind.sock
关闭后, 发现还有一些rpc.mount的服务, 暂时没有管, 看看接下来的情况吧.
2023-9-25
过了两周, 发现还是有异常的访问, 同时也查到 rpc.xxx是nfs相关的额一些服务, 找出这些服务, 关掉, 并禁止开机启动
找到相关的额服务, 然后关闭
# systemctl list-unit-files --type=service | grep nfs nfs-blkmap.service disabled nfs-convert.service enabled nfs-idmapd.service static nfs-mountd.service static nfs-server.service enabled nfs-utils.service static nfsdcld.service static
使用 nethogs 命令发现还是有很多端口的访问, 于是使用firewalld 管理端口, (firewalld是为了代替iptables的, 比较好用)
# 启动firewalld systemctl start firewalld # 允许 80, 443 端口的访问 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent # 重启 firewalld (重启才会生效) firewall-cmd --reload # 查看开放的端口 firewall-cmd --list-ports # 开机自启 systemctl enable firewalld