阿里云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 ...
随机推荐
- 向AWS迁移系统
向AWS迁移系统的考虑事项: 1.理解现在应用的架构和运行环境: 使用的OS,软件版本,依赖库,底层硬件,数据库,资源使用用量.性能等非功能要件. 基于这些信息设计在AWS上的架构,使用Ins ...
- Kafka社区KIP-500中文译文(去除ZooKeeper)
原文链接:https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Mana ...
- .NET 全功能流媒体管理控制接口平台
前言 视频会议.在线教育.直播娱乐还是远程监控,流媒体平台的性能和稳定性直接影响着用户体验. 给大家推荐一个基于 C# 开发的全功能流媒体管理控制接口平台. 项目介绍 AKStream是一个基于 C# ...
- 2-1 C++内置类型
目录 2.1.1 算术类型(Arithmetic Types) 概览 分类 整型与浮点型 有符号和无符号 存储 单位转换 常见类型的大小 几点说明 选择 2.1.2 类型转换(Type Convers ...
- PC大屏自适应 - 简洁版
PC大屏自适应通常做法 一般pc端页面布局会取中间一定的宽度,高度自适应.而可视化大屏需要在不同分辨率的显示屏上铺满整个屏幕,这就需要根据屏幕不同分辨率设置不同的宽高也就是自适应布局.在此向小伙伴们推 ...
- Python基础快速入门
1).Python运算符 1.Python算数运算符 描述: 例子: a = 21 b = 10 c = 0 c = a + b #31 c = a - b #11 c = a * b #210 c ...
- Django Admin之常用功能汇总
1.字段支持下拉搜索框 1)在admin中新增字段autocomplete_fields autocomplete_fields = ("field1","field2& ...
- Codeforces Round 732 (Div
AquaMoon and Strange Sort 有 \(n\) 个人从左到右站成一排,从左数第 \(i\) 个人的衣服上印着 \(a_i\).每个人的朝向可以是朝左.朝右.一开始所有人的方向都是朝 ...
- AtCoder Beginner Contest 378
Contest Link 还得加练. A & B & C & D 不具备任何思维含量. Submission A Submission B Submission C Submi ...
- 集成Nacos
版本统一:Spring Boot 2.6.11,Spring Cloud 2021.0.4,Spring Cloud Alibaba 2021.0.4.0: Maven 仓库记得配置中央仓库,私服上有 ...