阿里云IP遭受DDOS攻击 快速切换IP实践
阿里云IP遭受DDOS攻击 快速切换IP实践
#1 介绍
运行平台: 阿里云
访问链路: 域名 -> 负载均衡EIP -> 容器
- 网站无法访问,查询服务运行正常,查询公网流量异常高后断流了
- 咨询工程师是公网IP遭受DDOS攻击后触发风控安全DDOS黑洞断流
- 阿里云EIP默认提供不超过5Gbps的基础DDoS防护能力
- 创建shell脚本检查网站断流后快速切换公网IP恢复
#2、创建shell脚本实践
#2.1 检测域名是否可达
# 域名
domain_name="elvin.vip"
domain_sub="k8s-lb"
if ping -c 1 $domain_sub.$domain_name &> /dev/null; then
echo "$(date +'%F %T') $domain_sub.$domain_name is online"
else
echo "$(date +'%F %T') $domain_sub.$domain_name is not online."
fi
#2.2 查询负载均衡器的公网IP
#安装aliyun cli
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar -zxf aliyun-cli-linux-latest-amd64.tgz -C /usr/local/bin/
rm -f aliyun-cli-linux-latest-amd64.tgz
# 设置阿里云访问密钥和区域ID
export ALICLOUD_ACCESS_KEY_ID='key_id_xxx'
export ALICLOUD_ACCESS_KEY_SECRET='key_secret_xxx'
export ALICLOUD_REGION_ID='cn-shanghai'
#负载均衡实例id
LOAD_BALANCER_ID="lb-xxxxxxxx"
# 查询绑定LB的EIP
EIP_INFO=$(aliyun vpc DescribeEipAddresses --RegionId $ALICLOUD_REGION_ID | jq --arg lb_id "$LOAD_BALANCER_ID" '.EipAddresses.EipAddress[] | select(.InstanceId == $lb_id and .InstanceType == "SlbInstance")')
# 提取EIP的ID和IP地址
OLD_EIP_IP=$(echo $EIP_INFO | jq -r '.IpAddress')
OLD_EIP_ID=$(echo $EIP_INFO | jq -r '.AllocationId')
#2.3 创建新的EIP
# 创建EIP 按量付费模式 峰值带宽100M
EIP_OUTPUT=$(aliyun vpc AllocateEipAddress --RegionId $ALICLOUD_REGION_ID --InternetChargeType PayByTraffic --Bandwidth 100 --Name $domain_sub)
# 获取EIP的ID和IP地址
EIP_ID=$(echo $EIP_OUTPUT | jq -r '.AllocationId')
EIP_IP=$(echo $EIP_OUTPUT | jq -r '.EipAddress')
#2.4 负载均衡器绑定新的EIP
# 解绑现有的EIP
aliyun vpc UnassociateEipAddress --RegionId $ALICLOUD_REGION_ID --AllocationId $OLD_EIP_ID --InstanceId $LOAD_BALANCER_ID --InstanceType SlbInstance
# 绑定EIP到负载均衡器
ASSOCIATE_OUTPUT=$(aliyun vpc AssociateEipAddress --RegionId $ALICLOUD_REGION_ID --AllocationId $EIP_ID --InstanceId $LOAD_BALANCER_ID --InstanceType SlbInstance)
# 释放旧的EIP
aliyun vpc ReleaseEipAddress --AllocationId $OLD_EIP_ID
#2.5 更新域名的A记录
# 获取域名RecordId
RECORD_ID=$(aliyun alidns DescribeDomainRecords --DomainName $domain_name | jq -r --arg rr "$domain_sub" '.DomainRecords.Record[] | select(.RR == $rr) | .RecordId')
# 更新域名的A记录
aliyun alidns UpdateDomainRecord --RecordId $RECORD_ID --RR $domain_sub --Type A --Value $EIP_IP
#3 完整的shell实例
#!/bin/bash
# aliyun.lb.eip.update.sh
# */12 * * * * bash /opt/aliyun.lb.eip.update.sh
# 域名和负载均衡相关信息
domain_name="elvin.vip"
domain_sub="k8s-lb"
LOAD_BALANCER_ID="lb-xxxxxxxx"
#file
[ -d /data/txt ] || mkdir -p /data/txt
ckFile=/data/txt/$domain_sub.$domain_name.ck
runLog=/data/txt/$domain_sub.$domain_name.log
#跳过一次执行
if [ -f $ckFile ]; then
now_time=$(date +%s)
file_time=$(stat -c %Y $ckFile)
time_diff=$((now_time - file_time))
# 判断是否超过10分钟
if [ $time_diff -ge 600 ]; then
rm -f $ckFile
echo "$(date +'%F %T') skip run once" >>$runLog
exit 0
fi
fi
# 检测域名是否可达,错误时连续检查3次
for((i=1; i<4; i++));do
if ping -c 1 $domain_sub.$domain_name &> /dev/null; then
echo "$(date +'%F %T') $domain_sub.$domain_name is online" >>$runLog
nk=99
i=99
exit 0
else
echo "$(date +'%F %T') $domain_sub.$domain_name is not online. Retrying..." >>$runLog
sleep 5
fi
done
if [ "$nk" = "99" ];then
exit 0
else
echo "$(date +'%F %T') Domain is not reachable after 3 attempts." >>$runLog
fi
# 设置阿里云访问密钥和区域ID
export ALICLOUD_ACCESS_KEY_ID='key_id_xxx'
export ALICLOUD_ACCESS_KEY_SECRET='key_secret_xxx'
export ALICLOUD_REGION_ID='cn-shanghai'
# 查询绑定LB的EIP
EIP_INFO=$(aliyun vpc DescribeEipAddresses --RegionId $ALICLOUD_REGION_ID | jq --arg lb_id "$LOAD_BALANCER_ID" '.EipAddresses.EipAddress[] | select(.InstanceId == $lb_id and .InstanceType == "SlbInstance")')
# 提取EIP的ID和IP地址
OLD_EIP_IP=$(echo $EIP_INFO | jq -r '.IpAddress')
OLD_EIP_ID=$(echo $EIP_INFO | jq -r '.AllocationId')
# 验证结果
if [ -z "$OLD_EIP_IP" ]; then
echo "$(date +'%F %T') Failed to find OLD_EIP_IP" >>$runLog
exit 1
fi
echo "$(date +'%F %T') Old EIP: $OLD_EIP_IP" >>$runLog
# 创建EIP 按量付费模式 峰值带宽100M
EIP_OUTPUT=$(aliyun vpc AllocateEipAddress --RegionId $ALICLOUD_REGION_ID --InternetChargeType PayByTraffic --Bandwidth 100 --Name $domain_sub)
# 获取EIP的ID和IP地址
EIP_ID=$(echo $EIP_OUTPUT | jq -r '.AllocationId')
EIP_IP=$(echo $EIP_OUTPUT | jq -r '.EipAddress')
# 验证EIP创建
if [ -z "$EIP_ID" ] || [ -z "$EIP_IP" ]; then
echo "$(date +'%F %T') Test Failed: Failed to create EIP." >>$runLog
echo "eip_create: $EIP_OUTPUT" >>$runLog
exit 1
fi
echo "$(date +'%F %T') New EIP: $EIP_IP" >>$runLog
# 解绑现有的EIP
echo "$(date +'%F %T') Remove LB-EIP" >>$runLog >>$runLog
aliyun vpc UnassociateEipAddress --RegionId $ALICLOUD_REGION_ID --AllocationId $OLD_EIP_ID --InstanceId $LOAD_BALANCER_ID --InstanceType SlbInstance >>$runLog
sleep 2
# 绑定EIP到负载均衡器
ASSOCIATE_OUTPUT=$(aliyun vpc AssociateEipAddress --RegionId $ALICLOUD_REGION_ID --AllocationId $EIP_ID --InstanceId $LOAD_BALANCER_ID --InstanceType SlbInstance)
# 验证绑定
if [ $? -ne 0 ]; then
echo "$(date +'%F %T') EIP add to LB Failed." >>$runLog
echo "eip_update: $ASSOCIATE_OUTPUT" >>$runLog
exit 1
else
# echo "EIP add to LB successfully."
echo "$(date +'%F %T') eip_update: $ASSOCIATE_OUTPUT" >>$runLog
fi
sleep 2
# 释放旧的EIP
echo "$(date +'%F %T') Release old EIP $OLD_EIP_ID" >>$runLog
aliyun vpc ReleaseEipAddress --AllocationId $OLD_EIP_ID >>$runLog
# 获取域名RecordId
RECORD_ID=$(aliyun alidns DescribeDomainRecords --DomainName $domain_name | jq -r --arg rr "$domain_sub" '.DomainRecords.Record[] | select(.RR == $rr) | .RecordId')
# 更新域名的A记录
echo "$(date +'%F %T') Update IP: $domain_sub.$domain_name $EIP_IP" >>$runLog
aliyun alidns UpdateDomainRecord --RecordId $RECORD_ID --RR $domain_sub --Type A --Value $EIP_IP >>$runLog
#notie msg
#dingtalk
export ddtxt="notice from ip-update \n$domain_sub.$domain_name \n$EIP_IP"
export ddtoken="10b70b4fcb8a5ddad86b7a4396183639a6a99c2660xxxxxx"
curl -ks -m 5 http://files.elvin.vip/shell/ddmsg.url.txt.sh |bash
#lark
export txtmsg="notice from ip-update \n$domain_sub.$domain_name \n$EIP_IP"
export larktoken="f6bfc69d-2617-46d7-a42b-123xxxxxx"
curl -ks -m 5 http://files.elvin.vip/shell/lkmsg.txt.sh |bash
# 记录完成时间
date +"%F %T" >$ckFile
exit 0
source: https://gitee.com/alivv/elvin-demo/blob/master/shell/aliyun.lb.eip.update.sh
阿里云IP遭受DDOS攻击 快速切换IP实践的更多相关文章
- 巧用批处理cmd快速切换IP地址
如果你的笔记本经常在不同的地方使用,有些地方需要自动获取IP,而有些地方需要配置固定IP,每换一个地方都需要重新配置一遍,是不是感觉很麻烦呢? 下面介绍一种通过建立批处理文件来快速切换IP的方法: s ...
- Windows环境下使用Netsh命令快速切换IP配置
不同的内网环境需要使用不同的IP配置,频繁切换令人发狂,因此搜索了快速切换IP配置的方法. Netsh interface IP Set address "以太网" Static ...
- 使用BGP-blackhole解决IDC频繁遭受DDOS攻击困扰
项目背景 该项目位于某市级BGP IDC机房,机房客户多为web业务,遭受小流量攻击(10G量级)较为频繁,针对这一现象在机房core旁路部署ADS系统,牵引异常流量清洗后进行回源,该清洗方案在此不再 ...
- 阿里云提示WordPress“/wp-includes/http.php输入IP验证不当”的解决办法
本文转自:https://www.liuzhishi.com/2931.html 标题: wordpress IP验证不当漏洞 简介: wordpress /wp-includes/http.php文 ...
- 【阿里云IoT+YF3300】9.快速开发modbus设备驱动
Modbus是一种串行通信协议,是莫迪康公司为PLC(编程逻辑控制器)通信而设计的协议.Modbus目前已经成为工业领域通信协议的业界标准,大部分的仪器仪表都支持该通信协议.很早以前就开发过基于Mod ...
- 阿里云Open API自动化脚本—ECS公网IP转化弹性公网IP
1.OpenAPI Explorer 记录一下使用阿里云 Open API 自动化/脚本化 “ECS 公网 IP 转化弹性公网 IP”的实现 全过程.原博客地址:https://www.markedi ...
- 阿里云Kubernetes服务 - Service Broker快速入门指南
4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...
- 【阿里云IoT+YF3300】10.快速开发188协议设备驱动
188协议的全称为CJ-T188-2004 <户用计量仪表数据传输技术条件>,是针对水表.燃气表.热量表和其他集中采集的一个国家行业标准协议. YFIOs就是YFSoft I/O Serv ...
- 阿里云服务器18个数据中心测试IP地址以及测试方法
我们用户在选择阿里云服务器的时候是不是感觉阿里云的数据中心太多太多,确实阿里云服务器机房是有很多,国外国外机房大约有18个,甚至更多,因为还在不断的增加机房.对于商家而言增加不同的机房可以满足不同的项 ...
- 阿里云ecs配置辅助网卡绑定公网ip地址
EIP直通车 前置条件:1.大家的实例是从经典迁移到VPC里面的,上古时期,经典实例大家购买实例的时候都是买了带宽的.而这种带宽一般情况下都是包年包月的,而且这种绑定在实例上的IP,我们把它叫做公网I ...
随机推荐
- Java高并发关于synchronized的8锁讲解
先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchr ...
- mini-web 框架添加路由
阅读目录 1.mini web框架-4-路由 2.伪静态.静态和动态的区别 3.mini-web框架-实现伪静态url 4.准备股票数据 5.mini-web框架-从mysql中查询数据 6.mini ...
- 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
题目大意 小A和小B,要进行 \(N\) 次猜拳,每次按照一定周期出拳,胜负情况如下: 求出小A和小B分别赢了几次. 思路 枚举 \(N\) 次猜拳,每次比较 \(a[powera]\) 与 \(b[ ...
- Visual Studio 2022只能使用WSL调试问题处理
删除项目的Properties目录下面的launchSettings.json文件
- JS实现斐波那契数列的几种方法及代码优化
一.斐波那契数定义 斐波那契数列又被称为黄金分割数列,指 1,1,2,3,5,8,13,21,... 等数列. 在数学中有递推的方法定义: F(0)=0,F(1)=1, F(2)=1,F(n)=F(n ...
- mysql 备份还原命令备忘
1.备份 mysqldump -u username -p databasename tableName > backupfile.sql 2.还原 mysql -u username -p p ...
- 92. 反转链表 II Golang实现
题目描述: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 ...
- centos7系统安装部署zabbix5.0
一.简介 zabbix是一个基于[WEB]界面的提供分布式[系统监视]以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证[服务器系统]的安全运营:并提供灵活的通知机制以让[系 ...
- Problem K. Master of Sequence(二分)
Problem K. Master of Sequence(二分) 补补题,人太菜了,一个题解看了两个小时才看明白(当然也可能是比赛的时候这个题完全不知道怎么下手qwq) 题目链接:http://ac ...
- 【2024.10.03】NOIP2024 赛前集训-刷题训练(5)
[2024.10.03]NOIP2024 赛前集训-刷题训练(5) NOIP2017 提高组 小凯的疑惑 形式化题面:求最大的正整数 \(w\),满足 \(ax + by = w\) 不存在一对非负整 ...