想必大家运营自己的网站的时候或多或少都有人的网站被DDoS,CC攻击等情况,下面一我会针对性的对于个人博客类网站介绍一些不错的方法,文章可能较长,希望对于一些有被攻击的网站博主起到一些作用。

首先我们需要了解针对网站有哪些攻击手段。

DDoS洪水

DDOS原理示意图

DDoS全称为:分布式拒绝服务攻击

分布式拒绝服务攻击可以使很多的计算机在同一时间遭受到攻击,使攻击的目标无法正常使用,分布式拒绝服务攻击已经出现了很多次,导致很多的大型网站都出现了无法进行操作的情况,这样不仅仅会影响用户的正常使用,同时造成的经济损失也是非常巨大的。
分布式拒绝服务攻击方式在进行攻击的时候,可以对源IP地址进行伪造,这样就使得这种攻击在发生的时候隐蔽性是非常好的,同时要对攻击进行检测也是非常困难的,因此这种攻击方式也成为了非常难以防范的攻击。

攻击原理

分布式拒绝服务攻击原理分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布的、协同的大规模攻击方式。单一的DoS攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。与DoS攻击由单台主机发起攻击相比较,分布式拒绝服务攻击DDoS是借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为。
一个完整的DDoS攻击体系由攻击者、主控端、代理端和攻击目标四部分组成。主控端和代理端分别用于控制和实际发起攻击,其中主控端只发布命令而不参与实际的攻击,代理端发出DDoS的实际攻击包。对于主控端和代理端的计算机,攻击者有控制权或者部分控制权.它在攻击过程中会利用各种手段隐藏自己不被别人发现。真正的攻击者一旦将攻击的命令传送到主控端,攻击者就可以关闭或离开网络.而由主控端将命令发布到各个代理主机上。这样攻击者可以逃避追踪。每一个攻击代理主机都会向目标主机发送大量的服务请求数据包,这些数据包经过伪装,无法识别它的来源,而且这些数据包所请求的服务往往要消耗大量的系统资源,造成目标主机无法为用户提供正常服务。甚至导致系统崩溃。

攻击类型

1、洪水攻击。
在洪水攻击中。傀儡机向受害者系统发送大量的数据流为了充塞受害者系统的带宽,影响小的则降低受害者提供的服务,影响大的则使整个网络带宽持续饱和,以至于网络服务瘫痪。典型的洪水攻击有UDP洪水攻击和ICMP洪水攻击。

2、扩大攻击。
扩大攻击分为两种,一种是利用广播lP地址的特性,一种是利用反射体来发动攻击。前一种攻击者是利用了广播IP地址的特性来扩大和映射攻击,导致路由器将数据包发送到整个网络的广播地址列表中的所有的广播IP地址。这些恶意的流量将减少受害者系统可提供的带宽。典型的扩大攻击有Smurf和Fraggle攻击。

3、利用协议的攻击。
该类攻击则是利用某些协议的特性或者利用了安装在受害者机器上的协议中存在的漏洞来耗尽它的大量资源。典型的利用协议攻击的例子是TCP SYN攻击。

4、畸形数据包攻击。
攻击者通过向受害者发送不正确的IP地址的数据包,导致受害系统崩溃。畸形数据包攻击可分为两种类型:IP地址攻击和IP数据包属性攻击。

攻击现象

DDoS的表现形式主要有两种,一种为流量攻击,主要是针对网络带宽的攻击,即大量攻击包导致网络带宽被阻塞,合法网络包被虚假的攻击包淹没而无法到达主机;另一种为资源耗尽攻击,主要是针对服务器主机的攻击,即通过大量攻击包导致主机的内存被耗尽或CPU被内核及应用程序占完而造成无法提供网络服务。当被DDoS攻击时,主要表现为:

  • (1)被攻击主机上有大量等待的TCP连接。
  • (2)网络中充斥着大量的无用的数据包,源地址为假。
  • (3)制造高流量无用数据,造成网络拥塞,使受害主机无法正常和外界通讯。
  • (4)利用受害主机提供的服务或传输协议上的缺陷,反复高速地发出特定的服务请求,使受害主机无法及时处理所有正常请求。
  • (5)严重时会造成系统死机。

攻击方式

1、SYN Flood攻击
SYN Flood攻击是当前网络上最为常见的DDoS攻击,它利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。

2、UDP Flood攻击
UDP Flood是日渐猖厥的流量型DDoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。由于UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。

3、ICMP Flood攻击
ICMP Flood攻击属于流量型的攻击方式,是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文。因此ICMP Flood出现的频度较低。

4、Connection Flood攻击
Connection Flood是典型的利用小流量冲击大带宽网络服务的攻击方式,这种攻击的原理是利用真实的IP地址向服务器发起大量的连接。并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器上残余连接(WAIT状态)过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的链接。

5、HTTP Get攻击 (又称作为CC攻击)
这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用。这种攻击的特点是可以绕过普通的防火墙防护,可通过Proxy代理实施攻击,缺点是攻击静态页面的网站效果不佳,会暴露攻击者的lP地址。

6、UDP DNS Query Flood攻击
UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。

总结

