From bfb5dfa709ec55ab0cc57981b7d1504088d1bfac Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 25 四月 2022 18:44:38 +0800 Subject: [PATCH] 应对DDOS攻击IP切换优化 --- src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java | 71 ++++++++++++++++++++++++++++++++--- 1 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java b/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java index 3645305..71dc115 100644 --- a/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java +++ b/src/main/java/com/yeshi/buwan/job/domain/DDOSJob.java @@ -2,6 +2,7 @@ import com.aliyun.alidns20150109.models.DescribeSubDomainRecordsResponseBody; import com.tencentcloudapi.clb.v20180317.models.LoadBalancer; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.handler.annotation.XxlJob; import com.yeshi.buwan.domain.live.TVLiveChannel; @@ -30,6 +31,12 @@ @Component public class DDOSJob { + private String getBindIP() throws Exception { + DescribeSubDomainRecordsResponseBody.DescribeSubDomainRecordsResponseBodyDomainRecordsRecord record = AliyunDomainParseUtil.getIP("api.ysdq.yeshitv.com"); + String ip = record.getValue().trim(); + return ip; + } + //鍒囨崲琚吘璁簯灏佸牭鐨処P @XxlJob("ddos-buwan-server-change") public ReturnT<String> buwanServerChange(String params) throws Exception { @@ -40,18 +47,30 @@ List<String> blockIPS = new ArrayList<>(); List<String> normalIPS = new ArrayList<>(); + List<LoadBalancer> normals = new ArrayList<>(); for (LoadBalancer b : balances) { if (b.getIsBlock()) { blockIPS.add(b.getLoadBalancerVips()[0].trim()); } else { normalIPS.add(b.getLoadBalancerVips()[0].trim()); + normals.add(b); } } //鏃犲皝鍫� if (blockIPS.size() == 0) { + //鍦ㄦ病鏈夊皝鍫电殑鎯呭喌涓嬪垹闄ゅ浣欑殑璐熻浇鍧囪 + if (normalIPS.size() > 2) { + deleteMore(normals, getBindIP()); + } return ReturnT.SUCCESS; } + + //鍒犻櫎澶氫綑鐨勮礋杞藉潎琛� + if (normalIPS.size() > 2) { + deleteMore(normals, getBindIP()); + } + //鑾峰彇闃块噷浜戣В鏋愮殑鍩熷悕 DescribeSubDomainRecordsResponseBody.DescribeSubDomainRecordsResponseBodyDomainRecordsRecord record = AliyunDomainParseUtil.getIP("api.ysdq.yeshitv.com"); @@ -67,16 +86,54 @@ throw new Exception("鑵捐浜戣礋杞藉潎琛P宸插叏閮ㄨ灏佸牭锛岃澧炲姞IP"); } AliyunDomainParseUtil.setIP(record, normalIPS.get(normalIPS.size() - 1)); + + //姣忔鍒囨崲IP鍚庨渶瑕佸垽鏂槸鍚﹂渶瑕佸鍔營P锛岀敤浜庡垱寤烘柊鐨勮礋杞藉潎琛� + autoAdd(normalIPS.size(), balances.length); + return ReturnT.SUCCESS; } -// public static void main(String[] args){ -// try { -// new DDOSJob().buwanServerChange(""); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } + + private void autoAdd(int normalIPCount, int totalCount) throws TencentCloudSDKException { + if (normalIPCount < 2) { + //濮嬬粓淇濇寔2涓甯窱P + TencentCloudCLBUtil.createBuWanCLB(totalCount); + } + } + + //鍒犻櫎澶氫綑鐨� + private void deleteMore(List<LoadBalancer> normals, String bindIP) throws TencentCloudSDKException { + if (StringUtil.isNullOrEmpty(bindIP)) { + return; + } + + if (normals.size() > 2) { + //濮嬬粓淇濇寔2涓甯窱P + int deleteCount = normals.size() - 2; + List<String> bids = new ArrayList<>(); + for (LoadBalancer balancer : normals) { + //娌℃湁缁戝畾锛屽苟涓旇繕鑳藉垹闄� + if (!balancer.getLoadBalancerVips()[0].trim().equalsIgnoreCase(bindIP)) { + if (bids.size() < deleteCount) { + bids.add(balancer.getLoadBalancerId()); + } + } + } + if (bids.size() > 0) { + for (String bid : bids) { + TencentCloudCLBUtil.deleteCLB(bid); + } + } + } + } + + public static void main(String[] args){ + try { + new DDOSJob().buwanServerChange(""); + } catch (Exception e) { + e.printStackTrace(); + } + } } -- Gitblit v1.8.0