以上攻击总称DDOS分布式拒绝服务攻击,但是详细有延伸出CC等 第七层也就是应用层资源耗尽攻击,比如一个Web网站,第七层应用攻击会被肉鸡(非真人机器)大量请求HTTP GET或者PUT POST等从而使源站 带宽 CPU 等资源耗尽。详情就不做过多的介绍了,大家可以自行百度CC攻击。
总而言之,DDOS是需要获取到你的源站IP地址才可以进行攻击的,CC攻击不需要获取源站,即使用了CDN也可以被CC攻击,无法防御,只有花钱买高级防火墙才可防御。不防御的代价也很高,要么CDN的流量被刷欠费,要么源站死机!

开始防护

既然不想暴露网站的真实IP,那么真实服务器前面至少套一层代理。一般来说,位于最前线的反向代理主要有如下几种:

  • CDN:内容分发网络,就近为用户提供服务,加速访问;
  • 高防IP:高防IP一般位于大带宽的骨干网节点上,用于清洗DDoS流量;
  • SLB:负载均衡器,用在大流量、繁忙的网站上,常见的SLB有LVS、F5等。
    这三种反向代理主要作用不一样,配置好的情况下都能隐藏服务器真实IP。对于普通的网站,使用CDN或者高防就足够,业务量大的情况下才会用到SLB。

下面介绍使用了反向代理的情况下,隐藏网站真实IP的操作。

如何找到源站IP

这个在我以前的文章有介绍,大家具体可以去看:


防火墙

使用防火墙是最简单的做法,即:将反向代理的回源IP加入白名单,屏蔽其他IP的任何请求。

例如使用CloudFlare的免费CDN服务,其回源IP可从 https://www.cloudflare.com/zh-cn/ips/ 获取,然后将其加入白名单,同时屏蔽其他IP:

# 将cf ip地址放在 cf_ips.txt
# 首先将cf的ip加入白名单
while read -r line
do
  firewall-cmd --zone=trusted --add-source=$line
done < cf_ips.txt
# 然后移除其他ip对http和https服务的访问
firewall-cmd --remove-service=http
firewall-cmd --remove-service=https

经过上述设置,Cloudflare 的IP能正常访问,其他IP完全无法访问真实ip的网站服务器,很好的隐藏了真实IP。

该方法设置简单,适用于服务器托管单站点的情形。当服务器上托管多个网站,并且某些站点需要直接暴露外网时,这种做法缺乏灵活性,无法实现。

需要注意的是,上述方法也可用作于套了一层CDN后的防护,CDN本质也属于反向代理,各大云厂商都提供了CDN的回源IP段,把IP端加到防火墙或者服务器安全组即可屏蔽除CDN的对外所有连接。

安全组设置

如果你的服务器自带安全组,那么可以直接从安全组屏蔽掉除CDN的对外连接通信。

详情可参考阿里云文档:https://help.aliyun.com/document_detail/42726.html

上述安全组方法可以避免ZMap通过扫描全网IP段从而获取到最终的源站IP,非常实用!

CNAME

另一种常见隐藏真实IP方式是使用CNAME,同样无需设置防火墙。其操作如下:

  1. CDN回源时使用CNAME方式回源到另一个主机名上。例如www.ababab.com回源的www.adadad.cn。需要注意的是,前端域名和源站域名最好不是同一个,防止通过爆破二级域名泄漏真实IP;
  2. 在源站服务器上设置默认站点,防止通过host方式爆破。由于默认站点只是为了防止SNI方式泄漏真实IP,因此使用自签证书即可:
# 生成密钥
openssl genrsa -out example.key 2048
# 生成证书,期间需要填一些信息
openssl req -new -x509 -days 3650 -key example.key -out example.pem

接着以Nginx为例,设置默认站点:

server {
  listen 80 default_server;
  server_name example.com;
  return 301 https://example.com$request_uri;
}

server {
  listen 443 ssl http2;
  server_name example.com default_server;
  ssl_certificate example.pem;
  ssl_certificate_key example.key;
}

然后重启Nginx即可。

该方法无需设置防火墙,设置较为简单,但是需要额外一个域名。

上述方法可以避免Censys通过SSL扫源。

总结

上述介绍的方法是为了避免源站IP不暴露在某些扫描工具平台内,当然这里不只是Censys和ZMap,也有一些网络搜索引擎,比如fofd,钟馗之眼等。
fofa
对于他们的方法有2个,一个是设置安全组拒绝对CDN回源以外的任何连接,这样他们的搜索引擎就扫描不到你的源站IP了,第二个是,做了上述防护后不要通过IP直连方式进入网站后台等,比如我的源站5.5.5.5套入CDN后,由于CDN问题无法进入后套,从而用源站IP进入后台,比如http://5.5.5.5/admin 这种操作会直接暴露在上述网络空间引擎。
不要试图只关闭80和443端口或者给这两个端口单独加白名单,因为此空间引擎不只是扫描80和443端口!

上述就是关于网站防扫源站IP上一些心得和一些实用的防护方法,下一期我会介绍如何防护CC攻击。

最后修改:2021 年 04 月 18 日 05 : 38 PM
如果觉得我的文章对你有用,请随意赞赏